Full Code of open-toontown/open-toontown for AI

develop a5ecbb8b1eba cached
1868 files
15.3 MB
4.1M tokens
28769 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (16,348K chars total). Download the full file to get everything.
Repository: open-toontown/open-toontown
Branch: develop
Commit: a5ecbb8b1eba
Files: 1868
Total size: 15.3 MB

Directory structure:
gitextract_42ieqy6d/

├── .gitignore
├── LICENSE
├── README.md
├── astron/
│   ├── config/
│   │   └── astrond.yml
│   ├── darwin/
│   │   └── astrond
│   ├── databases/
│   │   ├── .gitignore
│   │   └── astrondb/
│   │       └── .gitignore
│   └── logs/
│       └── .gitignore
├── darwin/
│   ├── .vscode/
│   │   └── tasks.json
│   ├── start-ai-server.sh
│   ├── start-astron-server.sh
│   ├── start-game.sh
│   └── start-uberdog-server.sh
├── etc/
│   ├── Configrc.prc
│   ├── otp.dc
│   └── toon.dc
├── linux/
│   ├── .vscode/
│   │   └── tasks.json
│   ├── start-ai-server.sh
│   ├── start-astron-server.sh
│   ├── start-game.sh
│   └── start-uberdog-server.sh
├── otp/
│   ├── __init__.py
│   ├── ai/
│   │   ├── AIBase.py
│   │   ├── AIBaseGlobal.py
│   │   ├── AIInterestHandles.py
│   │   ├── AIMsgTypes.py
│   │   ├── AIZoneData.py
│   │   ├── BanManagerAI.py
│   │   ├── Barrier.py
│   │   ├── GarbageLeakServerEventAggregator.py
│   │   ├── TimeManager.py
│   │   ├── TimeManagerAI.py
│   │   └── __init__.py
│   ├── avatar/
│   │   ├── Avatar.py
│   │   ├── AvatarDNA.py
│   │   ├── AvatarDetail.py
│   │   ├── AvatarHandle.py
│   │   ├── AvatarPanel.py
│   │   ├── DistributedAvatar.py
│   │   ├── DistributedAvatarAI.py
│   │   ├── DistributedAvatarUD.py
│   │   ├── DistributedPlayer.py
│   │   ├── DistributedPlayerAI.py
│   │   ├── Emote.py
│   │   ├── LocalAvatar.py
│   │   ├── PlayerBase.py
│   │   ├── PositionExaminer.py
│   │   ├── ShadowCaster.py
│   │   ├── SpeedMonitor.py
│   │   └── __init__.py
│   ├── chat/
│   │   ├── ChatGarbler.py
│   │   ├── ChatGlobals.py
│   │   ├── ChatInputNormal.py
│   │   ├── ChatInputTyped.py
│   │   ├── ChatInputWhiteListFrame.py
│   │   ├── ChatManager.py
│   │   ├── TalkAssistant.py
│   │   ├── TalkGlobals.py
│   │   ├── TalkHandle.py
│   │   ├── TalkMessage.py
│   │   ├── WhiteList.py
│   │   └── __init__.py
│   ├── distributed/
│   │   ├── Account.py
│   │   ├── AccountAI.py
│   │   ├── AccountUD.py
│   │   ├── AstronAccount.py
│   │   ├── AstronAccountAI.py
│   │   ├── AstronAccountUD.py
│   │   ├── CentralLogger.py
│   │   ├── CentralLoggerAI.py
│   │   ├── CentralLoggerUD.py
│   │   ├── ClsendTracker.py
│   │   ├── DistributedDirectory.py
│   │   ├── DistributedDirectoryAI.py
│   │   ├── DistributedDistrict.py
│   │   ├── DistributedDistrictAI.py
│   │   ├── DistributedDistrictUD.py
│   │   ├── DistributedTestObject.py
│   │   ├── DistributedTestObjectAI.py
│   │   ├── GameServerTestSuite.py
│   │   ├── OTPClientRepository.py
│   │   ├── OTPInternalRepository.py
│   │   ├── ObjectServer.py
│   │   ├── ObjectServerAI.py
│   │   ├── ObjectServerUD.py
│   │   ├── OtpDoGlobals.py
│   │   ├── PotentialAvatar.py
│   │   ├── PotentialShard.py
│   │   ├── TelemetryLimited.py
│   │   ├── TelemetryLimiter.py
│   │   └── __init__.py
│   ├── friends/
│   │   ├── AvatarFriendInfo.py
│   │   ├── AvatarFriendsManager.py
│   │   ├── AvatarFriendsManagerUD.py
│   │   ├── FriendInfo.py
│   │   ├── FriendManager.py
│   │   ├── FriendManagerAI.py
│   │   ├── FriendResponseCodes.py
│   │   ├── FriendSecret.py
│   │   ├── GuildManager.py
│   │   ├── GuildManagerAI.py
│   │   ├── GuildManagerUD.py
│   │   ├── PlayerFriendsManager.py
│   │   ├── PlayerFriendsManagerUD.py
│   │   └── __init__.py
│   ├── launcher/
│   │   ├── DownloadWatcher.py
│   │   ├── DummyLauncherBase.py
│   │   ├── LauncherBase.py
│   │   └── __init__.py
│   ├── level/
│   │   ├── AmbientSound.py
│   │   ├── AttribDesc.py
│   │   ├── BasicEntities.py
│   │   ├── CollisionSolidEntity.py
│   │   ├── CutScene.py
│   │   ├── DistributedEntity.py
│   │   ├── DistributedEntityAI.py
│   │   ├── DistributedInteractiveEntity.py
│   │   ├── DistributedInteractiveEntityAI.py
│   │   ├── DistributedLevel.py
│   │   ├── DistributedLevelAI.py
│   │   ├── EditMgr.py
│   │   ├── EditMgrAI.py
│   │   ├── EditMgrBase.py
│   │   ├── EditorGlobals.py
│   │   ├── Entity.py
│   │   ├── EntityCreator.py
│   │   ├── EntityCreatorAI.py
│   │   ├── EntityCreatorBase.py
│   │   ├── EntityStateVarSet.py
│   │   ├── EntityTypeDesc.py
│   │   ├── EntityTypeRegistry.py
│   │   ├── EntityTypes.py
│   │   ├── EntrancePoint.py
│   │   ├── Level.py
│   │   ├── LevelConstants.py
│   │   ├── LevelMgr.py
│   │   ├── LevelMgrAI.py
│   │   ├── LevelMgrBase.py
│   │   ├── LevelSpec.py
│   │   ├── LevelUtil.py
│   │   ├── LocatorEntity.py
│   │   ├── LogicGate.py
│   │   ├── ModelEntity.py
│   │   ├── PathEntity.py
│   │   ├── PropSpinner.py
│   │   ├── VisibilityBlocker.py
│   │   ├── VisibilityExtender.py
│   │   ├── ZoneEntity.py
│   │   ├── ZoneEntityAI.py
│   │   ├── ZoneEntityBase.py
│   │   └── __init__.py
│   ├── login/
│   │   ├── AstronLoginManager.py
│   │   ├── AstronLoginManagerUD.py
│   │   ├── CreateAccountScreen.py
│   │   ├── GuiScreen.py
│   │   ├── HTTPUtil.py
│   │   ├── LeaveToPayDialog.py
│   │   ├── LoginAstronAccount.py
│   │   ├── LoginBase.py
│   │   ├── LoginDISLTokenAccount.py
│   │   ├── LoginGSAccount.py
│   │   ├── LoginGoAccount.py
│   │   ├── LoginScreen.py
│   │   ├── LoginTTAccount.py
│   │   ├── LoginTTSpecificDevAccount.py
│   │   ├── LoginWebPlayTokenAccount.py
│   │   ├── MultiPageTextFrame.py
│   │   ├── PrivacyPolicyPanel.py
│   │   ├── SecretFriendsInfoPanel.py
│   │   └── __init__.py
│   ├── movement/
│   │   ├── Impulse.py
│   │   ├── Mover.py
│   │   ├── PyVec3.py
│   │   └── __init__.py
│   ├── namepanel/
│   │   ├── NameCheck.py
│   │   ├── NameTumbler.py
│   │   ├── PickANamePattern.py
│   │   └── __init__.py
│   ├── otpbase/
│   │   ├── OTPBase.py
│   │   ├── OTPGlobals.py
│   │   ├── OTPLauncherGlobals.py
│   │   ├── OTPLocalizer.py
│   │   ├── OTPLocalizerEnglish.py
│   │   ├── OTPLocalizerEnglishProperty.py
│   │   ├── OTPRender.py
│   │   ├── OTPTimer.py
│   │   ├── ObjectCount.py
│   │   ├── PythonUtil.py
│   │   └── __init__.py
│   ├── otpgui/
│   │   ├── OTPDialog.py
│   │   └── __init__.py
│   ├── settings/
│   │   ├── Settings.py
│   │   └── __init__.py
│   ├── snapshot/
│   │   ├── SnapshotDispatcher.py
│   │   ├── SnapshotDispatcherAI.py
│   │   ├── SnapshotDispatcherUD.py
│   │   ├── SnapshotRenderer.py
│   │   ├── SnapshotRendererAI.py
│   │   ├── SnapshotRendererUD.py
│   │   └── __init__.py
│   ├── speedchat/
│   │   ├── ColorSpace.py
│   │   ├── SCColorScheme.py
│   │   ├── SCConstants.py
│   │   ├── SCCustomMenu.py
│   │   ├── SCCustomTerminal.py
│   │   ├── SCDecoders.py
│   │   ├── SCElement.py
│   │   ├── SCEmoteMenu.py
│   │   ├── SCEmoteTerminal.py
│   │   ├── SCGMTextTerminal.py
│   │   ├── SCMenu.py
│   │   ├── SCMenuHolder.py
│   │   ├── SCObject.py
│   │   ├── SCSettings.py
│   │   ├── SCStaticTextTerminal.py
│   │   ├── SCTerminal.py
│   │   ├── SpeedChat.py
│   │   ├── SpeedChatGMHandler.py
│   │   ├── SpeedChatGlobals.py
│   │   ├── SpeedChatTypes.py
│   │   └── __init__.py
│   ├── status/
│   │   ├── StatusDatabase.py
│   │   ├── StatusDatabaseUD.py
│   │   └── __init__.py
│   ├── uberdog/
│   │   ├── AccountDetailRecord.py
│   │   ├── DistributedChatManager.py
│   │   ├── DistributedChatManagerAI.py
│   │   ├── DistributedChatManagerUD.py
│   │   ├── OtpAvatarManager.py
│   │   ├── OtpAvatarManagerAI.py
│   │   ├── OtpAvatarManagerUD.py
│   │   ├── RejectCode.py
│   │   ├── SpeedchatRelay.py
│   │   ├── SpeedchatRelayGlobals.py
│   │   ├── SpeedchatRelayUD.py
│   │   └── __init__.py
│   └── web/
│       ├── SettingsMgr.py
│       ├── SettingsMgrAI.py
│       ├── SettingsMgrBase.py
│       ├── SettingsMgrUD.py
│       └── __init__.py
├── requirements.txt
├── toontown/
│   ├── __init__.py
│   ├── ai/
│   │   ├── AIStart.py
│   │   ├── BlackCatHolidayMgrAI.py
│   │   ├── CrashedLeaderBoardDecorator.py
│   │   ├── DatabaseObject.py
│   │   ├── DistributedBlackCatMgr.py
│   │   ├── DistributedBlackCatMgrAI.py
│   │   ├── DistributedGreenToonEffectMgr.py
│   │   ├── DistributedGreenToonEffectMgrAI.py
│   │   ├── DistributedHydrantZeroMgr.py
│   │   ├── DistributedHydrantZeroMgrAI.py
│   │   ├── DistributedMailboxZeroMgr.py
│   │   ├── DistributedMailboxZeroMgrAI.py
│   │   ├── DistributedPhaseEventMgr.py
│   │   ├── DistributedPhaseEventMgrAI.py
│   │   ├── DistributedPolarPlaceEffectMgr.py
│   │   ├── DistributedPolarPlaceEffectMgrAI.py
│   │   ├── DistributedResistanceEmoteMgr.py
│   │   ├── DistributedResistanceEmoteMgrAI.py
│   │   ├── DistributedScavengerHuntTarget.py
│   │   ├── DistributedScavengerHuntTargetAI.py
│   │   ├── DistributedSillyMeterMgr.py
│   │   ├── DistributedSillyMeterMgrAI.py
│   │   ├── DistributedTrashcanZeroMgr.py
│   │   ├── DistributedTrashcanZeroMgrAI.py
│   │   ├── DistributedTrickOrTreatTarget.py
│   │   ├── DistributedTrickOrTreatTargetAI.py
│   │   ├── DistributedWinterCarolingTarget.py
│   │   ├── DistributedWinterCarolingTargetAI.py
│   │   ├── HalloweenHolidayDecorator.py
│   │   ├── HolidayBaseAI.py
│   │   ├── HolidayDecorator.py
│   │   ├── HolidayManagerAI.py
│   │   ├── NewsManager.py
│   │   ├── NewsManagerAI.py
│   │   ├── ServerEventBuffer.py
│   │   ├── ToonBarrier.py
│   │   ├── ToontownAIMsgTypes.py
│   │   ├── ToontownAIRepository.py
│   │   ├── WelcomeValleyManager.py
│   │   ├── WelcomeValleyManagerAI.py
│   │   └── __init__.py
│   ├── battle/
│   │   ├── BattleBase.py
│   │   ├── BattleCalculatorAI.py
│   │   ├── BattleExperience.py
│   │   ├── BattleExperienceAI.py
│   │   ├── BattleManagerAI.py
│   │   ├── BattleParticles.py
│   │   ├── BattlePlace.py
│   │   ├── BattleProps.py
│   │   ├── BattleSounds.py
│   │   ├── DistributedBattle.py
│   │   ├── DistributedBattleAI.py
│   │   ├── DistributedBattleBase.py
│   │   ├── DistributedBattleBaseAI.py
│   │   ├── DistributedBattleBldg.py
│   │   ├── DistributedBattleBldgAI.py
│   │   ├── DistributedBattleDiners.py
│   │   ├── DistributedBattleDinersAI.py
│   │   ├── DistributedBattleFinal.py
│   │   ├── DistributedBattleFinalAI.py
│   │   ├── DistributedBattleWaiters.py
│   │   ├── DistributedBattleWaitersAI.py
│   │   ├── Fanfare.py
│   │   ├── FireCogPanel.py
│   │   ├── HealJokes.py
│   │   ├── Movie.py
│   │   ├── MovieCamera.py
│   │   ├── MovieDrop.py
│   │   ├── MovieFire.py
│   │   ├── MovieHeal.py
│   │   ├── MovieLure.py
│   │   ├── MovieNPCSOS.py
│   │   ├── MoviePetSOS.py
│   │   ├── MovieSOS.py
│   │   ├── MovieSound.py
│   │   ├── MovieSquirt.py
│   │   ├── MovieSuitAttacks.py
│   │   ├── MovieThrow.py
│   │   ├── MovieToonVictory.py
│   │   ├── MovieTrap.py
│   │   ├── MovieUtil.py
│   │   ├── PlayByPlayText.py
│   │   ├── RewardPanel.py
│   │   ├── SuitBattleGlobals.py
│   │   └── __init__.py
│   ├── building/
│   │   ├── BoardingGroupShow.py
│   │   ├── BoardingPartyBase.py
│   │   ├── DistributedAnimBuilding.py
│   │   ├── DistributedAnimBuildingAI.py
│   │   ├── DistributedAnimDoor.py
│   │   ├── DistributedAnimDoorAI.py
│   │   ├── DistributedAnimatedProp.py
│   │   ├── DistributedAnimatedPropAI.py
│   │   ├── DistributedBBElevator.py
│   │   ├── DistributedBBElevatorAI.py
│   │   ├── DistributedBoardingParty.py
│   │   ├── DistributedBoardingPartyAI.py
│   │   ├── DistributedBossElevator.py
│   │   ├── DistributedBossElevatorAI.py
│   │   ├── DistributedBuilding.py
│   │   ├── DistributedBuildingAI.py
│   │   ├── DistributedBuildingMgrAI.py
│   │   ├── DistributedCFOElevator.py
│   │   ├── DistributedCFOElevatorAI.py
│   │   ├── DistributedCJElevator.py
│   │   ├── DistributedCJElevatorAI.py
│   │   ├── DistributedClubElevator.py
│   │   ├── DistributedClubElevatorAI.py
│   │   ├── DistributedDoor.py
│   │   ├── DistributedDoorAI.py
│   │   ├── DistributedElevator.py
│   │   ├── DistributedElevatorAI.py
│   │   ├── DistributedElevatorExt.py
│   │   ├── DistributedElevatorExtAI.py
│   │   ├── DistributedElevatorFSM.py
│   │   ├── DistributedElevatorFSMAI.py
│   │   ├── DistributedElevatorFloor.py
│   │   ├── DistributedElevatorFloorAI.py
│   │   ├── DistributedElevatorInt.py
│   │   ├── DistributedElevatorIntAI.py
│   │   ├── DistributedGagshopInterior.py
│   │   ├── DistributedGagshopInteriorAI.py
│   │   ├── DistributedHQInterior.py
│   │   ├── DistributedHQInteriorAI.py
│   │   ├── DistributedKartShopInterior.py
│   │   ├── DistributedKartShopInteriorAI.py
│   │   ├── DistributedKnockKnockDoor.py
│   │   ├── DistributedKnockKnockDoorAI.py
│   │   ├── DistributedPetshopInterior.py
│   │   ├── DistributedPetshopInteriorAI.py
│   │   ├── DistributedSuitInterior.py
│   │   ├── DistributedSuitInteriorAI.py
│   │   ├── DistributedToonHallInterior.py
│   │   ├── DistributedToonHallInteriorAI.py
│   │   ├── DistributedToonInterior.py
│   │   ├── DistributedToonInteriorAI.py
│   │   ├── DistributedTrophyMgr.py
│   │   ├── DistributedTrophyMgrAI.py
│   │   ├── DistributedTutorialInterior.py
│   │   ├── DistributedTutorialInteriorAI.py
│   │   ├── DistributedVPElevator.py
│   │   ├── DistributedVPElevatorAI.py
│   │   ├── DoorTypes.py
│   │   ├── Elevator.py
│   │   ├── ElevatorConstants.py
│   │   ├── ElevatorUtils.py
│   │   ├── FADoorCodes.py
│   │   ├── GagshopBuildingAI.py
│   │   ├── HQBuildingAI.py
│   │   ├── KartShopBuildingAI.py
│   │   ├── KnockKnockJokes.py
│   │   ├── PetshopBuildingAI.py
│   │   ├── SuitBuildingGlobals.py
│   │   ├── SuitInterior.py
│   │   ├── SuitPlannerInteriorAI.py
│   │   ├── ToonInterior.py
│   │   ├── ToonInteriorColors.py
│   │   ├── TutorialBuildingAI.py
│   │   ├── TutorialHQBuildingAI.py
│   │   └── __init__.py
│   ├── catalog/
│   │   ├── CatalogAccessoryItem.py
│   │   ├── CatalogAccessoryItemGlobals.py
│   │   ├── CatalogAnimatedFurnitureItem.py
│   │   ├── CatalogAtticItem.py
│   │   ├── CatalogBeanItem.py
│   │   ├── CatalogChatItem.py
│   │   ├── CatalogChatItemPicker.py
│   │   ├── CatalogClothingItem.py
│   │   ├── CatalogEmoteItem.py
│   │   ├── CatalogFlooringItem.py
│   │   ├── CatalogFurnitureItem.py
│   │   ├── CatalogGardenItem.py
│   │   ├── CatalogGardenStarterItem.py
│   │   ├── CatalogGenerator.py
│   │   ├── CatalogInvalidItem.py
│   │   ├── CatalogItem.py
│   │   ├── CatalogItemList.py
│   │   ├── CatalogItemPanel.py
│   │   ├── CatalogItemTypes.py
│   │   ├── CatalogManager.py
│   │   ├── CatalogManagerAI.py
│   │   ├── CatalogMouldingItem.py
│   │   ├── CatalogNametagItem.py
│   │   ├── CatalogNotifyDialog.py
│   │   ├── CatalogPetTrickItem.py
│   │   ├── CatalogPoleItem.py
│   │   ├── CatalogRentalItem.py
│   │   ├── CatalogScreen.py
│   │   ├── CatalogSurfaceColors.py
│   │   ├── CatalogSurfaceItem.py
│   │   ├── CatalogToonStatueItem.py
│   │   ├── CatalogWainscotingItem.py
│   │   ├── CatalogWallpaperItem.py
│   │   ├── CatalogWindowItem.py
│   │   ├── MailboxScreen.py
│   │   └── __init__.py
│   ├── char/
│   │   ├── Char.py
│   │   ├── CharDNA.py
│   │   ├── DistributedChar.py
│   │   └── __init__.py
│   ├── chat/
│   │   ├── ResistanceChat.py
│   │   ├── TTChatInputNormal.py
│   │   ├── TTChatInputSpeedChat.py
│   │   ├── TTChatInputWhiteList.py
│   │   ├── TTSCWhiteListTerminal.py
│   │   ├── TTTalkAssistant.py
│   │   ├── TTWhiteList.py
│   │   ├── ToonChatGarbler.py
│   │   ├── ToontownChatManager.py
│   │   └── __init__.py
│   ├── classicchars/
│   │   ├── CCharChatter.py
│   │   ├── CCharPaths.py
│   │   ├── CharStateDatas.py
│   │   ├── CharStateDatasAI.py
│   │   ├── DistributedCCharBase.py
│   │   ├── DistributedCCharBaseAI.py
│   │   ├── DistributedChip.py
│   │   ├── DistributedChipAI.py
│   │   ├── DistributedDaisy.py
│   │   ├── DistributedDaisyAI.py
│   │   ├── DistributedDale.py
│   │   ├── DistributedDaleAI.py
│   │   ├── DistributedDonald.py
│   │   ├── DistributedDonaldAI.py
│   │   ├── DistributedDonaldDock.py
│   │   ├── DistributedDonaldDockAI.py
│   │   ├── DistributedFrankenDonald.py
│   │   ├── DistributedFrankenDonaldAI.py
│   │   ├── DistributedGoofy.py
│   │   ├── DistributedGoofyAI.py
│   │   ├── DistributedGoofySpeedway.py
│   │   ├── DistributedGoofySpeedwayAI.py
│   │   ├── DistributedJailbirdDale.py
│   │   ├── DistributedJailbirdDaleAI.py
│   │   ├── DistributedMickey.py
│   │   ├── DistributedMickeyAI.py
│   │   ├── DistributedMinnie.py
│   │   ├── DistributedMinnieAI.py
│   │   ├── DistributedPluto.py
│   │   ├── DistributedPlutoAI.py
│   │   ├── DistributedPoliceChip.py
│   │   ├── DistributedPoliceChipAI.py
│   │   ├── DistributedSockHopDaisy.py
│   │   ├── DistributedSockHopDaisyAI.py
│   │   ├── DistributedSuperGoofy.py
│   │   ├── DistributedSuperGoofyAI.py
│   │   ├── DistributedVampireMickey.py
│   │   ├── DistributedVampireMickeyAI.py
│   │   ├── DistributedWesternPluto.py
│   │   ├── DistributedWesternPlutoAI.py
│   │   ├── DistributedWitchMinnie.py
│   │   ├── DistributedWitchMinnieAI.py
│   │   └── __init__.py
│   ├── coderedemption/
│   │   ├── TTCodeRedemptionConsts.py
│   │   ├── TTCodeRedemptionMgr.py
│   │   ├── TTCodeRedemptionMgrAI.py
│   │   ├── TTCodeRedemptionMgrUD.py
│   │   └── __init__.py
│   ├── cogdominium/
│   │   ├── CogdoBarrelRoom.py
│   │   ├── CogdoBarrelRoomAI.py
│   │   ├── CogdoBarrelRoomConsts.py
│   │   ├── CogdoBarrelRoomRewardPanel.py
│   │   ├── CogdoBoardroomGameBase.py
│   │   ├── CogdoBoardroomGameConsts.py
│   │   ├── CogdoBoardroomGameSpec.py
│   │   ├── CogdoCraneGameBase.py
│   │   ├── CogdoCraneGameConsts.py
│   │   ├── CogdoCraneGameSpec.py
│   │   ├── CogdoElevatorMovie.py
│   │   ├── CogdoEntityCreator.py
│   │   ├── CogdoEntityCreatorAI.py
│   │   ├── CogdoEntityTypes.py
│   │   ├── CogdoExecutiveSuiteMovies.py
│   │   ├── CogdoFlyingCameraManager.py
│   │   ├── CogdoFlyingCollisions.py
│   │   ├── CogdoFlyingGame.py
│   │   ├── CogdoFlyingGameGlobals.py
│   │   ├── CogdoFlyingGameGuis.py
│   │   ├── CogdoFlyingGameMovies.py
│   │   ├── CogdoFlyingGuiManager.py
│   │   ├── CogdoFlyingInputManager.py
│   │   ├── CogdoFlyingLegalEagle.py
│   │   ├── CogdoFlyingLevel.py
│   │   ├── CogdoFlyingLevelQuadrant.py
│   │   ├── CogdoFlyingLocalPlayer.py
│   │   ├── CogdoFlyingObjects.py
│   │   ├── CogdoFlyingObstacles.py
│   │   ├── CogdoFlyingPlayer.py
│   │   ├── CogdoFlyingShadowPlacer.py
│   │   ├── CogdoFlyingUtil.py
│   │   ├── CogdoGameAudioManager.py
│   │   ├── CogdoGameConsts.py
│   │   ├── CogdoGameExit.py
│   │   ├── CogdoGameGatherable.py
│   │   ├── CogdoGameMessageDisplay.py
│   │   ├── CogdoGameRulesPanel.py
│   │   ├── CogdoInterior.py
│   │   ├── CogdoLayout.py
│   │   ├── CogdoLevelGameBase.py
│   │   ├── CogdoLevelMgr.py
│   │   ├── CogdoLevelMgrAI.py
│   │   ├── CogdoMaze.py
│   │   ├── CogdoMazeCameraManager.py
│   │   ├── CogdoMazeData.py
│   │   ├── CogdoMazeGame.py
│   │   ├── CogdoMazeGameGlobals.py
│   │   ├── CogdoMazeGameGuis.py
│   │   ├── CogdoMazeGameMovies.py
│   │   ├── CogdoMazeGameObjects.py
│   │   ├── CogdoMazeGuiManager.py
│   │   ├── CogdoMazeLocalPlayer.py
│   │   ├── CogdoMazePlayer.py
│   │   ├── CogdoMazeSuits.py
│   │   ├── CogdoMemoGui.py
│   │   ├── CogdoUtil.py
│   │   ├── DistCogdoBoardroomGame.py
│   │   ├── DistCogdoBoardroomGameAI.py
│   │   ├── DistCogdoCrane.py
│   │   ├── DistCogdoCraneAI.py
│   │   ├── DistCogdoCraneCog.py
│   │   ├── DistCogdoCraneCogAI.py
│   │   ├── DistCogdoCraneGame.py
│   │   ├── DistCogdoCraneGameAI.py
│   │   ├── DistCogdoCraneMoneyBag.py
│   │   ├── DistCogdoCraneMoneyBagAI.py
│   │   ├── DistCogdoCraneObject.py
│   │   ├── DistCogdoCraneObjectAI.py
│   │   ├── DistCogdoFlyingGame.py
│   │   ├── DistCogdoFlyingGameAI.py
│   │   ├── DistCogdoGame.py
│   │   ├── DistCogdoGameAI.py
│   │   ├── DistCogdoGameBase.py
│   │   ├── DistCogdoLevelGame.py
│   │   ├── DistCogdoLevelGameAI.py
│   │   ├── DistCogdoMazeGame.py
│   │   ├── DistCogdoMazeGameAI.py
│   │   ├── DistCogdoMazeGameBase.py
│   │   ├── DistributedCogdoBarrel.py
│   │   ├── DistributedCogdoBarrelAI.py
│   │   ├── DistributedCogdoBattleBldg.py
│   │   ├── DistributedCogdoBattleBldgAI.py
│   │   ├── DistributedCogdoElevatorExt.py
│   │   ├── DistributedCogdoElevatorExtAI.py
│   │   ├── DistributedCogdoElevatorInt.py
│   │   ├── DistributedCogdoElevatorIntAI.py
│   │   ├── DistributedCogdoInterior.py
│   │   ├── DistributedCogdoInteriorAI.py
│   │   ├── SuitPlannerCogdoInteriorAI.py
│   │   └── __init__.py
│   ├── coghq/
│   │   ├── ActiveCell.py
│   │   ├── ActiveCellAI.py
│   │   ├── BanquetTableBase.py
│   │   ├── BarrelBase.py
│   │   ├── BattleBlocker.py
│   │   ├── BattleBlockerAI.py
│   │   ├── BattleExperienceAggregatorAI.py
│   │   ├── BossbotCogHQLoader.py
│   │   ├── BossbotCountryClubEntrance_Action00.py
│   │   ├── BossbotCountryClubFairwayRoom_Battle00.py
│   │   ├── BossbotCountryClubFairwayRoom_Battle00_Cogs.py
│   │   ├── BossbotCountryClubGreenRoom_Action00.py
│   │   ├── BossbotCountryClubGreenRoom_Action01.py
│   │   ├── BossbotCountryClubGreenRoom_Action02.py
│   │   ├── BossbotCountryClubKartRoom_Battle00.py
│   │   ├── BossbotCountryClubKartRoom_Battle00_Cogs.py
│   │   ├── BossbotCountryClubMazeRoom_Battle00.py
│   │   ├── BossbotCountryClubMazeRoom_Battle00_Cogs.py
│   │   ├── BossbotCountryClubMazeRoom_Battle01.py
│   │   ├── BossbotCountryClubMazeRoom_Battle01_Cogs.py
│   │   ├── BossbotCountryClubMazeRoom_Battle02.py
│   │   ├── BossbotCountryClubMazeRoom_Battle02_Cogs.py
│   │   ├── BossbotCountryClubMazeRoom_Battle03_Cogs.py
│   │   ├── BossbotCountryClubPresidentRoom_Battle00.py
│   │   ├── BossbotCountryClubPresidentRoom_Battle00_Cogs.py
│   │   ├── BossbotCountryClubTeeOffRoom_Action00.py
│   │   ├── BossbotCountryClubTeeOffRoom_Action01.py
│   │   ├── BossbotCountryClubTeeOffRoom_Action02.py
│   │   ├── BossbotHQBossBattle.py
│   │   ├── BossbotHQExterior.py
│   │   ├── BossbotOfficeExterior.py
│   │   ├── CashbotCogHQLoader.py
│   │   ├── CashbotHQBossBattle.py
│   │   ├── CashbotHQExterior.py
│   │   ├── CashbotMintBoilerRoom_Action00.py
│   │   ├── CashbotMintBoilerRoom_Battle00.py
│   │   ├── CashbotMintBoilerRoom_Battle00_Cogs.py
│   │   ├── CashbotMintBoilerRoom_Battle01.py
│   │   ├── CashbotMintBoilerRoom_Battle01_Cogs.py
│   │   ├── CashbotMintControlRoom_Battle00.py
│   │   ├── CashbotMintControlRoom_Battle00_Cogs.py
│   │   ├── CashbotMintDuctRoom_Action00.py
│   │   ├── CashbotMintDuctRoom_Battle00.py
│   │   ├── CashbotMintDuctRoom_Battle00_Cogs.py
│   │   ├── CashbotMintDuctRoom_Battle01.py
│   │   ├── CashbotMintDuctRoom_Battle01_Cogs.py
│   │   ├── CashbotMintEntrance_Action00.py
│   │   ├── CashbotMintGearRoom_Action00.py
│   │   ├── CashbotMintGearRoom_Battle00.py
│   │   ├── CashbotMintGearRoom_Battle00_Cogs.py
│   │   ├── CashbotMintGearRoom_Battle01.py
│   │   ├── CashbotMintGearRoom_Battle01_Cogs.py
│   │   ├── CashbotMintLavaRoomFoyer_Action00.py
│   │   ├── CashbotMintLavaRoomFoyer_Action01.py
│   │   ├── CashbotMintLavaRoomFoyer_Battle00.py
│   │   ├── CashbotMintLavaRoomFoyer_Battle00_Cogs.py
│   │   ├── CashbotMintLavaRoomFoyer_Battle01.py
│   │   ├── CashbotMintLavaRoomFoyer_Battle01_Cogs.py
│   │   ├── CashbotMintLavaRoom_Action00.py
│   │   ├── CashbotMintLobby_Action00.py
│   │   ├── CashbotMintLobby_Battle00.py
│   │   ├── CashbotMintLobby_Battle00_Cogs.py
│   │   ├── CashbotMintLobby_Battle01.py
│   │   ├── CashbotMintLobby_Battle01_Cogs.py
│   │   ├── CashbotMintOilRoom_Battle00.py
│   │   ├── CashbotMintOilRoom_Battle00_Cogs.py
│   │   ├── CashbotMintPaintMixerReward_Battle00.py
│   │   ├── CashbotMintPaintMixerReward_Battle00_Cogs.py
│   │   ├── CashbotMintPaintMixer_Action00.py
│   │   ├── CashbotMintPipeRoom_Action00.py
│   │   ├── CashbotMintPipeRoom_Battle00.py
│   │   ├── CashbotMintPipeRoom_Battle00_Cogs.py
│   │   ├── CashbotMintPipeRoom_Battle01.py
│   │   ├── CashbotMintPipeRoom_Battle01_Cogs.py
│   │   ├── CashbotMintStomperAlley_Action00.py
│   │   ├── CogDisguiseGlobals.py
│   │   ├── CogHQBossBattle.py
│   │   ├── CogHQExterior.py
│   │   ├── CogHQLoader.py
│   │   ├── CogHQLobby.py
│   │   ├── CogSuitManagerAI.py
│   │   ├── ConveyorBelt.py
│   │   ├── CountryClubInterior.py
│   │   ├── CountryClubLayout.py
│   │   ├── CountryClubManagerAI.py
│   │   ├── CountryClubRoom.py
│   │   ├── CountryClubRoomBase.py
│   │   ├── CountryClubRoomSpecs.py
│   │   ├── CrateGlobals.py
│   │   ├── CrusherCell.py
│   │   ├── CrusherCellAI.py
│   │   ├── DinerStatusIndicator.py
│   │   ├── DirectionalCell.py
│   │   ├── DirectionalCellAI.py
│   │   ├── DistributedBanquetTable.py
│   │   ├── DistributedBanquetTableAI.py
│   │   ├── DistributedBarrelBase.py
│   │   ├── DistributedBarrelBaseAI.py
│   │   ├── DistributedBattleFactory.py
│   │   ├── DistributedBattleFactoryAI.py
│   │   ├── DistributedBeanBarrel.py
│   │   ├── DistributedBeanBarrelAI.py
│   │   ├── DistributedButton.py
│   │   ├── DistributedButtonAI.py
│   │   ├── DistributedCashbotBossCrane.py
│   │   ├── DistributedCashbotBossCraneAI.py
│   │   ├── DistributedCashbotBossObject.py
│   │   ├── DistributedCashbotBossObjectAI.py
│   │   ├── DistributedCashbotBossSafe.py
│   │   ├── DistributedCashbotBossSafeAI.py
│   │   ├── DistributedCashbotBossTreasure.py
│   │   ├── DistributedCashbotBossTreasureAI.py
│   │   ├── DistributedCogHQDoor.py
│   │   ├── DistributedCogHQDoorAI.py
│   │   ├── DistributedCogKart.py
│   │   ├── DistributedCogKartAI.py
│   │   ├── DistributedCountryClub.py
│   │   ├── DistributedCountryClubAI.py
│   │   ├── DistributedCountryClubBattle.py
│   │   ├── DistributedCountryClubBattleAI.py
│   │   ├── DistributedCountryClubRoom.py
│   │   ├── DistributedCountryClubRoomAI.py
│   │   ├── DistributedCrate.py
│   │   ├── DistributedCrateAI.py
│   │   ├── DistributedCrushableEntity.py
│   │   ├── DistributedCrushableEntityAI.py
│   │   ├── DistributedCrusherEntity.py
│   │   ├── DistributedCrusherEntityAI.py
│   │   ├── DistributedDoorEntity.py
│   │   ├── DistributedDoorEntityAI.py
│   │   ├── DistributedDoorEntityBase.py
│   │   ├── DistributedElevatorMarker.py
│   │   ├── DistributedElevatorMarkerAI.py
│   │   ├── DistributedFactory.py
│   │   ├── DistributedFactoryAI.py
│   │   ├── DistributedFactoryElevatorExt.py
│   │   ├── DistributedFactoryElevatorExtAI.py
│   │   ├── DistributedFoodBelt.py
│   │   ├── DistributedFoodBeltAI.py
│   │   ├── DistributedGagBarrel.py
│   │   ├── DistributedGagBarrelAI.py
│   │   ├── DistributedGolfGreenGame.py
│   │   ├── DistributedGolfGreenGameAI.py
│   │   ├── DistributedGolfSpot.py
│   │   ├── DistributedGolfSpotAI.py
│   │   ├── DistributedGrid.py
│   │   ├── DistributedGridAI.py
│   │   ├── DistributedHealBarrel.py
│   │   ├── DistributedHealBarrelAI.py
│   │   ├── DistributedInGameEditor.py
│   │   ├── DistributedInGameEditorAI.py
│   │   ├── DistributedLaserField.py
│   │   ├── DistributedLaserFieldAI.py
│   │   ├── DistributedLawOffice.py
│   │   ├── DistributedLawOfficeAI.py
│   │   ├── DistributedLawOfficeElevatorExt.py
│   │   ├── DistributedLawOfficeElevatorExtAI.py
│   │   ├── DistributedLawOfficeElevatorInt.py
│   │   ├── DistributedLawOfficeElevatorIntAI.py
│   │   ├── DistributedLawOfficeFloor.py
│   │   ├── DistributedLawOfficeFloorAI.py
│   │   ├── DistributedLawbotBossGavel.py
│   │   ├── DistributedLawbotBossGavelAI.py
│   │   ├── DistributedLawbotCannon.py
│   │   ├── DistributedLawbotCannonAI.py
│   │   ├── DistributedLawbotChair.py
│   │   ├── DistributedLawbotChairAI.py
│   │   ├── DistributedLevelBattle.py
│   │   ├── DistributedLevelBattleAI.py
│   │   ├── DistributedLift.py
│   │   ├── DistributedLiftAI.py
│   │   ├── DistributedMaze.py
│   │   ├── DistributedMazeAI.py
│   │   ├── DistributedMint.py
│   │   ├── DistributedMintAI.py
│   │   ├── DistributedMintBattle.py
│   │   ├── DistributedMintBattleAI.py
│   │   ├── DistributedMintElevatorExt.py
│   │   ├── DistributedMintElevatorExtAI.py
│   │   ├── DistributedMintRoom.py
│   │   ├── DistributedMintRoomAI.py
│   │   ├── DistributedMoleField.py
│   │   ├── DistributedMoleFieldAI.py
│   │   ├── DistributedMover.py
│   │   ├── DistributedMoverAI.py
│   │   ├── DistributedSecurityCamera.py
│   │   ├── DistributedSecurityCameraAI.py
│   │   ├── DistributedSellbotHQDoor.py
│   │   ├── DistributedSellbotHQDoorAI.py
│   │   ├── DistributedSinkingPlatform.py
│   │   ├── DistributedSinkingPlatformAI.py
│   │   ├── DistributedStage.py
│   │   ├── DistributedStageAI.py
│   │   ├── DistributedStageBattle.py
│   │   ├── DistributedStageBattleAI.py
│   │   ├── DistributedStageRoom.py
│   │   ├── DistributedStageRoomAI.py
│   │   ├── DistributedStomper.py
│   │   ├── DistributedStomperAI.py
│   │   ├── DistributedStomperPair.py
│   │   ├── DistributedStomperPairAI.py
│   │   ├── DistributedSwitch.py
│   │   ├── DistributedSwitchAI.py
│   │   ├── DistributedSwitchBase.py
│   │   ├── DistributedTrigger.py
│   │   ├── DistributedTriggerAI.py
│   │   ├── FactoryBase.py
│   │   ├── FactoryCameraViews.py
│   │   ├── FactoryEntityCreator.py
│   │   ├── FactoryEntityCreatorAI.py
│   │   ├── FactoryEntityTypes.py
│   │   ├── FactoryExterior.py
│   │   ├── FactoryInterior.py
│   │   ├── FactoryLevelMgr.py
│   │   ├── FactoryLevelMgrAI.py
│   │   ├── FactoryManagerAI.py
│   │   ├── FactoryMockupCogs.py
│   │   ├── FactoryMockupSpec.py
│   │   ├── FactorySpecs.py
│   │   ├── FactoryUtil.py
│   │   ├── FoodBeltBase.py
│   │   ├── GameSprite3D.py
│   │   ├── GearEntity.py
│   │   ├── GolfGreenGameGlobals.py
│   │   ├── GoonClipPlane.py
│   │   ├── InGameEditor.py
│   │   ├── InGameEditorDCImports.py
│   │   ├── InGameEditorDCImportsAI.py
│   │   ├── InGameEditorElements.py
│   │   ├── LaserGameAvoid.py
│   │   ├── LaserGameBase.py
│   │   ├── LaserGameDrag.py
│   │   ├── LaserGameMineSweeper.py
│   │   ├── LaserGameRoll.py
│   │   ├── LawOfficeBase.py
│   │   ├── LawOfficeLayout.py
│   │   ├── LawOfficeManagerAI.py
│   │   ├── LawOffice_Spec_Tier0_a.py
│   │   ├── LawOffice_Spec_Tier0_b.py
│   │   ├── LawbotCogHQLoader.py
│   │   ├── LawbotHQBossBattle.py
│   │   ├── LawbotHQExterior.py
│   │   ├── LawbotLegFactoryCogs.py
│   │   ├── LawbotLegFactorySpec.py
│   │   ├── LawbotOfficeBoilerRoom_Action01.py
│   │   ├── LawbotOfficeBoilerRoom_Battle00.py
│   │   ├── LawbotOfficeBoilerRoom_Battle00_Cogs.py
│   │   ├── LawbotOfficeBoilerRoom_Security00.py
│   │   ├── LawbotOfficeBoilerRoom_Trap00.py
│   │   ├── LawbotOfficeBoilerRoom_Trap00_Cogs.py
│   │   ├── LawbotOfficeDiamondRoom_Action00.py
│   │   ├── LawbotOfficeDiamondRoom_Action01.py
│   │   ├── LawbotOfficeDiamondRoom_Battle00.py
│   │   ├── LawbotOfficeDiamondRoom_Battle00_Cogs.py
│   │   ├── LawbotOfficeDiamondRoom_Security00.py
│   │   ├── LawbotOfficeDiamondRoom_Trap00.py
│   │   ├── LawbotOfficeDiamondRoom_Trap00_Cogs.py
│   │   ├── LawbotOfficeEntrance_Action00.py
│   │   ├── LawbotOfficeExterior.py
│   │   ├── LawbotOfficeGearRoom_Action00.py
│   │   ├── LawbotOfficeGearRoom_Battle00.py
│   │   ├── LawbotOfficeGearRoom_Battle00_Cogs.py
│   │   ├── LawbotOfficeGearRoom_Platform00.py
│   │   ├── LawbotOfficeGearRoom_Security00.py
│   │   ├── LawbotOfficeLobby_Action00.py
│   │   ├── LawbotOfficeLobby_Action01.py
│   │   ├── LawbotOfficeLobby_Lights00.py
│   │   ├── LawbotOfficeLobby_Trap00.py
│   │   ├── LawbotOfficeLobby_Trap00_Cogs.py
│   │   ├── LawbotOfficeOilRoom_Battle00.py
│   │   ├── LawbotOfficeOilRoom_Battle00_Cogs.py
│   │   ├── LawbotOfficeOilRoom_Battle01.py
│   │   ├── LawbotOfficeOilRoom_Battle01_Cogs.py
│   │   ├── LevelBattleManagerAI.py
│   │   ├── LevelSuitPlannerAI.py
│   │   ├── LiftConstants.py
│   │   ├── LobbyManager.py
│   │   ├── LobbyManagerAI.py
│   │   ├── MintInterior.py
│   │   ├── MintLayout.py
│   │   ├── MintManagerAI.py
│   │   ├── MintProduct.py
│   │   ├── MintProductPallet.py
│   │   ├── MintRoom.py
│   │   ├── MintRoomBase.py
│   │   ├── MintRoomSpecs.py
│   │   ├── MintShelf.py
│   │   ├── MoleFieldBase.py
│   │   ├── MoleHill.py
│   │   ├── MovingPlatform.py
│   │   ├── NullCogs.py
│   │   ├── PaintMixer.py
│   │   ├── PathMasterEntity.py
│   │   ├── PlatformEntity.py
│   │   ├── PromotionManagerAI.py
│   │   ├── RenderingEntity.py
│   │   ├── SellbotCogHQLoader.py
│   │   ├── SellbotHQBossBattle.py
│   │   ├── SellbotHQExterior.py
│   │   ├── SellbotLegFactoryCogs.py
│   │   ├── SellbotLegFactorySpec.py
│   │   ├── SinkingPlatformGlobals.py
│   │   ├── SpecImports.py
│   │   ├── StageInterior.py
│   │   ├── StageLayout.py
│   │   ├── StageManagerAI.py
│   │   ├── StageRoom.py
│   │   ├── StageRoomBase.py
│   │   ├── StageRoomSpecs.py
│   │   ├── StomperGlobals.py
│   │   └── __init__.py
│   ├── distributed/
│   │   ├── DelayDeletable.py
│   │   ├── DelayDelete.py
│   │   ├── DistributedTimer.py
│   │   ├── DistributedTimerAI.py
│   │   ├── HoodMgr.py
│   │   ├── NonRepeatableRandomSourceAI.py
│   │   ├── NonRepeatableRandomSourceUD.py
│   │   ├── PlayGame.py
│   │   ├── ToontownClientRepository.py
│   │   ├── ToontownDistrict.py
│   │   ├── ToontownDistrictAI.py
│   │   ├── ToontownDistrictStats.py
│   │   ├── ToontownDistrictStatsAI.py
│   │   ├── ToontownInternalRepository.py
│   │   ├── ToontownMsgTypes.py
│   │   └── __init__.py
│   ├── effects/
│   │   ├── BlastEffect.py
│   │   ├── Bubbles.py
│   │   ├── CarSmoke.py
│   │   ├── ChrysanthemumEffect.py
│   │   ├── DistributedFireworkShow.py
│   │   ├── DistributedFireworkShowAI.py
│   │   ├── Drift.py
│   │   ├── DustCloud.py
│   │   ├── EffectController.py
│   │   ├── Firework.py
│   │   ├── FireworkEffect.py
│   │   ├── FireworkGlobals.py
│   │   ├── FireworkShow.py
│   │   ├── FireworkShowMixin.py
│   │   ├── FireworkShows.py
│   │   ├── FireworkSparkles.py
│   │   ├── Fireworks.py
│   │   ├── FlashEffect.py
│   │   ├── Glow.py
│   │   ├── GlowTrail.py
│   │   ├── IceCream.py
│   │   ├── NoiseSparkles.py
│   │   ├── PeonyEffect.py
│   │   ├── PolyTrail.py
│   │   ├── PooledEffect.py
│   │   ├── RayBurst.py
│   │   ├── RingEffect.py
│   │   ├── Ripples.py
│   │   ├── RocketExplosion.py
│   │   ├── ScavengerHuntEffects.py
│   │   ├── SimpleSparkles.py
│   │   ├── SkullBurst.py
│   │   ├── SkullFlash.py
│   │   ├── Sparks.py
│   │   ├── SparksTrail.py
│   │   ├── SparksTrailLong.py
│   │   ├── Splash.py
│   │   ├── StarBurst.py
│   │   ├── TrailExplosion.py
│   │   ├── Wake.py
│   │   └── __init__.py
│   ├── estate/
│   │   ├── BankGUI.py
│   │   ├── BankGlobals.py
│   │   ├── BeanRecipeGui.py
│   │   ├── CannonGlobals.py
│   │   ├── ClosetGUI.py
│   │   ├── ClosetGlobals.py
│   │   ├── DistributedAnimatedStatuary.py
│   │   ├── DistributedAnimatedStatuaryAI.py
│   │   ├── DistributedBank.py
│   │   ├── DistributedBankAI.py
│   │   ├── DistributedBankMgr.py
│   │   ├── DistributedBankMgrAI.py
│   │   ├── DistributedCannon.py
│   │   ├── DistributedCannonAI.py
│   │   ├── DistributedChangingStatuary.py
│   │   ├── DistributedChangingStatuaryAI.py
│   │   ├── DistributedCloset.py
│   │   ├── DistributedClosetAI.py
│   │   ├── DistributedEstate.py
│   │   ├── DistributedEstateAI.py
│   │   ├── DistributedFireworksCannon.py
│   │   ├── DistributedFireworksCannonAI.py
│   │   ├── DistributedFlower.py
│   │   ├── DistributedFlowerAI.py
│   │   ├── DistributedFurnitureItem.py
│   │   ├── DistributedFurnitureItemAI.py
│   │   ├── DistributedFurnitureManager.py
│   │   ├── DistributedFurnitureManagerAI.py
│   │   ├── DistributedGagTree.py
│   │   ├── DistributedGagTreeAI.py
│   │   ├── DistributedGarden.py
│   │   ├── DistributedGardenAI.py
│   │   ├── DistributedGardenBox.py
│   │   ├── DistributedGardenBoxAI.py
│   │   ├── DistributedGardenPlot.py
│   │   ├── DistributedGardenPlotAI.py
│   │   ├── DistributedHouse.py
│   │   ├── DistributedHouseAI.py
│   │   ├── DistributedHouseDoor.py
│   │   ├── DistributedHouseDoorAI.py
│   │   ├── DistributedHouseInterior.py
│   │   ├── DistributedHouseInteriorAI.py
│   │   ├── DistributedHouseItem.py
│   │   ├── DistributedLawnDecor.py
│   │   ├── DistributedLawnDecorAI.py
│   │   ├── DistributedMailbox.py
│   │   ├── DistributedMailboxAI.py
│   │   ├── DistributedPhone.py
│   │   ├── DistributedPhoneAI.py
│   │   ├── DistributedPlantBase.py
│   │   ├── DistributedPlantBaseAI.py
│   │   ├── DistributedStatuary.py
│   │   ├── DistributedStatuaryAI.py
│   │   ├── DistributedTarget.py
│   │   ├── DistributedTargetAI.py
│   │   ├── DistributedToonStatuary.py
│   │   ├── DistributedToonStatuaryAI.py
│   │   ├── DistributedTrunk.py
│   │   ├── DistributedTrunkAI.py
│   │   ├── Estate.py
│   │   ├── EstateLoader.py
│   │   ├── EstateManager.py
│   │   ├── EstateManagerAI.py
│   │   ├── FireworkItemPanel.py
│   │   ├── FireworksGui.py
│   │   ├── FlowerBase.py
│   │   ├── FlowerBasket.py
│   │   ├── FlowerBrowser.py
│   │   ├── FlowerCollection.py
│   │   ├── FlowerPanel.py
│   │   ├── FlowerPhoto.py
│   │   ├── FlowerPicker.py
│   │   ├── FlowerSellGUI.py
│   │   ├── FlowerSpeciesPanel.py
│   │   ├── GameSprite.py
│   │   ├── GardenDropGame.py
│   │   ├── GardenGlobals.py
│   │   ├── GardenProgressMeter.py
│   │   ├── GardenTutorial.py
│   │   ├── House.py
│   │   ├── HouseGlobals.py
│   │   ├── MailboxGlobals.py
│   │   ├── PhoneGlobals.py
│   │   ├── PlantTreeGUI.py
│   │   ├── PlantingGUI.py
│   │   ├── SpecialsPhoto.py
│   │   ├── ToonStatueSelectionGUI.py
│   │   ├── TrunkGUI.py
│   │   ├── __init__.py
│   │   └── houseDesign.py
│   ├── fishing/
│   │   ├── BingoCardBase.py
│   │   ├── BingoCardCell.py
│   │   ├── BingoCardGui.py
│   │   ├── BingoGlobals.py
│   │   ├── BlockoutBingo.py
│   │   ├── DiagonalBingo.py
│   │   ├── DistributedFishingPond.py
│   │   ├── DistributedFishingPondAI.py
│   │   ├── DistributedFishingTarget.py
│   │   ├── DistributedFishingTargetAI.py
│   │   ├── DistributedPondBingoManager.py
│   │   ├── DistributedPondBingoManagerAI.py
│   │   ├── FishBase.py
│   │   ├── FishBrowser.py
│   │   ├── FishCollection.py
│   │   ├── FishGlobals.py
│   │   ├── FishPanel.py
│   │   ├── FishPhoto.py
│   │   ├── FishPicker.py
│   │   ├── FishSellGUI.py
│   │   ├── FishTank.py
│   │   ├── FishingTargetGlobals.py
│   │   ├── FourCornerBingo.py
│   │   ├── GenusPanel.py
│   │   ├── NormalBingo.py
│   │   ├── ThreewayBingo.py
│   │   └── __init__.py
│   ├── friends/
│   │   ├── FriendHandle.py
│   │   ├── FriendInvitee.py
│   │   ├── FriendInviter.py
│   │   ├── FriendNotifier.py
│   │   ├── FriendsListManager.py
│   │   ├── FriendsListPanel.py
│   │   ├── TTPlayerFriendsManager.py
│   │   ├── TTPlayerFriendsManagerUD.py
│   │   ├── ToontownFriendSecret.py
│   │   └── __init__.py
│   ├── golf/
│   │   ├── BuildGeometry.py
│   │   ├── DistributedGolfCourse.py
│   │   ├── DistributedGolfCourseAI.py
│   │   ├── DistributedGolfHole.py
│   │   ├── DistributedGolfHoleAI.py
│   │   ├── DistributedPhysicsWorld.py
│   │   ├── DistributedPhysicsWorldAI.py
│   │   ├── GolfGlobals.py
│   │   ├── GolfHoleBase.py
│   │   ├── GolfManagerAI.py
│   │   ├── GolfRewardDialog.py
│   │   ├── GolfScoreBoard.py
│   │   ├── PhysicsWorldBase.py
│   │   └── __init__.py
│   ├── hood/
│   │   ├── AnimatedProp.py
│   │   ├── BRHood.py
│   │   ├── BRHoodDataAI.py
│   │   ├── BossbotHQ.py
│   │   ├── BossbotHQDataAI.py
│   │   ├── CSHoodDataAI.py
│   │   ├── CashbotHQ.py
│   │   ├── CashbotHQDataAI.py
│   │   ├── CogHood.py
│   │   ├── DDHood.py
│   │   ├── DDHoodDataAI.py
│   │   ├── DGHood.py
│   │   ├── DGHoodDataAI.py
│   │   ├── DLHood.py
│   │   ├── DLHoodDataAI.py
│   │   ├── EstateHood.py
│   │   ├── FishAnimatedProp.py
│   │   ├── GSHood.py
│   │   ├── GSHoodDataAI.py
│   │   ├── GZHood.py
│   │   ├── GZHoodDataAI.py
│   │   ├── GenericAnimatedBuilding.py
│   │   ├── GenericAnimatedProp.py
│   │   ├── HQPeriscopeAnimatedProp.py
│   │   ├── HQTelescopeAnimatedProp.py
│   │   ├── Hood.py
│   │   ├── HoodDataAI.py
│   │   ├── HoodUtil.py
│   │   ├── HydrantInteractiveProp.py
│   │   ├── HydrantOneAnimatedProp.py
│   │   ├── HydrantTwoAnimatedProp.py
│   │   ├── HydrantZeroAnimatedProp.py
│   │   ├── InteractiveAnimatedProp.py
│   │   ├── LawbotHQ.py
│   │   ├── LawbotHQDataAI.py
│   │   ├── MMHood.py
│   │   ├── MMHoodDataAI.py
│   │   ├── MailboxInteractiveProp.py
│   │   ├── MailboxOneAnimatedProp.py
│   │   ├── MailboxTwoAnimatedProp.py
│   │   ├── MailboxZeroAnimatedProp.py
│   │   ├── OZHood.py
│   │   ├── OZHoodDataAI.py
│   │   ├── PartyHood.py
│   │   ├── PetShopFishAnimatedProp.py
│   │   ├── Place.py
│   │   ├── QuietZoneState.py
│   │   ├── SellbotHQ.py
│   │   ├── SkyUtil.py
│   │   ├── SleepingHydrantAnimatedProp.py
│   │   ├── StreetSign.py
│   │   ├── TTHood.py
│   │   ├── TTHoodDataAI.py
│   │   ├── ToonHood.py
│   │   ├── TrashcanInteractiveProp.py
│   │   ├── TrashcanOneAnimatedProp.py
│   │   ├── TrashcanTwoAnimatedProp.py
│   │   ├── TrashcanZeroAnimatedProp.py
│   │   ├── TrialerForceAcknowledge.py
│   │   ├── TutorialHood.py
│   │   ├── ZeroAnimatedProp.py
│   │   ├── ZoneUtil.py
│   │   └── __init__.py
│   ├── launcher/
│   │   ├── DownloadForceAcknowledge.py
│   │   ├── QuickLauncher.py
│   │   ├── QuickStartLauncher.py
│   │   ├── ToontownDownloadWatcher.py
│   │   ├── ToontownDummyLauncher.py
│   │   ├── ToontownLauncher.py
│   │   └── __init__.py
│   ├── login/
│   │   ├── AvatarChoice.py
│   │   ├── AvatarChooser.py
│   │   ├── DateObject.py
│   │   └── __init__.py
│   ├── makeatoon/
│   │   ├── BodyShop.py
│   │   ├── ClothesGUI.py
│   │   ├── ColorShop.py
│   │   ├── GenderShop.py
│   │   ├── MakeAToon.py
│   │   ├── MakeAToonGlobals.py
│   │   ├── MakeClothesGUI.py
│   │   ├── NameGenerator.py
│   │   ├── NameShop.py
│   │   ├── ShuffleButton.py
│   │   ├── TTPickANamePattern.py
│   │   └── __init__.py
│   ├── minigame/
│   │   ├── ArrowKeys.py
│   │   ├── CannonGameGlobals.py
│   │   ├── CatchGameGlobals.py
│   │   ├── CatchGameToonSD.py
│   │   ├── ClerkPurchase.py
│   │   ├── CogThief.py
│   │   ├── CogThiefGameGlobals.py
│   │   ├── CogThiefGameToonSD.py
│   │   ├── CogThiefWalk.py
│   │   ├── DistributedCannonGame.py
│   │   ├── DistributedCannonGameAI.py
│   │   ├── DistributedCatchGame.py
│   │   ├── DistributedCatchGameAI.py
│   │   ├── DistributedCogThiefGame.py
│   │   ├── DistributedCogThiefGameAI.py
│   │   ├── DistributedDivingGame.py
│   │   ├── DistributedDivingGameAI.py
│   │   ├── DistributedIceGame.py
│   │   ├── DistributedIceGameAI.py
│   │   ├── DistributedIceWorld.py
│   │   ├── DistributedMazeGame.py
│   │   ├── DistributedMazeGameAI.py
│   │   ├── DistributedMinigame.py
│   │   ├── DistributedMinigameAI.py
│   │   ├── DistributedMinigamePhysicsWorld.py
│   │   ├── DistributedMinigameTemplate.py
│   │   ├── DistributedMinigameTemplateAI.py
│   │   ├── DistributedPairingGame.py
│   │   ├── DistributedPairingGameAI.py
│   │   ├── DistributedPatternGame.py
│   │   ├── DistributedPatternGameAI.py
│   │   ├── DistributedPhotoGame.py
│   │   ├── DistributedPhotoGameAI.py
│   │   ├── DistributedRaceGame.py
│   │   ├── DistributedRaceGameAI.py
│   │   ├── DistributedRingGame.py
│   │   ├── DistributedRingGameAI.py
│   │   ├── DistributedTagGame.py
│   │   ├── DistributedTagGameAI.py
│   │   ├── DistributedTagTreasure.py
│   │   ├── DistributedTagTreasureAI.py
│   │   ├── DistributedTargetGame.py
│   │   ├── DistributedTargetGameAI.py
│   │   ├── DistributedTravelGame.py
│   │   ├── DistributedTravelGameAI.py
│   │   ├── DistributedTugOfWarGame.py
│   │   ├── DistributedTugOfWarGameAI.py
│   │   ├── DistributedTwoDGame.py
│   │   ├── DistributedTwoDGameAI.py
│   │   ├── DistributedVineGame.py
│   │   ├── DistributedVineGameAI.py
│   │   ├── DivingFishSpawn.py
│   │   ├── DivingGameGlobals.py
│   │   ├── DivingGameToonSD.py
│   │   ├── DivingTreasure.py
│   │   ├── DropPlacer.py
│   │   ├── DropScheduler.py
│   │   ├── FogOverlay.py
│   │   ├── IceGameGlobals.py
│   │   ├── IceTreasure.py
│   │   ├── Maze.py
│   │   ├── MazeBase.py
│   │   ├── MazeData.py
│   │   ├── MazeGameGlobals.py
│   │   ├── MazeMapGui.py
│   │   ├── MazeSuit.py
│   │   ├── MazeTreasure.py
│   │   ├── MinigameAvatarScorePanel.py
│   │   ├── MinigameCreatorAI.py
│   │   ├── MinigameGlobals.py
│   │   ├── MinigamePhysicsWorldBase.py
│   │   ├── MinigamePowerMeter.py
│   │   ├── MinigameRulesPanel.py
│   │   ├── OrthoDrive.py
│   │   ├── OrthoWalk.py
│   │   ├── PairingGameCard.py
│   │   ├── PairingGameGlobals.py
│   │   ├── PatternGameGlobals.py
│   │   ├── PhotoGameBase.py
│   │   ├── PhotoGameGlobals.py
│   │   ├── PlayingCard.py
│   │   ├── PlayingCardDeck.py
│   │   ├── PlayingCardGlobals.py
│   │   ├── Purchase.py
│   │   ├── PurchaseBase.py
│   │   ├── RaceGameGlobals.py
│   │   ├── Ring.py
│   │   ├── RingAction.py
│   │   ├── RingGameGlobals.py
│   │   ├── RingGroup.py
│   │   ├── RingTrack.py
│   │   ├── RingTrackGroup.py
│   │   ├── RingTrackGroups.py
│   │   ├── RingTracks.py
│   │   ├── RubberBand.py
│   │   ├── SwingVine.py
│   │   ├── TagGameGlobals.py
│   │   ├── TagTreasurePlannerAI.py
│   │   ├── TargetGameGlobals.py
│   │   ├── TempMinigameAI.py
│   │   ├── ToonBlitzAssetMgr.py
│   │   ├── ToonBlitzGlobals.py
│   │   ├── Trajectory.py
│   │   ├── TravelGameGlobals.py
│   │   ├── TreasureScorePanel.py
│   │   ├── TrolleyHolidayMgrAI.py
│   │   ├── TrolleyWeekendMgrAI.py
│   │   ├── TugOfWarGameGlobals.py
│   │   ├── TwoDBattleMgr.py
│   │   ├── TwoDBlock.py
│   │   ├── TwoDCamera.py
│   │   ├── TwoDDrive.py
│   │   ├── TwoDEnemy.py
│   │   ├── TwoDEnemyMgr.py
│   │   ├── TwoDGameToonSD.py
│   │   ├── TwoDSection.py
│   │   ├── TwoDSectionMgr.py
│   │   ├── TwoDSpawnPointMgr.py
│   │   ├── TwoDStomper.py
│   │   ├── TwoDStomperMgr.py
│   │   ├── TwoDTreasure.py
│   │   ├── TwoDTreasureMgr.py
│   │   ├── TwoDWalk.py
│   │   ├── VineBat.py
│   │   ├── VineGameGlobals.py
│   │   ├── VineHeadFrame.py
│   │   ├── VineSpider.py
│   │   ├── VineTreasure.py
│   │   ├── VoteResultsPanel.py
│   │   ├── VoteResultsTrolleyPanel.py
│   │   └── __init__.py
│   ├── parties/
│   │   ├── ActivityBase.py
│   │   ├── BaseActivityFSM.py
│   │   ├── CalendarGuiDay.py
│   │   ├── CalendarGuiMonth.py
│   │   ├── Cannon.py
│   │   ├── CannonGui.py
│   │   ├── DecorBase.py
│   │   ├── Decoration.py
│   │   ├── DistributedParty.py
│   │   ├── DistributedPartyAI.py
│   │   ├── DistributedPartyActivity.py
│   │   ├── DistributedPartyActivityAI.py
│   │   ├── DistributedPartyCannon.py
│   │   ├── DistributedPartyCannonAI.py
│   │   ├── DistributedPartyCannonActivity.py
│   │   ├── DistributedPartyCannonActivityAI.py
│   │   ├── DistributedPartyCatchActivity.py
│   │   ├── DistributedPartyCatchActivityAI.py
│   │   ├── DistributedPartyCatchActivityBase.py
│   │   ├── DistributedPartyCogActivity.py
│   │   ├── DistributedPartyCogActivityAI.py
│   │   ├── DistributedPartyDance20Activity.py
│   │   ├── DistributedPartyDance20ActivityAI.py
│   │   ├── DistributedPartyDanceActivity.py
│   │   ├── DistributedPartyDanceActivityAI.py
│   │   ├── DistributedPartyDanceActivityBase.py
│   │   ├── DistributedPartyDanceActivityBaseAI.py
│   │   ├── DistributedPartyFireworksActivity.py
│   │   ├── DistributedPartyFireworksActivityAI.py
│   │   ├── DistributedPartyJukebox40Activity.py
│   │   ├── DistributedPartyJukebox40ActivityAI.py
│   │   ├── DistributedPartyJukeboxActivity.py
│   │   ├── DistributedPartyJukeboxActivityAI.py
│   │   ├── DistributedPartyJukeboxActivityBase.py
│   │   ├── DistributedPartyJukeboxActivityBaseAI.py
│   │   ├── DistributedPartyTeamActivity.py
│   │   ├── DistributedPartyTeamActivityAI.py
│   │   ├── DistributedPartyTrampolineActivity.py
│   │   ├── DistributedPartyTrampolineActivityAI.py
│   │   ├── DistributedPartyTugOfWarActivity.py
│   │   ├── DistributedPartyTugOfWarActivityAI.py
│   │   ├── DistributedPartyValentineDance20Activity.py
│   │   ├── DistributedPartyValentineDance20ActivityAI.py
│   │   ├── DistributedPartyValentineDanceActivity.py
│   │   ├── DistributedPartyValentineDanceActivityAI.py
│   │   ├── DistributedPartyValentineJukebox40Activity.py
│   │   ├── DistributedPartyValentineJukebox40ActivityAI.py
│   │   ├── DistributedPartyValentineJukeboxActivity.py
│   │   ├── DistributedPartyValentineJukeboxActivityAI.py
│   │   ├── DistributedPartyValentineTrampolineActivity.py
│   │   ├── DistributedPartyValentineTrampolineActivityAI.py
│   │   ├── DistributedPartyVictoryTrampolineActivity.py
│   │   ├── DistributedPartyVictoryTrampolineActivityAI.py
│   │   ├── DistributedPartyWinterCatchActivity.py
│   │   ├── DistributedPartyWinterCatchActivityAI.py
│   │   ├── DistributedPartyWinterCogActivity.py
│   │   ├── DistributedPartyWinterCogActivityAI.py
│   │   ├── DistributedPartyWinterTrampolineActivity.py
│   │   ├── DistributedPartyWinterTrampolineActivityAI.py
│   │   ├── InviteInfo.py
│   │   ├── InviteVisual.py
│   │   ├── JellybeanRewardGui.py
│   │   ├── JukeboxGui.py
│   │   ├── KeyCodes.py
│   │   ├── KeyCodesGui.py
│   │   ├── Party.py
│   │   ├── PartyCatchActivityToonSD.py
│   │   ├── PartyCog.py
│   │   ├── PartyCogActivity.py
│   │   ├── PartyCogActivityGui.py
│   │   ├── PartyCogActivityInput.py
│   │   ├── PartyCogActivityPlayer.py
│   │   ├── PartyCogUtils.py
│   │   ├── PartyDanceActivityToonFSM.py
│   │   ├── PartyEditor.py
│   │   ├── PartyEditorGrid.py
│   │   ├── PartyEditorGridElement.py
│   │   ├── PartyEditorGridSquare.py
│   │   ├── PartyEditorListElement.py
│   │   ├── PartyGlobals.py
│   │   ├── PartyInfo.py
│   │   ├── PartyLoader.py
│   │   ├── PartyPlanner.py
│   │   ├── PartyReplyInfo.py
│   │   ├── PartyUtils.py
│   │   ├── PublicPartyGui.py
│   │   ├── ScrolledFriendList.py
│   │   ├── ServerTimeGui.py
│   │   ├── SimpleMailBase.py
│   │   ├── StretchingArrow.py
│   │   ├── TeamActivityGui.py
│   │   ├── ToontownTimeManager.py
│   │   ├── WinterPartyCatchActivityToonSD.py
│   │   ├── __init__.py
│   │   ├── activityFSMMixins.py
│   │   └── activityFSMs.py
│   ├── pets/
│   │   ├── DistributedPet.py
│   │   ├── DistributedPetAI.py
│   │   ├── DistributedPetProxy.py
│   │   ├── DistributedPetProxyAI.py
│   │   ├── Pet.py
│   │   ├── PetActionFSM.py
│   │   ├── PetAvatarPanel.py
│   │   ├── PetBase.py
│   │   ├── PetBrain.py
│   │   ├── PetChase.py
│   │   ├── PetCollider.py
│   │   ├── PetConstants.py
│   │   ├── PetDCImports.py
│   │   ├── PetDCImportsAI.py
│   │   ├── PetDNA.py
│   │   ├── PetDetail.py
│   │   ├── PetDetailPanel.py
│   │   ├── PetFlee.py
│   │   ├── PetGoal.py
│   │   ├── PetGoalMgr.py
│   │   ├── PetHandle.py
│   │   ├── PetLeash.py
│   │   ├── PetLookerAI.py
│   │   ├── PetManager.py
│   │   ├── PetManagerAI.py
│   │   ├── PetMood.py
│   │   ├── PetNameGenerator.py
│   │   ├── PetObserve.py
│   │   ├── PetSphere.py
│   │   ├── PetTraits.py
│   │   ├── PetTricks.py
│   │   ├── PetTutorial.py
│   │   ├── PetUtil.py
│   │   ├── PetWander.py
│   │   ├── PetshopGUI.py
│   │   └── __init__.py
│   ├── quest/
│   │   ├── BlinkingArrows.py
│   │   ├── QuestBookPoster.py
│   │   ├── QuestChoiceGui.py
│   │   ├── QuestManagerAI.py
│   │   ├── QuestMap.py
│   │   ├── QuestMapGlobals.py
│   │   ├── QuestParser.py
│   │   ├── QuestPoster.py
│   │   ├── QuestRewardCounter.py
│   │   ├── Quests.py
│   │   ├── TrackChoiceGui.py
│   │   └── __init__.py
│   ├── racing/
│   │   ├── DistributedGag.py
│   │   ├── DistributedGagAI.py
│   │   ├── DistributedKartPad.py
│   │   ├── DistributedKartPadAI.py
│   │   ├── DistributedLeaderBoard.py
│   │   ├── DistributedLeaderBoardAI.py
│   │   ├── DistributedProjectile.py
│   │   ├── DistributedProjectileAI.py
│   │   ├── DistributedRace.py
│   │   ├── DistributedRaceAI.py
│   │   ├── DistributedRacePad.py
│   │   ├── DistributedRacePadAI.py
│   │   ├── DistributedStartingBlock.py
│   │   ├── DistributedStartingBlockAI.py
│   │   ├── DistributedVehicle.py
│   │   ├── DistributedVehicleAI.py
│   │   ├── DistributedViewPad.py
│   │   ├── DistributedViewPadAI.py
│   │   ├── DroppedGag.py
│   │   ├── EffectManager.py
│   │   ├── FlyingGag.py
│   │   ├── Kart.py
│   │   ├── KartDNA.py
│   │   ├── KartShopGlobals.py
│   │   ├── KartShopGui.py
│   │   ├── Piejectile.py
│   │   ├── PiejectileManager.py
│   │   ├── RaceEndPanels.py
│   │   ├── RaceGUI.py
│   │   ├── RaceGag.py
│   │   ├── RaceGlobals.py
│   │   ├── RaceHeadFrame.py
│   │   ├── RaceManagerAI.py
│   │   ├── Racer.py
│   │   └── __init__.py
│   ├── rpc/
│   │   ├── AwardManager.py
│   │   ├── AwardManagerConsts.py
│   │   ├── AwardManagerUD.py
│   │   ├── RATManager.py
│   │   ├── RATManagerUD.py
│   │   └── __init__.py
│   ├── safezone/
│   │   ├── BRPlayground.py
│   │   ├── BRSafeZoneLoader.py
│   │   ├── BRTreasurePlannerAI.py
│   │   ├── ButterflyGlobals.py
│   │   ├── CheckersBoard.py
│   │   ├── ChineseCheckersBoard.py
│   │   ├── DDPlayground.py
│   │   ├── DDSafeZoneLoader.py
│   │   ├── DDTreasurePlannerAI.py
│   │   ├── DGPlayground.py
│   │   ├── DGSafeZoneLoader.py
│   │   ├── DGTreasurePlannerAI.py
│   │   ├── DLPlayground.py
│   │   ├── DLSafeZoneLoader.py
│   │   ├── DLTreasurePlannerAI.py
│   │   ├── DistributedBRTreasure.py
│   │   ├── DistributedBRTreasureAI.py
│   │   ├── DistributedBoat.py
│   │   ├── DistributedBoatAI.py
│   │   ├── DistributedButterfly.py
│   │   ├── DistributedButterflyAI.py
│   │   ├── DistributedCheckers.py
│   │   ├── DistributedCheckersAI.py
│   │   ├── DistributedChineseCheckers.py
│   │   ├── DistributedChineseCheckersAI.py
│   │   ├── DistributedDDTreasure.py
│   │   ├── DistributedDDTreasureAI.py
│   │   ├── DistributedDGFlower.py
│   │   ├── DistributedDGFlowerAI.py
│   │   ├── DistributedDGTreasure.py
│   │   ├── DistributedDGTreasureAI.py
│   │   ├── DistributedDLTreasure.py
│   │   ├── DistributedDLTreasureAI.py
│   │   ├── DistributedEFlyingTreasure.py
│   │   ├── DistributedEFlyingTreasureAI.py
│   │   ├── DistributedETreasure.py
│   │   ├── DistributedETreasureAI.py
│   │   ├── DistributedFindFour.py
│   │   ├── DistributedFindFourAI.py
│   │   ├── DistributedFishingSpot.py
│   │   ├── DistributedFishingSpotAI.py
│   │   ├── DistributedGolfKart.py
│   │   ├── DistributedGolfKartAI.py
│   │   ├── DistributedMMPiano.py
│   │   ├── DistributedMMPianoAI.py
│   │   ├── DistributedMMTreasure.py
│   │   ├── DistributedMMTreasureAI.py
│   │   ├── DistributedOZTreasure.py
│   │   ├── DistributedOZTreasureAI.py
│   │   ├── DistributedPartyGate.py
│   │   ├── DistributedPartyGateAI.py
│   │   ├── DistributedPicnicBasket.py
│   │   ├── DistributedPicnicBasketAI.py
│   │   ├── DistributedPicnicTable.py
│   │   ├── DistributedPicnicTableAI.py
│   │   ├── DistributedSZTreasure.py
│   │   ├── DistributedSZTreasureAI.py
│   │   ├── DistributedTTTreasure.py
│   │   ├── DistributedTTTreasureAI.py
│   │   ├── DistributedTreasure.py
│   │   ├── DistributedTreasureAI.py
│   │   ├── DistributedTrolley.py
│   │   ├── DistributedTrolleyAI.py
│   │   ├── GSPlayground.py
│   │   ├── GSSafeZoneLoader.py
│   │   ├── GZPlayground.py
│   │   ├── GZSafeZoneLoader.py
│   │   ├── GameMenu.py
│   │   ├── GameTutorials.py
│   │   ├── GolfKart.py
│   │   ├── MMPlayground.py
│   │   ├── MMSafeZoneLoader.py
│   │   ├── MMTreasurePlannerAI.py
│   │   ├── OZPlayground.py
│   │   ├── OZSafeZoneLoader.py
│   │   ├── OZTreasurePlannerAI.py
│   │   ├── PicnicBasket.py
│   │   ├── Playground.py
│   │   ├── PublicWalk.py
│   │   ├── RegenTreasurePlannerAI.py
│   │   ├── SafeZoneLoader.py
│   │   ├── SafeZoneManager.py
│   │   ├── SafeZoneManagerAI.py
│   │   ├── TTPlayground.py
│   │   ├── TTSafeZoneLoader.py
│   │   ├── TTTreasurePlannerAI.py
│   │   ├── Train.py
│   │   ├── TreasurePlannerAI.py
│   │   ├── TrolleyConstants.py
│   │   ├── Walk.py
│   │   └── __init__.py
│   ├── shtiker/
│   │   ├── CogPageGlobals.py
│   │   ├── CogPageManagerAI.py
│   │   ├── DeleteManager.py
│   │   ├── DeleteManagerAI.py
│   │   ├── DirectNewsFrame.py
│   │   ├── DisguisePage.py
│   │   ├── DisplaySettingsDialog.py
│   │   ├── EventsPage.py
│   │   ├── FishPage.py
│   │   ├── GardenPage.py
│   │   ├── GolfPage.py
│   │   ├── HtmlView.py
│   │   ├── InGameNewsFrame.py
│   │   ├── InventoryPage.py
│   │   ├── IssueFrame.py
│   │   ├── IssueFrameV2.py
│   │   ├── KartPage.py
│   │   ├── MapPage.py
│   │   ├── NPCFriendPage.py
│   │   ├── NewbiePurchaseManager.py
│   │   ├── NewbiePurchaseManagerAI.py
│   │   ├── NewsPage.py
│   │   ├── OptionsPage.py
│   │   ├── PhotoAlbumPage.py
│   │   ├── PurchaseManager.py
│   │   ├── PurchaseManagerAI.py
│   │   ├── PurchaseManagerConstants.py
│   │   ├── QuestPage.py
│   │   ├── ShardPage.py
│   │   ├── ShtikerBook.py
│   │   ├── ShtikerPage.py
│   │   ├── SuitPage.py
│   │   ├── SummonCogDialog.py
│   │   ├── TIPPage.py
│   │   ├── TrackPage.py
│   │   └── __init__.py
│   ├── speedchat/
│   │   ├── TTSCAprilToonsMenu.py
│   │   ├── TTSCBoardingMenu.py
│   │   ├── TTSCCogMenu.py
│   │   ├── TTSCDecoders.py
│   │   ├── TTSCFactoryMenu.py
│   │   ├── TTSCGolfMenu.py
│   │   ├── TTSCHalloweenMenu.py
│   │   ├── TTSCIdesOfMarchMenu.py
│   │   ├── TTSCIndexedTerminal.py
│   │   ├── TTSCJellybeanJamMenu.py
│   │   ├── TTSCKartRacingMenu.py
│   │   ├── TTSCPetTrickMenu.py
│   │   ├── TTSCPromotionalMenu.py
│   │   ├── TTSCResistanceMenu.py
│   │   ├── TTSCResistanceTerminal.py
│   │   ├── TTSCSellbotFieldOfficeMenu.py
│   │   ├── TTSCSellbotInvasionMenu.py
│   │   ├── TTSCSellbotNerfMenu.py
│   │   ├── TTSCSillyPhaseFiveMenu.py
│   │   ├── TTSCSillyPhaseFourMenu.py
│   │   ├── TTSCSillyPhaseOneMenu.py
│   │   ├── TTSCSillyPhaseThreeMenu.py
│   │   ├── TTSCSillyPhaseTwoMenu.py
│   │   ├── TTSCSingingMenu.py
│   │   ├── TTSCSingingTerminal.py
│   │   ├── TTSCToontaskMenu.py
│   │   ├── TTSCToontaskTerminal.py
│   │   ├── TTSCVictoryPartiesMenu.py
│   │   ├── TTSCWinterMenu.py
│   │   ├── TTSpeedChatGlobals.py
│   │   ├── TTSpeedChatTypes.py
│   │   └── __init__.py
│   ├── spellbook/
│   │   ├── MagicWordConfig.py
│   │   ├── MagicWordIndex.py
│   │   ├── ToontownMagicWordManager.py
│   │   ├── ToontownMagicWordManagerAI.py
│   │   └── __init__.py
│   ├── suit/
│   │   ├── BossCog.py
│   │   ├── DistributedBossCog.py
│   │   ├── DistributedBossCogAI.py
│   │   ├── DistributedBossbotBoss.py
│   │   ├── DistributedBossbotBossAI.py
│   │   ├── DistributedCashbotBoss.py
│   │   ├── DistributedCashbotBossAI.py
│   │   ├── DistributedCashbotBossGoon.py
│   │   ├── DistributedCashbotBossGoonAI.py
│   │   ├── DistributedFactorySuit.py
│   │   ├── DistributedFactorySuitAI.py
│   │   ├── DistributedGoon.py
│   │   ├── DistributedGoonAI.py
│   │   ├── DistributedGridGoon.py
│   │   ├── DistributedGridGoonAI.py
│   │   ├── DistributedLawbotBoss.py
│   │   ├── DistributedLawbotBossAI.py
│   │   ├── DistributedLawbotBossSuit.py
│   │   ├── DistributedLawbotBossSuitAI.py
│   │   ├── DistributedMintSuit.py
│   │   ├── DistributedMintSuitAI.py
│   │   ├── DistributedSellbotBoss.py
│   │   ├── DistributedSellbotBossAI.py
│   │   ├── DistributedStageSuit.py
│   │   ├── DistributedStageSuitAI.py
│   │   ├── DistributedSuit.py
│   │   ├── DistributedSuitAI.py
│   │   ├── DistributedSuitBase.py
│   │   ├── DistributedSuitBaseAI.py
│   │   ├── DistributedSuitPlanner.py
│   │   ├── DistributedSuitPlannerAI.py
│   │   ├── DistributedTutorialSuit.py
│   │   ├── DistributedTutorialSuitAI.py
│   │   ├── Goon.py
│   │   ├── GoonDeath.py
│   │   ├── GoonGlobals.py
│   │   ├── GoonPathData.py
│   │   ├── RoguesGallery.py
│   │   ├── SellbotBossGlobals.py
│   │   ├── Suit.py
│   │   ├── SuitAvatarPanel.py
│   │   ├── SuitBase.py
│   │   ├── SuitDNA.py
│   │   ├── SuitDialog.py
│   │   ├── SuitInvasionManagerAI.py
│   │   ├── SuitPlannerBase.py
│   │   ├── SuitTimings.py
│   │   └── __init__.py
│   ├── toon/
│   │   ├── AccessoryGlobals.py
│   │   ├── AvatarPanelBase.py
│   │   ├── BoardingGroupInviterPanels.py
│   │   ├── DeathForceAcknowledge.py
│   │   ├── DistributedNPCBlocker.py
│   │   ├── DistributedNPCBlockerAI.py
│   │   ├── DistributedNPCClerk.py
│   │   ├── DistributedNPCClerkAI.py
│   │   ├── DistributedNPCFisherman.py
│   │   ├── DistributedNPCFishermanAI.py
│   │   ├── DistributedNPCFlippyInToonHall.py
│   │   ├── DistributedNPCFlippyInToonHallAI.py
│   │   ├── DistributedNPCKartClerk.py
│   │   ├── DistributedNPCKartClerkAI.py
│   │   ├── DistributedNPCPartyPerson.py
│   │   ├── DistributedNPCPartyPersonAI.py
│   │   ├── DistributedNPCPetclerk.py
│   │   ├── DistributedNPCPetclerkAI.py
│   │   ├── DistributedNPCScientist.py
│   │   ├── DistributedNPCScientistAI.py
│   │   ├── DistributedNPCSpecialQuestGiver.py
│   │   ├── DistributedNPCSpecialQuestGiverAI.py
│   │   ├── DistributedNPCTailor.py
│   │   ├── DistributedNPCTailorAI.py
│   │   ├── DistributedNPCToon.py
│   │   ├── DistributedNPCToonAI.py
│   │   ├── DistributedNPCToonBase.py
│   │   ├── DistributedNPCToonBaseAI.py
│   │   ├── DistributedToon.py
│   │   ├── DistributedToonAI.py
│   │   ├── DistributedToonUD.py
│   │   ├── ElevatorNotifier.py
│   │   ├── Experience.py
│   │   ├── GroupInvitee.py
│   │   ├── GroupPanel.py
│   │   ├── HealthForceAcknowledge.py
│   │   ├── InventoryBase.py
│   │   ├── InventoryNew.py
│   │   ├── LaffMeter.py
│   │   ├── LocalToon.py
│   │   ├── Motion.py
│   │   ├── NPCForceAcknowledge.py
│   │   ├── NPCFriendPanel.py
│   │   ├── NPCToons.py
│   │   ├── PlayerDetailPanel.py
│   │   ├── PlayerInfoPanel.py
│   │   ├── TTEmote.py
│   │   ├── TailorClothesGUI.py
│   │   ├── Toon.py
│   │   ├── ToonAvatarDetailPanel.py
│   │   ├── ToonAvatarPanel.py
│   │   ├── ToonDNA.py
│   │   ├── ToonDetail.py
│   │   ├── ToonHead.py
│   │   ├── ToonHeadFrame.py
│   │   ├── ToonTeleportPanel.py
│   │   └── __init__.py
│   ├── toonbase/
│   │   ├── DisplayOptions.py
│   │   ├── TTLocalizer.py
│   │   ├── TTLocalizerEnglish.py
│   │   ├── TTLocalizerEnglishProperty.py
│   │   ├── ToonBase.py
│   │   ├── ToonBaseGlobal.py
│   │   ├── ToontownAccess.py
│   │   ├── ToontownAccessAI.py
│   │   ├── ToontownBattleGlobals.py
│   │   ├── ToontownGlobals.py
│   │   ├── ToontownIntervals.py
│   │   ├── ToontownLoader.py
│   │   ├── ToontownStart.py
│   │   ├── ToontownTimer.py
│   │   └── __init__.py
│   ├── toontowngui/
│   │   ├── NewsPageButtonManager.py
│   │   ├── TTDialog.py
│   │   ├── TeaserPanel.py
│   │   ├── ToonHeadDialog.py
│   │   ├── ToontownLoadingBlocker.py
│   │   ├── ToontownLoadingScreen.py
│   │   └── __init__.py
│   ├── town/
│   │   ├── BRStreet.py
│   │   ├── BRTownLoader.py
│   │   ├── DDStreet.py
│   │   ├── DDTownLoader.py
│   │   ├── DGStreet.py
│   │   ├── DGTownLoader.py
│   │   ├── DLStreet.py
│   │   ├── DLTownLoader.py
│   │   ├── MMStreet.py
│   │   ├── MMTownLoader.py
│   │   ├── Street.py
│   │   ├── TTStreet.py
│   │   ├── TTTownLoader.py
│   │   ├── TownBattle.py
│   │   ├── TownBattleAttackPanel.py
│   │   ├── TownBattleChooseAvatarPanel.py
│   │   ├── TownBattleSOSPanel.py
│   │   ├── TownBattleSOSPetInfoPanel.py
│   │   ├── TownBattleSOSPetSearchPanel.py
│   │   ├── TownBattleToonPanel.py
│   │   ├── TownBattleWaitPanel.py
│   │   ├── TownLoader.py
│   │   ├── TutorialStreet.py
│   │   ├── TutorialTownLoader.py
│   │   └── __init__.py
│   ├── trolley/
│   │   ├── Trolley.py
│   │   └── __init__.py
│   ├── tutorial/
│   │   ├── DistributedBattleTutorial.py
│   │   ├── DistributedBattleTutorialAI.py
│   │   ├── SuitPlannerTutorialAI.py
│   │   ├── TutorialBattleManagerAI.py
│   │   ├── TutorialForceAcknowledge.py
│   │   ├── TutorialManager.py
│   │   ├── TutorialManagerAI.py
│   │   └── __init__.py
│   └── uberdog/
│       ├── DataStore.py
│       ├── DataStoreGlobals.py
│       ├── DistributedCpuInfoMgr.py
│       ├── DistributedCpuInfoMgrAI.py
│       ├── DistributedCpuInfoMgrUD.py
│       ├── DistributedDataStoreManager.py
│       ├── DistributedDataStoreManagerAI.py
│       ├── DistributedDataStoreManagerUD.py
│       ├── DistributedDeliveryManager.py
│       ├── DistributedDeliveryManagerAI.py
│       ├── DistributedDeliveryManagerUD.py
│       ├── DistributedInGameNewsMgr.py
│       ├── DistributedInGameNewsMgrAI.py
│       ├── DistributedInGameNewsMgrUD.py
│       ├── DistributedMailManager.py
│       ├── DistributedMailManagerAI.py
│       ├── DistributedMailManagerUD.py
│       ├── DistributedPartyManager.py
│       ├── DistributedPartyManagerAI.py
│       ├── DistributedPartyManagerUD.py
│       ├── DistributedSecurityMgr.py
│       ├── DistributedSecurityMgrAI.py
│       ├── DistributedSecurityMgrUD.py
│       ├── DistributedWhitelistMgr.py
│       ├── DistributedWhitelistMgrAI.py
│       ├── DistributedWhitelistMgrUD.py
│       ├── InGameNewsResponses.py
│       ├── ScavengerHuntDataStore.py
│       ├── TTSpeedchatRelay.py
│       ├── TTSpeedchatRelayUD.py
│       ├── ToontownUDRepository.py
│       ├── UDStart.py
│       └── __init__.py
├── vscode.code-workspace
└── win32/
    ├── .vscode/
    │   └── tasks.json
    ├── start_ai_server.bat
    ├── start_astron_server.bat
    ├── start_game.bat
    └── start_uberdog_server.bat

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
*.pyc
*.pyo
*.pyd
*.log
resources/
news/
sign/
whitelist/
*.so
*.DS_Store
*.jpg
.idea
venv/
*.json
!win32/.vscode/tasks.json
!linux/.vscode/tasks.json
!darwin/.vscode/tasks.json
*.buildings
*.trackRecords
PPYTHON_PATH
local/
errorCode


================================================
FILE: LICENSE
================================================
BSD 3-Clause License

Copyright (c) 2019, Open Toontown
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its
   contributors may be used to endorse or promote products derived from
   this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


================================================
FILE: README.md
================================================
# Open Toontown
This repository contains the code for Open Toontown, based on the latest version of Disney's Toontown Online (sv1.0.47.38).

# Setup
After cloning the repository, you will need to clone the [resources](https://github.com/open-toontown/resources) repository inside the directory where you cloned the source repo.

Secondly, you would have to install and use a specific version of Panda3D, which includes `libotp` and `libtoontown`.  You can use the prebuilt installers for your operating system here:

## Windows

You can install Panda3D SDK through the 32-bit (x86) or 64-bit (x86_64) installers here:

[Panda3D SDK for Windows (Python 3.9, x86, Last Updated: January 11, 2023)](https://mega.nz/file/6UsARa7R#pg5KgxW0NgkHEl_k0fK6NbBK8LfdEcDGZ6NsVeWwDKM)

[Panda3D SDK for Windows (Python 3.9, x86_64, Last Updated: January 11, 2023)](https://mega.nz/file/uAMxEKqL#yQfS9UPpYHzKYDR5vq-LF5gxxLa6HUmxLUp65uzneVo)

If you install Panda3D outside the default directory (or use the x86 installer), you may have to change the `PPYTHON_PATH` file located in the root directory and change it to your install directory.

## macOS 10.9+
[Panda3D Wheel for macOS 10.9+ (Python3.9, x86_64)](https://drive.google.com/file/d/1_6WJxrkNfwisK5pe5ubJJy1psEp0IIft/view?usp=sharing)

Installing the provided Panda3D wheel requires Python 3.9, which is not installed on your system by default whatsoever.  We recommend installing Python 3.9 through [Homebrew](https://brew.sh/) (Make sure that the xcode command line tools are installed first `xcode-select --install`): 
```shell
$ brew install python@3.9
```
(This will symlink Python 3.9 to `python3.9` and pip to `pip3`).

After installing Python 3.9.  You can then install the wheel by using pip:
```shell
$ pip install panda3d-1.11.0-cp39-cp39-macosx_10_9_x86_64.whl
```
## Linux (Building your own)
If you use Linux, or are interested in building Panda3D yourself, head on over to [our Panda3D fork](https://github.com/open-toontown/panda3d) and read the "Building Panda3D" section on the README file there.

# Starting the Server and Game
To start the server and run the game locally, go to your platform directory (`win32` for Windows, `darwin` for Mac and `linux` for Linux), and make sure you start the following scripts in order:

`Astron Server -> UberDOG (UD) Server -> AI (District) Server -> Game Client`

Be sure to wait till the servers have finished booting before starting the next.  If done correctly, you should be able to make your toon and play the game!  There is no support for Magic Words (commands) yet, [but it is currently in the works!](https://github.com/open-toontown/open-toontown/projects/1)

# Contributing
Submitting issues and Pull Requests are encouraged and welcome.

How you commit changes is your choice, but please include what you did and a basic description so that we know exactly what was modified. Here are some examples:

* `minigames: Fix crash when entering the trolley`
* `racing: Fix possible race condition when two racers tied`
* `golf: Refix wonky physics once and for all (hopefully)`


================================================
FILE: astron/config/astrond.yml
================================================
daemon:
    name: Open Toontown Astron Cluster

general:
    eventlogger: 127.0.0.1:7197
    dc_files:
        - ../../etc/otp.dc
        - ../../etc/toon.dc

messagedirector:
    bind: 127.0.0.1:7199

uberdogs:
    - class: CentralLogger
      id: 4688
      anonymous: false

    - class: AvatarFriendsManager
      id: 4686
      anonymous: false

    - class: TTPlayerFriendsManager
      id: 4687
      anonymous: false

    - class: TTSpeedchatRelay
      id: 4712
      anonymous: false

    - class: DistributedDeliveryManager
      id: 4683
      anonymous: false

    - class: TTCodeRedemptionMgr
      id: 4695
      anonymous: false

    - class: AstronLoginManager
      id: 4670
      anonymous: true

roles:
    - type: clientagent
      bind: 0.0.0.0:7198
      version: "sv1.0.47.38"
      client:
          relocate: true
          add_interest: enabled
          heartbeat_timeout: 60000
      channels:
          min: 1000000000
          max: 1009999999

    - type: stateserver
      control: 4002

    - type: database
      control: 4003
      generate:
          min: 100000000
          max: 399999999
      backend:
          type: yaml
          directory: ../databases/astrondb

    - type: dbss
      database: 4003
      ranges:
          - min: 100000000
            max: 399999999

    - type: eventlogger
      bind: 127.0.0.1:7197
      output: ../logs/events-%y%m%d_%H%M%S.log


================================================
FILE: astron/databases/.gitignore
================================================
*.db
*.bak
*.dat
*.dir


================================================
FILE: astron/databases/astrondb/.gitignore
================================================
*.yaml


================================================
FILE: astron/logs/.gitignore
================================================
*.log


================================================
FILE: darwin/.vscode/tasks.json
================================================
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Darwin - Start Game",
            "type": "shell",
            "command": "./start-game.sh",
            "group": "test",
            "presentation": {
                "reveal": "always",
                "panel": "new"
            }
        },
        {
            "label": "Darwin - Start AI Server",
            "type": "shell",
            "command": "./start-ai-server.sh",
            "group": "test",
            "presentation": {
                "reveal": "always",
                "panel": "new"
            }
        },
        {
            "label": "Darwin - Start Astron Server",
            "type": "shell",
            "command": "./start-astron-server.sh",
            "group": "test",
            "presentation": {
                "reveal": "always",
                "panel": "new"
            }
        },
        {
            "label": "Darwin - Start UberDOG Server",
            "type": "shell",
            "command": "./start-uberdog-server.sh",
            "group": "test",
            "presentation": {
                "reveal": "always",
                "panel": "new"
            }
        },
    ]
}


================================================
FILE: darwin/start-ai-server.sh
================================================
#!/bin/sh
cd ..

BASE_CHANNEL=401000000
MAX_CHANNELS=999999
STATE_SERVER=4002
MESSAGE_DIRECTOR_IP="127.0.0.1:7199"
EVENT_LOGGER_IP="127.0.0.1:7197"
DISTRICT_NAME="Toon Valley"

/usr/local/bin/python3.9 -m toontown.ai.AIStart --base-channel ${BASE_CHANNEL} \
               --max-channels ${MAX_CHANNELS} --stateserver ${STATE_SERVER} \
               --messagedirector-ip ${MESSAGE_DIRECTOR_IP} \
               --eventlogger-ip ${EVENT_LOGGER_IP} --district-name "$DISTRICT_NAME"


================================================
FILE: darwin/start-astron-server.sh
================================================
#!/bin/sh
cd ../astron/darwin

# This assumes that your astrond build is located in the
# "astron/darwin" directory.
./astrond --loglevel info ../config/astrond.yml


================================================
FILE: darwin/start-game.sh
================================================
#!/bin/sh
cd ..

export LOGIN_TOKEN=dev

/usr/local/bin/python3.9 -m toontown.launcher.QuickStartLauncher


================================================
FILE: darwin/start-uberdog-server.sh
================================================
#!/bin/sh
cd ..

MAX_CHANNELS=999999
STATE_SERVER=4002
MESSAGE_DIRECTOR_IP="127.0.0.1:7199"
EVENT_LOGGER_IP="127.0.0.1:7197"
BASE_CHANNEL=1000000

/usr/local/bin/python3.9 -m toontown.uberdog.UDStart --base-channel ${BASE_CHANNEL} \
               --max-channels ${MAX_CHANNELS} --stateserver ${STATE_SERVER} \
               --messagedirector-ip ${MESSAGE_DIRECTOR_IP} \
               --eventlogger-ip ${EVENT_LOGGER_IP}


================================================
FILE: etc/Configrc.prc
================================================
# Window Settings
window-title Toontown
icon-filename phase_3/models/gui/toontown.ico
cursor-filename phase_3/models/gui/toonmono.cur

# Audio/Video
audio-library-name p3openal_audio
load-display pandagl
aux-display pandagl
aux-display pandadx9
aux-display tinydisplay
depth-bits 24
audio-sfx-active #t
audio-music-active #t
aspect-ratio 1.333333

# Models/Resources
model-path resources
default-model-extension .bam
vfs-case-sensitive 0

# Server Settings
server-version sv1.0.47.38
server-failover 80 443
tt-specific-login 1
# If true, individual TCP packets are not sent immediately, but rather they are collected together and accumulated to be sent periodically as one larger TCP packet.  This cuts down on overhead from the TCP/IP protocol, especially if many small packets need to be sent on the same connection, but it introduces additional latency (since packets must be held before they can be sent).
collect-tcp 1

# Developer Options
want-dev 0
schellgames-dev 0

# DC Files
dc-file etc/toon.dc
dc-file etc/otp.dc

# HTTP/Downloading
verify-ssl 0
downloader-timeout-retries 4
downloader-byte-rate 125000
downloader-frequency 0.1
http-connect-timeout 20
http-timeout 30
extra-ssl-handshake-time 20.0
# Compute the SSL random seed early on.
early-random-seed 1

# Notify Settings
notify-level-collide warning
notify-level-chan warning
notify-level-gobj warning
notify-level-loader warning
notify-timestamp #t
notify-integrate #f
default-directnotify-level info
console-output 1

# Panda3D/DirectX
# Configure this true if you have a buggy graphics driver that doesn't correctly implement the third parameter, NumVertices, of DrawIndexedPrimitive().  In particular, the NVIDIA Quadro driver version 6.14.10.7184 seems to treat this as a maximum vertex index, rather than a delta between the maximum and minimum vertex index.  Turn this on if you are seeing stray triangles, or you are not seeing all of your triangles.  Enabling this should work around this bug, at the cost of some additional rendering overhead on the GPU. 
dx-broken-max-index 1
# Set this true to show ime texts on the chat panel and hide the IME default windows. This is a mechanism to work around DX8/9 interface.
ime-aware 1
# Set this true to hide ime windows.
ime-hide 1
# Use DirectX management of video memory
dx-management 1
# If this is true, more accurate but more expensive fog computations are performed.
dx-use-rangebased-fog #t
# Set this true to have all CollisionTraversers in the world respect the previous frame's transform (position) for a given object when determining motion for collision tests.
respect-prev-transform 1
# Specifies the maximum amount of time that should be consumed by a single call to Decompressor::run().
decompressor-step-time 0.5
# Specifies the maximum amount of time that should be consumed by a single call to Extractor::step().
extractor-step-time 0.5
# Fix for Panda3D 1.0.0
temp-hpr-fix 1
# Set this true to allow the use of vertex buffers (or buffer objects, as OpenGL dubs them) for rendering vertex data.
vertex-buffers 0

# GUI Settings
direct-wtext 0
on-screen-debug-font ImpressBT.ttf

# Misc Settings
inactivity-timeout 180
# If require-window is true, it means that we should raise an exception if the window fails to open correctly.
require-window 0
# Limits the size of the buffer used.
patcher-buffer-size 512000
# required-login: auto, green, blue, playToken, DISLToken, gameServer.
required-login playToken
# Do we merge or isolate LOD's?
merge-lod-bundles 0
early-event-sphere 1
# This controls the default value of SmoothMover::get_accept_clock_skew().
accept-clock-skew 1
text-minfilter linear_mipmap_linear
gc-save-all 0
server-data-folder data

# TEMPORARY
skip-friend-quest true
skip-phone-quest true


================================================
FILE: etc/otp.dc
================================================
from direct.distributed import DistributedObject/AI/UD
from direct.distributed import DistributedNode/AI/UD
from direct.distributed import DistributedSmoothNode/AI
from direct.distributed import DistributedCartesianGrid/AI
from direct.distributed import DistributedCamera/AI/OV
from otp.distributed import Account/AI/UD
from otp.distributed import AstronAccount/AI/UD
from otp.ai import TimeManager/AI
from otp.avatar import DistributedAvatar/AI/UD
from otp.avatar import DistributedPlayer/AI
from otp.friends import FriendManager/AI
from otp.friends import AvatarFriendsManager/UD
from otp.friends import PlayerFriendsManager/UD
from otp.friends import GuildManager/AI/UD
from otp.friends import FriendInfo
from otp.friends import AvatarFriendInfo
from otp.distributed import ObjectServer/AI/UD
from otp.distributed import DistributedDistrict/AI/UD
from otp.distributed import DistributedDirectory/AI
from otp.distributed import DistributedTestObject/AI
from otp.snapshot import SnapshotDispatcher/AI/UD
from otp.snapshot import SnapshotRenderer/AI/UD
from otp.uberdog import OtpAvatarManager/AI/UD
from otp.uberdog import DistributedChatManager/AI/UD
from otp.uberdog import SpeedchatRelay/UD
from otp.distributed import CentralLogger/AI/UD
from otp.web import SettingsMgr/AI/UD
from otp.status import StatusDatabase/UD
from otp.avatar import AvatarHandle
from otp.login import AstronLoginManager/UD

typedef uint8 bool;

typedef uint32 DoId;

typedef DoId DoIdList[];

struct AvatarPendingDel {
  uint32 Avatar;
  uint32 date;
};

dclass Account {
  string DcObjectType db;
  uint32[] ACCOUNT_AV_SET required db;
  uint32[] pirateAvatars required db;
  uint32[] HOUSE_ID_SET db;
  uint32 ESTATE_ID db;
  AvatarPendingDel ACCOUNT_AV_SET_DEL[] db;
  string PLAYED_MINUTES db;
  string PLAYED_MINUTES_PERIOD db;
  string CREATED db;
  string LAST_LOGIN db;
};

dclass AstronAccount {
  uint32[] ACCOUNT_AV_SET required db;
  uint32 ESTATE_ID db;
  AvatarPendingDel ACCOUNT_AV_SET_DEL[] db;
  string CREATED db;
  string LAST_LOGIN db;
  string ACCOUNT_ID db;
  string ACCESS_LEVEL db;
};

struct BarrierData {
  uint16 context;
  string name;
  uint32 avIds[];
};

dclass DistributedObject {
  setBarrierData(BarrierData []) broadcast ram;
  setBarrierReady(uint16) airecv clsend;
  execCommand(string, uint32, uint32, uint32);
  broadcastMessage() broadcast;
};

dclass DistributedTestObject : DistributedObject {
  uint32 AutoInterest[];
  setParentingRules(string, string) broadcast ram;
  setRequiredField(uint32) required broadcast ram;
  setB(uint32) broadcast;
  setBA(uint32) broadcast airecv;
  setBO(uint32) broadcast ownsend;
  setBR(uint32) broadcast ram;
  setBRA(uint32) broadcast ram airecv;
  setBRO(uint32) broadcast ram ownsend;
  setBROA(uint32) broadcast ram ownsend airecv;
};

struct OSInfo {
  string name;
  int16 platform;
  int16 major;
  int16 minor;
};

struct CPUSpeed {
  int32/1000 maxSpeed;
  int32/1000 currentSpeed;
};

dclass TimeManager : DistributedObject {
  requestServerTime(uint8) airecv clsend;
  serverTime(uint8, int32, uint32);
  setDisconnectReason(uint8) airecv clsend;
  setExceptionInfo(string(0-1024)) airecv clsend;
  setSignature(string(0-1024), blob, blob) airecv clsend;
  setFrameRate(uint16/10, uint16/1000, uint16, string(0-256), uint32/10, uint32/10, string(0-256), uint16, uint16, uint32/10, uint32/10, uint32/10, uint32, OSInfo, CPUSpeed, uint16, uint16, string(0-256)) airecv clsend;
  setCpuInfo(string(0-1024), string) airecv clsend;
  checkForGarbageLeaks(bool) airecv clsend;
  setNumAIGarbageLeaks(uint32);
  setClientGarbageLeak(uint32, string(0-1024)) airecv clsend;
};

dclass ObjectServer {
  setName(string) airecv ram required;
  setDcHash(uint32) ram required;
  setDateCreated(uint32) airecv;
};

dclass DistributedDirectory : DistributedObject {
  setParentingRules(string, string) broadcast ram;
};

dclass DistributedDistrict : DistributedObject {
  setName(string) required broadcast ram;
  setAvailable(uint8) required broadcast ram;
};

dclass DistributedNode : DistributedObject {
  setParentStr(blob) broadcast ram ownsend airecv;
  setParent(uint32) broadcast ram ownsend airecv;
  setX(int16/10) broadcast ram ownsend airecv;
  setY(int16/10) broadcast ram ownsend airecv;
  setZ(int16/10) broadcast ram ownsend airecv;
  setH(int16%360/10) broadcast ram ownsend airecv;
  setP(int16%360/10) broadcast ram ownsend airecv;
  setR(int16%360/10) broadcast ram ownsend airecv;
  setPos : setX, setY, setZ;
  setHpr : setH, setP, setR;
  setPosHpr : setX, setY, setZ, setH, setP, setR;
  setXY : setX, setY;
  setXZ : setX, setZ;
  setXYH : setX, setY, setH;
  setXYZH : setX, setY, setZ, setH;
};

dclass DistributedSmoothNode : DistributedNode {
  setComponentL(uint64) broadcast ram ownsend airecv;
  setComponentX(int16/10) broadcast ram ownsend airecv;
  setComponentY(int16/10) broadcast ram ownsend airecv;
  setComponentZ(int16/10) broadcast ram ownsend airecv;
  setComponentH(int16%360/10) broadcast ram ownsend airecv;
  setComponentP(int16%360/10) broadcast ram ownsend airecv;
  setComponentR(int16%360/10) broadcast ram ownsend airecv;
  setComponentT(int16) broadcast ram ownsend airecv;
  setSmStop : setComponentT;
  setSmH : setComponentH, setComponentT;
  setSmZ : setComponentZ, setComponentT;
  setSmXY : setComponentX, setComponentY, setComponentT;
  setSmXZ : setComponentX, setComponentZ, setComponentT;
  setSmPos : setComponentX, setComponentY, setComponentZ, setComponentT;
  setSmHpr : setComponentH, setComponentP, setComponentR, setComponentT;
  setSmXYH : setComponentX, setComponentY, setComponentH, setComponentT;
  setSmXYZH : setComponentX, setComponentY, setComponentZ, setComponentH, setComponentT;
  setSmPosHpr : setComponentX, setComponentY, setComponentZ, setComponentH, setComponentP, setComponentR, setComponentT;
  setSmPosHprL : setComponentL, setComponentX, setComponentY, setComponentZ, setComponentH, setComponentP, setComponentR, setComponentT;
  clearSmoothing(int8) broadcast ownsend;
  suggestResync(uint32, int16, int16, int32, uint16, uint16/100) ownrecv clsend;
  returnResync(uint32, int16, int32, uint16, uint16/100) ownrecv clsend;
};

dclass DistributedCartesianGrid : DistributedNode {
  setCellWidth(uint32) required broadcast ram;
  setParentingRules(string, string) broadcast ram;
};

struct Fixture {
  int32/10 x;
  int32/10 y;
  int32/10 z;
  int16/10 h;
  int16/10 p;
  int16/10 r;
  string state;
};

dclass DistributedCamera : DistributedNode {
  setCamParent(uint32) required broadcast ram ownsend airecv;
  setFixtures(Fixture []) required broadcast ram ownsend airecv;
};

struct TalkModification {
  uint16 offset;
  uint16 size;
};

dclass TalkPath_owner {
  setTalk(uint32, uint32, string(0-256), string(0-400), TalkModification [], uint8) broadcast ownsend;
};

dclass TalkPath_whisper {
  setTalkWhisper(uint32, uint32, string(0-256), string(0-400), TalkModification [], uint8) ownrecv clsend;
};

dclass TalkPath_group {
  setTalkGroup(uint32, uint32, string(0-256), string(0-400), TalkModification [], uint8) clsend airecv;
};

dclass TalkPath_account {
  setTalkAccount(uint32, uint32, string(0-256), string(0-400), TalkModification [], uint8) airecv clsend;
};

dclass AvatarHandle : TalkPath_whisper {
};

dclass DistributedAvatar : DistributedSmoothNode, TalkPath_owner, TalkPath_whisper {
  string DcObjectType db;
  setName(string = "Avatar") required broadcast db airecv;
  friendsNotify(int32, int8) ownrecv airecv clsend;
  checkAvOnShard(uint32) clsend airecv;
  confirmAvOnShard(uint32, int8);
};

struct FriendEntry {
  uint32 friendId;
  uint8 friendCode;
};

dclass DistributedPlayer : DistributedAvatar {
  arrivedOnDistrict(uint32) ownrecv ram;
  setAccountName(string = "") required ownrecv db;
  setWhisperFrom(uint32, string(0-256), uint32) ownrecv clsend;
  setWhisperWLFrom(uint32, string(0-256), uint32) ownrecv clsend;
  setWhisperSCFrom(uint32, uint16) ownrecv clsend;
  setWhisperSCCustomFrom(uint32, uint16) ownrecv clsend;
  setWhisperSCEmoteFrom(uint32, uint16) ownrecv clsend;
  setSystemMessage(uint32, string(0-256)) ownrecv;
  setCommonChatFlags(uint8) broadcast ownrecv ram airecv;
  setWhitelistChatFlags(uint8) broadcast ownrecv ram airecv;
  setSC(uint16) broadcast ownsend airecv;
  setSCCustom(uint16) broadcast ownsend airecv;
  setFriendsList(FriendEntry[] = []) ownrecv required db airecv;
  setDISLname(string) broadcast ownrecv ram;
  setDISLid(uint32 = 0) broadcast ownrecv ram db airecv required;
  OwningAccount(uint32);
  WishName(string = "") db ram;
  WishNameState(string = "LOCKED") db ram;
  setPreviousAccess(uint8 = 0) required db airecv;
  setAccess(uint8 = 2) broadcast ownrecv required ram airecv;
  setAccessLevel(uint16 accessLevel = 0) ownrecv required airecv;
  setAsGM(bool = 0) required ram broadcast ownrecv airecv;
};

dclass OtpAvatarManager : DistributedObject {
  online();
  requestAvatarList(uint32) airecv clsend;
  rejectAvatarList(uint32);
  avatarListResponse(blob);
  requestAvatarSlot(uint32, uint32, uint8) clsend airecv;
  rejectAvatarSlot(uint32, uint32, uint8);
  avatarSlotResponse(uint32, uint8);
  requestPlayAvatar(uint32, uint32, uint32) clsend airecv;
  rejectPlayAvatar(uint32, uint32);
  playAvatarResponse(uint32, uint32, uint8, uint8);
  rejectCreateAvatar(uint32);
  createAvatarResponse(uint32, uint32, uint8, uint8);
  requestRemoveAvatar(uint32, uint32, uint32, string(0-256)) airecv clsend;
  rejectRemoveAvatar(uint32);
  removeAvatarResponse(uint32, uint32);
  requestShareAvatar(uint32, uint32, uint32, uint8) airecv clsend;
  rejectShareAvatar(uint32);
  shareAvatarResponse(uint32, uint32, uint8);
};

dclass DistributedChatManager : DistributedObject {
  online();
  adminChat(uint32, string);
  setAvatarLocation(uint32, uint32, uint32);
  setAvatarCrew(uint32, uint32);
  setAvatarGuild(uint32, uint32);
  chatParentId(uint32) airecv clsend;
  chatZoneId(uint32) airecv clsend;
  chatFace(uint32) airecv clsend;
  chatEmote(uint16) airecv clsend;
  chatEmoteTarget(uint32) airecv clsend;
  chatIndex(uint16) airecv clsend;
  chatString(string(0-256)) airecv clsend;
  chatToAvatarIndex : chatZoneId, chatIndex;
  chatParentZoneFaceEmoteWithTargetIndex : chatParentId, chatZoneId, chatFace, chatEmote, chatEmoteTarget, chatIndex;
  chatToAvatarString : chatZoneId, chatString;
  chatParentZoneFaceEmoteWithTargetString : chatParentId, chatZoneId, chatFace, chatEmote, chatEmoteTarget, chatString;
  speedChatTo(uint16) airecv clsend;
  speedChatFrom(uint32, uint16);
  speedChatCustomTo(uint16) airecv clsend;
  speedChatCustomFrom(uint32, uint16);
  whisperSCTo(uint32, uint16) airecv clsend;
  whisperSCFrom(uint32, uint16);
  whisperSCCustomTo(uint32, uint16) airecv clsend;
  whisperSCCustomFrom(uint32, uint16);
  whisperSCEmoteTo(uint32, uint16) airecv clsend;
  whisperSCEmoteFrom(uint32, uint16);
  whisperIgnored(uint32);
};

dclass FriendManager : DistributedObject {
  friendQuery(int32) airecv clsend;
  cancelFriendQuery(int32) airecv clsend;
  inviteeFriendConsidering(int8, int32) airecv clsend;
  inviteeFriendResponse(int8, int32) airecv clsend;
  inviteeAcknowledgeCancel(int32) airecv clsend;
  friendConsidering(int8, int32);
  friendResponse(int8, int32);
  inviteeFriendQuery(int32, string, blob, int32);
  inviteeCancelFriendQuery(int32);
  requestSecret() airecv clsend;
  requestSecretResponse(int8, string);
  submitSecret(string(0-256)) airecv clsend;
  submitSecretResponse(int8, int32);
};

struct FriendInfo {
  string avatarName;
  uint32 avatarId;
  string playerName;
  uint8 onlineYesNo;
  uint8 openChatEnabledYesNo;
  uint8 openChatFriendshipYesNo;
  uint8 wlChatEnabledYesNo;
  string location;
  string sublocation;
  uint32 timestamp;
};

struct AvatarFriendInfo {
  string avatarName;
  string playerName;
  uint32 playerId;
  uint8 onlineYesNo;
  uint8 openChatEnabledYesNo;
  uint8 openChatFriendshipYesNo;
  uint8 wlChatEnabledYesNo;
};

struct MemberInfo {
  uint32 avatarId;
  string avatarName;
  uint8 avatarRank;
  uint8 avatarOnline;
  uint32 bandManagerId;
  uint32 bandId;
};

struct leaderBoardRecordResponces {
  char found;
  uint32 id;
  string text;
  int32 value;
};

struct leaderBoardRecord {
  uint32 id;
  string text;
  int32 value;
};

dclass LeaderBoardReceiver {
  getTopTenResponce(string, leaderBoardRecord []);
  getValuesResponce(string, leaderBoardRecordResponces []);
};

dclass LeaderBoard : LeaderBoardReceiver {
  setValue(string [], uint32, string, int32);
  alterValue(string [], uint32, string, int32);
  setHighScore(string [], uint32, string, int32);
  getValues(string, uint32 []);
  getTopTen(string);
  getValuesRespondTo(string, uint32 [], uint32);
  getTopTenRespondTo(string, uint32);
};

dclass GuildManager : DistributedObject, LeaderBoardReceiver, TalkPath_group {
  online();
  guildRejectInvite(uint32, uint32);
  invitationFrom(uint32, string, uint32, string);
  requestInvite(uint32) airecv clsend;
  memberList() airecv clsend;
  createGuild() airecv clsend;
  acceptInvite() airecv clsend;
  declineInvite() airecv clsend;
  setWantName(string(0-256)) airecv clsend;
  removeMember(uint32) airecv clsend;
  changeRank(uint32, uint8) airecv clsend;
  changeRankAvocate(uint32) airecv clsend;
  statusRequest() airecv clsend;
  requestLeaderboardTopTen() airecv clsend;
  guildStatusUpdate(uint32, string(0-256), uint8);
  guildNameReject(uint32);
  guildNameChange(string, uint8);
  receiveMember(MemberInfo);
  receiveMembersDone();
  guildAcceptInvite(uint32);
  guildDeclineInvite(uint32);
  updateRep(uint32, uint32);
  leaderboardTopTen(leaderBoardRecord []);
  recvAvatarOnline(uint32, string, uint32, uint32);
  recvAvatarOffline(uint32, string);
  sendChat(string(0-256), uint8, uint32) airecv clsend;
  sendWLChat(string(0-256), uint8, uint32) airecv clsend;
  sendSC(uint16) airecv clsend;
  sendSCQuest(uint16, uint16, uint16) airecv clsend;
  recvChat(uint32, string, uint8, uint32);
  recvWLChat(uint32, string, uint8, uint32);
  recvSC(uint32, uint16);
  recvSCQuest(uint32, uint16, uint16, uint16);
  sendTokenRequest() airecv clsend;
  recvTokenGenerated(string);
  recvTokenInviteValue(string, int8);
  sendTokenForJoinRequest(string(0-256), string(0-256)) airecv clsend;
  recvTokenRedeemMessage(string);
  recvTokenRedeemedByPlayerMessage(string);
  sendTokenRValue(string(0-256), int8) airecv clsend;
  sendPermToken() airecv clsend;
  sendNonPermTokenCount() airecv clsend;
  recvPermToken(string);
  recvNonPermTokenCount(uint8);
  sendClearTokens(uint8) airecv clsend;
  sendAvatarBandId(uint32, uint32, uint32);
  recvMemberAdded(MemberInfo, uint32, string);
  notifyGuildKicksMaxed();
  recvMemberRemoved(uint32, uint32, string, string);
  recvMemberUpdateName(uint32, string);
  recvMemberUpdateRank(uint32, uint32, string, string, uint8, bool);
  recvMemberUpdateBandId(uint32, uint32, uint32);
  avatarOnline(uint32, uint16);
  avatarOffline(uint32);
  reflectTeleportQuery(uint32, uint32, uint32, uint32, uint32) clsend airecv;
  teleportQuery(uint32, uint32, uint32, uint32, uint32);
  reflectTeleportResponse(uint32, int8, uint32, uint32, uint32) clsend airecv;
  teleportResponse(uint32, int8, uint32, uint32, uint32);
  requestGuildMatesList(uint32, uint32, uint32);
  updateAvatarName(uint32, string);
  avatarDeleted(uint32);
};

dclass AvatarFriendsManager : DistributedObject {
  online();
  requestInvite(uint32) airecv clsend;
  friendConsidering(uint32) airecv clsend;
  invitationFrom(uint32, string);
  retractInvite(uint32);
  rejectInvite(uint32, uint32);
  requestRemove(uint32) airecv clsend;
  rejectRemove(uint32, uint32);
  updateAvatarFriend(uint32, AvatarFriendInfo);
  removeAvatarFriend(uint32);
  updateAvatarName(uint32, string);
  avatarOnline(uint32, uint32, string, bool, bool, string, string);
  avatarOffline(uint32);
};

dclass PlayerFriendsManager : DistributedObject, TalkPath_account {
  requestInvite(uint32, uint32, uint8) airecv clsend;
  invitationFrom(uint32, string);
  retractInvite(uint32);
  invitationResponse(uint32, uint16, uint32);
  requestDecline(uint32, uint32) airecv clsend;
  requestDeclineWithReason(uint32, uint32, uint32) airecv clsend;
  requestRemove(uint32, uint32) airecv clsend;
  secretResponse(string);
  rejectSecret(string);
  rejectUseSecret(string);
  updatePlayerFriend(uint32, FriendInfo, uint8);
  removePlayerFriend(uint32);
};

dclass SnapshotDispatcher : DistributedObject {
  online();
  requestRender(uint32);
  avatarDeleted(uint32);
  requestNewWork(uint32);
  errorFetchingAvatar(uint32, uint32);
  errorRenderingAvatar(uint32, uint32);
  renderSuccessful(uint32, uint32);
};

dclass SnapshotRenderer : DistributedObject {
  online();
  requestRender(uint32, uint32, string);
};

dclass SpeedchatRelay : DistributedObject, TalkPath_account {
  forwardSpeedchat(uint32, uint8, uint32 [], uint32, string(0-256), uint8) clsend;
};

dclass CentralLogger : DistributedObject {
  sendMessage(string(0-256), string(0-1024), uint32, uint32) clsend;
  logAIGarbage() airecv;
};

dclass SettingsMgr : DistributedObject {
  requestAllChangedSettings() airecv clsend;
  settingChange(string, string) airecv;
};

dclass StatusDatabase : DistributedObject {
  requestOfflineAvatarStatus(uint32 []) airecv clsend;
  recvOfflineAvatarStatus(uint32, uint32);
};

dclass CallbackObject {
  callback(uint32, bool, uint8);
};

struct PotentialAvatar {
  uint32 avNum;
  string avName;
  blob avDNA;
  uint8 avPosition;
  uint8 nameState;
};

dclass AstronLoginManager : DistributedObject {
  requestLogin(string) clsend;
  loginResponse(blob);
  requestAvatarList() clsend;
  avatarListResponse(PotentialAvatar[]);
  createAvatar(blob, uint8) clsend;
  createAvatarResponse(uint32);
  setNamePattern(uint32, int16, uint8, int16, uint8, int16, uint8, int16, uint8) clsend;
  namePatternAnswer(uint32, uint8);
  setNameTyped(uint32, string) clsend;
  nameTypedResponse(uint32, uint8);
  acknowledgeAvatarName(uint32) clsend;
  acknowledgeAvatarNameResponse();
  requestRemoveAvatar(uint32) clsend;
  requestPlayAvatar(uint32) clsend;
};


================================================
FILE: etc/toon.dc
================================================
from direct.distributed import DistributedObjectGlobal
from toontown.ai import WelcomeValleyManager/AI
from toontown.building import DistributedAnimatedProp/AI
from toontown.toon import DistributedToon/AI/UD
from toontown.classicchars import DistributedCCharBase/AI
from toontown.classicchars import DistributedMickey/AI
from toontown.classicchars import DistributedVampireMickey/AI
from toontown.classicchars import DistributedMinnie/AI
from toontown.classicchars import DistributedWitchMinnie/AI
from toontown.classicchars import DistributedGoofy/AI
from toontown.classicchars import DistributedSuperGoofy/AI
from toontown.classicchars import DistributedDaisy/AI
from toontown.classicchars import DistributedSockHopDaisy/AI
from toontown.classicchars import DistributedChip/AI
from toontown.classicchars import DistributedPoliceChip/AI
from toontown.classicchars import DistributedDale/AI
from toontown.classicchars import DistributedJailbirdDale/AI
from toontown.classicchars import DistributedGoofySpeedway/AI
from toontown.classicchars import DistributedDonald/AI
from toontown.classicchars import DistributedFrankenDonald/AI
from toontown.classicchars import DistributedDonaldDock/AI
from toontown.classicchars import DistributedPluto/AI
from toontown.classicchars import DistributedWesternPluto/AI
from toontown.safezone import DistributedTrolley/AI
from toontown.safezone import DistributedPartyGate/AI
from toontown.suit import DistributedSuitPlanner/AI
from toontown.suit import DistributedSuitBase/AI
from toontown.suit import DistributedSuit/AI
from toontown.suit import DistributedTutorialSuit/AI
from toontown.suit import DistributedFactorySuit/AI
from toontown.suit import DistributedMintSuit/AI
from toontown.suit import DistributedStageSuit/AI
from toontown.suit import DistributedSellbotBoss/AI
from toontown.suit import DistributedCashbotBoss/AI
from toontown.coghq import DistributedCashbotBossSafe/AI
from toontown.coghq import DistributedCashbotBossCrane/AI
from toontown.suit import DistributedCashbotBossGoon/AI
from toontown.battle import DistributedBattleBase/AI
from toontown.battle import DistributedBattle/AI
from toontown.battle import DistributedBattleBldg/AI
from toontown.tutorial import DistributedBattleTutorial/AI
from toontown.coghq import DistributedBattleFactory/AI
from toontown.battle import DistributedBattleFinal/AI
from toontown.safezone import DistributedBoat/AI
from toontown.safezone import DistributedButterfly/AI
from toontown.safezone import DistributedMMPiano/AI
from toontown.safezone import DistributedDGFlower/AI
from toontown.fishing import DistributedFishingPond/AI
from toontown.fishing import DistributedFishingTarget/AI
from toontown.fishing import DistributedPondBingoManager/AI
from toontown.safezone import DistributedFishingSpot/AI
from toontown.estate import DistributedCannon/AI
from toontown.estate import DistributedTarget/AI
from toontown.minigame import DistributedMinigame/AI
from toontown.minigame import DistributedMinigameTemplate/AI
from toontown.minigame import DistributedRaceGame/AI
from toontown.minigame import DistributedCannonGame/AI
from toontown.minigame import DistributedPhotoGame/AI
from toontown.minigame import DistributedPatternGame/AI
from toontown.minigame import DistributedRingGame/AI
from toontown.minigame import DistributedTagGame/AI
from toontown.minigame import DistributedMazeGame/AI
from toontown.minigame import DistributedTugOfWarGame/AI
from toontown.minigame import DistributedCatchGame/AI
from toontown.minigame import DistributedDivingGame/AI
from toontown.minigame import DistributedTargetGame/AI
from toontown.estate import EstateManager/AI
from toontown.estate import DistributedEstate/AI
from toontown.estate import DistributedHouse/AI
from toontown.estate import DistributedHouseInterior/AI
from toontown.estate import DistributedGarden/AI
from toontown.shtiker import DeleteManager/AI
from toontown.spellbook import ToontownMagicWordManager/AI
from toontown.ai import NewsManager/AI
from toontown.shtiker import PurchaseManager/AI
from toontown.shtiker import NewbiePurchaseManager/AI
from toontown.safezone import SafeZoneManager/AI
from toontown.tutorial import TutorialManager/AI
from toontown.catalog import CatalogManager/AI
from toontown.safezone import DistributedTreasure/AI
from toontown.safezone import DistributedDDTreasure/AI
from toontown.safezone import DistributedDGTreasure/AI
from toontown.safezone import DistributedDLTreasure/AI
from toontown.safezone import DistributedTTTreasure/AI
from toontown.safezone import DistributedBRTreasure/AI
from toontown.safezone import DistributedMMTreasure/AI
from toontown.safezone import DistributedOZTreasure/AI
from toontown.safezone import DistributedETreasure/AI
from toontown.safezone import DistributedEFlyingTreasure/AI
from toontown.minigame import DistributedTagTreasure/AI
from toontown.coghq import DistributedCashbotBossTreasure/AI
from toontown.building import DistributedTrophyMgr/AI
from toontown.building import DistributedBuilding/AI
from toontown.building import DistributedAnimBuilding/AI
from toontown.building import DistributedToonInterior/AI
from toontown.building import DistributedToonHallInterior/AI
from toontown.building import DistributedSuitInterior/AI
from toontown.building import DistributedHQInterior/AI
from toontown.building import DistributedGagshopInterior/AI
from toontown.building import DistributedPetshopInterior/AI
from toontown.building import DistributedKartShopInterior/AI
from toontown.building import DistributedDoor/AI
from toontown.building import DistributedAnimDoor/AI
from toontown.estate import DistributedHouseDoor/AI
from toontown.coghq import DistributedCogHQDoor/AI
from toontown.coghq import DistributedSellbotHQDoor/AI
from toontown.toon import DistributedNPCToonBase/AI
from toontown.toon import DistributedNPCToon/AI
from toontown.toon import DistributedNPCSpecialQuestGiver/AI
from toontown.toon import DistributedNPCFlippyInToonHall/AI
from toontown.toon import DistributedNPCScientist/AI
from toontown.toon import DistributedNPCClerk/AI
from toontown.toon import DistributedNPCTailor/AI
from toontown.toon import DistributedNPCBlocker/AI
from toontown.toon import DistributedNPCFisherman/AI
from toontown.toon import DistributedNPCPartyPerson/AI
from toontown.toon import DistributedNPCPetclerk/AI
from toontown.toon import DistributedNPCKartClerk/AI
from toontown.building import DistributedKnockKnockDoor/AI
from toontown.building import DistributedElevator/AI
from toontown.building import DistributedElevatorFSM/AI
from toontown.building import DistributedElevatorExt/AI
from toontown.building import DistributedElevatorInt/AI
from toontown.coghq import DistributedFactoryElevatorExt/AI
from toontown.coghq import DistributedMintElevatorExt/AI
from toontown.coghq import DistributedLawOfficeElevatorExt/AI
from toontown.coghq import DistributedLawOfficeElevatorInt/AI
from toontown.building import DistributedElevatorFloor/AI
from toontown.building import DistributedBossElevator/AI
from toontown.building import DistributedVPElevator/AI
from toontown.building import DistributedCFOElevator/AI
from toontown.building import DistributedCJElevator/AI
from toontown.building import DistributedBBElevator/AI
from toontown.building import DistributedBoardingParty/AI
from toontown.building import DistributedTutorialInterior/AI
from toontown.estate import DistributedBankMgr/AI
from toontown.estate import DistributedMailbox/AI
from toontown.estate import DistributedFurnitureManager/AI
from toontown.estate import DistributedFurnitureItem/AI
from toontown.estate import DistributedBank/AI
from toontown.estate import DistributedCloset/AI
from toontown.estate import DistributedTrunk/AI
from toontown.estate import DistributedPhone/AI
from toontown.effects import DistributedFireworkShow/AI
from toontown.estate import DistributedFireworksCannon/AI
from toontown.coghq import LobbyManager/AI
from otp.level import DistributedLevel/AI
from otp.level import DistributedEntity/AI
from otp.level import DistributedInteractiveEntity/AI
from toontown.coghq import DistributedFactory/AI
from toontown.coghq import DistributedLawOffice/AI
from toontown.coghq import DistributedLawOfficeFloor/AI
from toontown.coghq import DistributedLift/AI
from toontown.coghq import DistributedDoorEntity/AI
from toontown.coghq import DistributedSwitch/AI
from toontown.coghq import DistributedButton/AI
from toontown.coghq import DistributedTrigger/AI
from toontown.coghq import DistributedCrushableEntity/AI
from toontown.coghq import DistributedCrusherEntity/AI
from toontown.coghq import DistributedStomper/AI
from toontown.coghq import DistributedStomperPair/AI
from toontown.coghq import DistributedLaserField/AI
from toontown.coghq import DistributedGolfGreenGame/AI
from toontown.coghq import DistributedSecurityCamera/AI
from toontown.coghq import DistributedMover/AI
from toontown.coghq import DistributedElevatorMarker/AI
from toontown.coghq import DistributedBarrelBase/AI
from toontown.coghq import DistributedGagBarrel/AI
from toontown.coghq import DistributedBeanBarrel/AI
from toontown.coghq import DistributedHealBarrel/AI
from toontown.coghq import DistributedGrid/AI
from toontown.coghq import ActiveCell/AI
from toontown.coghq import DirectionalCell/AI
from toontown.coghq import CrusherCell/AI
from toontown.coghq import DistributedCrate/AI
from toontown.coghq import DistributedSinkingPlatform/AI
from toontown.suit import DistributedGoon/AI
from toontown.suit import DistributedGridGoon/AI
from toontown.coghq import BattleBlocker/AI
from toontown.ai import DistributedBlackCatMgr/AI
from toontown.ai import DistributedPolarPlaceEffectMgr/AI
from toontown.ai import DistributedGreenToonEffectMgr/AI
from toontown.ai import DistributedResistanceEmoteMgr/AI
from toontown.ai import DistributedScavengerHuntTarget/AI
from toontown.ai import DistributedTrickOrTreatTarget/AI
from toontown.ai import DistributedWinterCarolingTarget/AI
from toontown.coghq import DistributedMint/AI
from toontown.coghq import DistributedMintRoom/AI
from toontown.coghq import DistributedMintBattle/AI
from toontown.coghq import DistributedStage/AI
from toontown.coghq import DistributedStageRoom/AI
from toontown.coghq import DistributedStageBattle/AI
from toontown.pets.PetDCImports/AI import *
from toontown.pets import DistributedPetProxy/AI
from toontown.coghq.InGameEditorDCImports/AI import *
from toontown.distributed import ToontownDistrict/AI
from toontown.distributed import ToontownDistrictStats/AI
from toontown.racing import DistributedVehicle/AI
from toontown.racing import DistributedStartingBlock/AI
from toontown.racing import DistributedRace/AI
from toontown.racing import DistributedKartPad/AI
from toontown.racing import DistributedRacePad/AI
from toontown.racing import DistributedViewPad/AI
from toontown.racing import DistributedStartingBlock/AI
from toontown.racing import DistributedLeaderBoard/AI
from toontown.racing import DistributedGag/AI
from toontown.racing import DistributedProjectile/AI
from toontown.racing.DistributedStartingBlock/AI import DistributedViewingBlock/AI
from toontown.uberdog.DistributedDeliveryManager/AI/UD import DistributedDeliveryManager/AI/UD
from toontown.uberdog.DistributedDataStoreManager/AI/UD import DistributedDataStoreManager/AI/UD
from toontown.suit import DistributedLawbotBoss/AI
from toontown.coghq import DistributedLawbotBossGavel/AI
from toontown.suit import DistributedLawbotBossSuit/AI
from toontown.coghq import DistributedLawbotCannon/AI
from toontown.coghq import DistributedLawbotChair/AI
from toontown.estate import DistributedLawnDecor/AI
from toontown.estate import DistributedGardenPlot/AI
from toontown.estate import DistributedGardenBox/AI
from toontown.estate import DistributedFlower/AI
from toontown.estate import DistributedGagTree/AI
from toontown.estate import DistributedStatuary/AI
from toontown.estate import DistributedToonStatuary/AI
from toontown.estate import DistributedChangingStatuary/AI
from toontown.estate import DistributedAnimatedStatuary/AI
from toontown.estate import DistributedPlantBase/AI
from toontown.estate import DistributedLawnDecor/AI
from toontown.minigame import DistributedTravelGame/AI
from toontown.minigame import DistributedPairingGame/AI
from toontown.minigame import DistributedVineGame/AI
from toontown.golf import DistributedPhysicsWorld/AI
from toontown.golf import DistributedGolfHole/AI
from toontown.golf import DistributedGolfCourse/AI
from toontown.parties import DistributedParty/AI
from toontown.parties import DistributedPartyActivity/AI
from toontown.parties import DistributedPartyTeamActivity/AI
from toontown.parties import DistributedPartyCannon/AI
from toontown.parties import DistributedPartyCannonActivity/AI
from toontown.parties import DistributedPartyCatchActivity/AI
from toontown.parties import DistributedPartyWinterCatchActivity/AI
from toontown.parties import DistributedPartyCogActivity/AI
from toontown.parties import DistributedPartyWinterCogActivity/AI
from toontown.parties import DistributedPartyFireworksActivity/AI
from toontown.parties import DistributedPartyDanceActivityBase/AI
from toontown.parties import DistributedPartyDanceActivity/AI
from toontown.parties import DistributedPartyDance20Activity/AI
from toontown.parties import DistributedPartyValentineDanceActivity/AI
from toontown.parties import DistributedPartyValentineDance20Activity/AI
from toontown.parties import DistributedPartyTrampolineActivity/AI
from toontown.parties import DistributedPartyValentineTrampolineActivity/AI
from toontown.parties import DistributedPartyVictoryTrampolineActivity/AI
from toontown.parties import DistributedPartyWinterTrampolineActivity/AI
from toontown.parties import DistributedPartyTugOfWarActivity/AI
from toontown.parties import DistributedPartyJukeboxActivityBase/AI
from toontown.parties import DistributedPartyJukeboxActivity/AI
from toontown.parties import DistributedPartyJukebox40Activity/AI
from toontown.parties import DistributedPartyValentineJukeboxActivity/AI
from toontown.parties import DistributedPartyValentineJukebox40Activity/AI
from toontown.friends import TTPlayerFriendsManager/UD
from toontown.uberdog import TTSpeedchatRelay/UD
from toontown.safezone import DistributedGolfKart/AI
from toontown.safezone import DistributedPicnicBasket/AI
from toontown.distributed import DistributedTimer/AI
from toontown.suit import DistributedBossbotBoss/AI
from toontown.coghq import DistributedCogKart/AI
from toontown.coghq import DistributedCountryClub/AI
from toontown.coghq import DistributedCountryClubRoom/AI
from toontown.coghq import DistributedMoleField/AI
from toontown.coghq import DistributedCountryClubBattle/AI
from toontown.building import DistributedClubElevator/AI
from toontown.coghq import DistributedMaze/AI
from toontown.battle import DistributedBattleWaiters/AI
from toontown.coghq import DistributedFoodBelt/AI
from toontown.coghq import DistributedBanquetTable/AI
from toontown.battle import DistributedBattleDiners/AI
from toontown.coghq import DistributedGolfSpot/AI
from toontown.minigame import DistributedIceGame/AI
from toontown.minigame import DistributedCogThiefGame/AI
from toontown.minigame import DistributedTwoDGame/AI
from toontown.safezone import DistributedPicnicTable/AI
from toontown.safezone import DistributedChineseCheckers/AI
from toontown.safezone import DistributedCheckers/AI
from toontown.safezone import DistributedFindFour/AI
from toontown.uberdog.DistributedMailManager/AI/UD import DistributedMailManager/AI/UD
from toontown.uberdog.DistributedPartyManager/AI/UD import DistributedPartyManager/AI/UD
from toontown.rpc.AwardManager/UD import AwardManager/UD
from toontown.uberdog.DistributedCpuInfoMgr/AI/UD import DistributedCpuInfoMgr/AI/UD
from toontown.uberdog.DistributedSecurityMgr/AI/UD import DistributedSecurityMgr/AI/UD
from toontown.rpc.RATManager/UD import RATManager/UD
from toontown.uberdog.DistributedInGameNewsMgr/AI/UD import DistributedInGameNewsMgr/AI/UD
from toontown.uberdog.DistributedWhitelistMgr/AI/UD import DistributedWhitelistMgr/AI/UD
from toontown.coderedemption.TTCodeRedemptionMgr/AI/UD import TTCodeRedemptionMgr/AI/UD
from toontown.distributed.NonRepeatableRandomSourceAI import NonRepeatableRandomSourceAI
from toontown.distributed.NonRepeatableRandomSourceUD import NonRepeatableRandomSourceUD
from toontown.ai.DistributedPhaseEventMgr/AI import DistributedPhaseEventMgr/AI
from toontown.ai.DistributedHydrantZeroMgr/AI import DistributedHydrantZeroMgr/AI
from toontown.ai.DistributedMailboxZeroMgr/AI import DistributedMailboxZeroMgr/AI
from toontown.ai.DistributedTrashcanZeroMgr/AI import DistributedTrashcanZeroMgr/AI
from toontown.ai import DistributedSillyMeterMgr/AI
from toontown.cogdominium import DistributedCogdoInterior/AI
from toontown.cogdominium import DistributedCogdoBattleBldg/AI
from toontown.cogdominium import DistributedCogdoElevatorExt/AI
from toontown.cogdominium import DistributedCogdoElevatorInt/AI
from toontown.cogdominium import DistributedCogdoBarrel/AI
from toontown.cogdominium import DistCogdoGame/AI
from toontown.cogdominium import DistCogdoLevelGame/AI
from toontown.cogdominium import DistCogdoBoardroomGame/AI
from toontown.cogdominium import DistCogdoCraneGame/AI
from toontown.cogdominium import DistCogdoMazeGame/AI
from toontown.cogdominium import DistCogdoFlyingGame/AI
from toontown.cogdominium import DistCogdoCrane/AI
from toontown.cogdominium import DistCogdoCraneMoneyBag/AI
from toontown.cogdominium import DistCogdoCraneCog/AI

struct GiftItem {
  blob Item;
  string giftTag;
};

struct gardenSpecial {
  uint8 index;
  uint8 count;
};

struct simpleMail {
  uint64 msgId;
  uint32 senderId;
  uint16 year;
  uint8 month;
  uint8 day;
  string body;
};

struct invite {
  uint64 inviteKey;
  uint64 partyId;
  uint8 status;
};

struct decoration {
  uint8 decorId;
  uint8 x;
  uint8 y;
  uint8 h;
};

struct activity {
  uint8 activityId;
  uint8 x;
  uint8 y;
  uint8 h;
};

struct party {
  uint64 partyId;
  uint32 hostId;
  uint16 startYear;
  uint8 startMonth;
  uint8 startDay;
  uint8 startHour;
  uint8 startMinute;
  uint16 endYear;
  uint8 endMonth;
  uint8 endDay;
  uint8 endHour;
  uint8 endMinute;
  uint8 isPrivate;
  uint8 inviteTheme;
  activity activities[];
  decoration decors[];
  uint8 status;
};

struct partyReply {
  uint32 inviteeId;
  uint8 status;
};

struct repliesForOneParty {
  uint64 partyId;
  partyReply partyReplies[];
};

struct publicPartyInfo {
  uint32 shardId;
  uint32 zoneId;
  uint8 numberOfGuests;
  string hostName;
  uint8[] activityIds;
  uint16 minLeft;
};

struct jukeboxSongInfo {
  uint8/10 phase;
  string fileName;
};

struct partyCloudColor {
  uint16 cloudNumber;
  uint8/100 r;
  uint8/100 g;
  uint8/100 b;
};

struct datetime {
  uint16 year;
  uint8 month;
  uint8 day;
  uint8 hour;
  uint8 minutes;
  uint8 seconds;
};

dclass ToontownDistrict : DistributedDistrict {
  setParentingRules(string, string) broadcast ram;
  allowAHNNLog(bool) broadcast required ram;
};

dclass ToontownDistrictStats : DistributedObject {
  settoontownDistrictId(uint32) broadcast required ram;
  setAvatarCount(uint32) broadcast required ram;
  setNewAvatarCount(uint32) broadcast required ram;
  setStats : setAvatarCount, setNewAvatarCount;
};

dclass WelcomeValleyManager : DistributedObject {
  clientSetZone(uint32) airecv clsend;
  requestZoneIdMessage(uint32, uint16) airecv clsend;
  requestZoneIdResponse(uint32, uint16);
};

dclass DistributedAnimatedProp : DistributedObject {
  setPropId(uint16) required broadcast ram;
  setAvatarInteract(uint32) required broadcast ram;
  requestInteract() airecv clsend;
  rejectInteract();
  requestExit() airecv clsend;
  avatarExit(uint32) broadcast;
  setState(string, int16) required broadcast ram;
};

typedef int16 pair16[2];

dclass DistributedToon : DistributedPlayer {
  setDNAString(blob) required broadcast ownrecv db;
  setGM(uint8 = 0) required broadcast ownrecv db;
  setMaxBankMoney(int16 = 12000) required broadcast ownrecv db;
  setBankMoney(int16 = 0) required broadcast ownrecv db;
  setMaxMoney(int16 = 40) required broadcast ownrecv db;
  setMoney(int16 = 0) required broadcast ownrecv db;
  setMaxHp(int16 = 15) required broadcast ownrecv db;
  setHp(int16 = 15) required broadcast ownrecv db;
  toonUp(uint16) broadcast ownrecv;
  takeDamage(uint16) broadcast ownrecv;
  setBattleId(uint32) required broadcast ram;
  setExperience(blob = [0 * 14]) required ownrecv db;
  setMaxCarry(uint8 = 20) required ownrecv db;
  setTrackAccess(uint16[] = [0, 0, 0, 0, 1, 1, 0]) required broadcast ownrecv db;
  setTrackProgress(int8 = -1, uint32 = 0) required ownrecv db;
  setTrackBonusLevel(int8[] = [-1, -1, -1, -1, -1, -1, -1]) required broadcast ownrecv db;
  setInventory(blob = [0 * 7, 0 * 7, 0 * 7, 0 * 7, 1, 0 * 6, 1, 0 * 6, 0 * 7]) required ownrecv db;
  setMaxNPCFriends(uint16 = 16) required ownrecv db;
  setNPCFriendsDict(FriendEntry[]) required ownrecv db;
  setDefaultShard(uint32 = 0) required ownrecv db;
  setDefaultZone(uint32 = 0) required ownrecv db;
  setShtickerBook(blob = []) required ownrecv db;
  setZonesVisited(uint32[] = [2000]) required ownrecv db;
  setHoodsVisited(uint32[] = [2000]) required ownrecv db;
  setInterface(blob = []) required ownrecv db;
  setLastHood(uint32 = 0) required ownrecv db;
  setTutorialAck(uint8 = 0) required ownrecv db;
  setMaxClothes(uint32 = 10) required ownrecv db;
  setClothesTopsList(uint8[] = []) required ownrecv db;
  setClothesBottomsList(uint8[] = []) required ownrecv db;
  setMaxAccessories(uint32 = 0) required ownrecv db;
  setHatList(uint8[] = []) required ownrecv db;
  setGlassesList(uint8[] = []) required ownrecv db;
  setBackpackList(uint8[] = []) required ownrecv db;
  setShoesList(uint8[] = []) required ownrecv db;
  setHat(uint8 = 0, uint8 = 0, uint8 = 0) required broadcast db ownrecv;
  setGlasses(uint8 = 0, uint8 = 0, uint8 = 0) required broadcast db ownrecv;
  setBackpack(uint8 = 0, uint8 = 0, uint8 = 0) required broadcast db ownrecv;
  setShoes(uint8 = 0, uint8 = 0, uint8 = 0) required broadcast db ownrecv;
  setGardenSpecials(gardenSpecial [] = []) required ownrecv db airecv;
  setEarnedExperience(uint16[]) ownrecv;
  setTunnelIn(int16, int16/10, int16/10, int16/10, int16/100, int32/100) ownsend broadcast;
  setTunnelOut(int16, int16/10, int16/10, int16/10, int16/10, int16/100, int32/100) ownsend broadcast;
  setAnimState(char [0-1024], int16/1000, int16) broadcast ram ownsend airecv;
  setEmoteState(int16, int16/1000, int16) broadcast ram ownsend;
  setEmoteAccess(uint8[] = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) required ownrecv db;
  setCustomMessages(uint16[] = []) required ownrecv db;
  setSleepAutoReply(uint32) broadcast clsend ownrecv;
  setResistanceMessages(pair16 [] = []) required ownrecv db;
  setPetTrickPhrases(uint8[] = [0]) required ownrecv db;
  setCatalogSchedule(uint16 = 0, uint32 = 0) required ownrecv db;
  setCatalog(blob = [], blob = [], blob = []) required ownrecv db;
  setMailboxContents(blob = []) required ownrecv db;
  setDeliverySchedule(blob = []) required ownrecv db airecv;
  setGiftSchedule(blob = []) required ownrecv db airecv;
  setAwardMailboxContents(blob = []) required ownrecv db;
  setAwardSchedule(blob = []) required ownrecv db airecv;
  setAwardNotify(uint8 = 0) required ownrecv db;
  setCatalogNotify(uint8 = 0, uint8 = 0) required ownrecv db;
  playSplashEffect(int16/10, int16/10, int16/10) broadcast ownsend;
  setWhisperSCToontaskFrom(uint32, uint32, uint32, uint32, uint8) ownrecv clsend;
  setSCToontask(uint32, uint32, uint32, uint8) broadcast ownsend;
  reqSCResistance(uint16, uint32 []) ownsend airecv;
  setSCResistance(uint16, uint32 []) broadcast ownrecv;
  setSpeedChatStyleIndex(uint8 = 1) required ownsend broadcast db;
  setTrophyScore(uint16) broadcast ownrecv ram;
  setTeleportAccess(uint32[] = []) required ownrecv db;
  checkTeleportAccess(uint16) airecv ownsend;
  battleSOS(uint32) ownrecv clsend;
  teleportQuery(uint32) ownrecv clsend;
  teleportResponse(uint32, int8, uint32, uint32, uint32) ownrecv clsend;
  teleportResponseToAI(uint32, int8, uint32, uint32, uint32, uint32) ownsend airecv;
  teleportGiveup(uint32) ownrecv clsend;
  teleportGreeting(uint32) broadcast ownsend;
  setCogStatus(uint32[] = [1 * 32]) required ownrecv db;
  setCogCount(uint32[] = [0 * 32]) required ownrecv db;
  setCogRadar(uint8[] = [0 * 4]) required ownrecv db;
  setBuildingRadar(uint8[] = [0 * 4]) required ownrecv db;
  setCogLevels(uint8[] = [0 * 4]) required broadcast ownrecv db;
  setCogTypes(uint8[] = [0 * 4]) required broadcast ownrecv db;
  setCogParts(uint32[] = [0 * 4]) required broadcast ownrecv db;
  setCogMerits(uint16[] = [0 * 4]) required ownrecv db;
  setCogIndex(int8) broadcast ram;
  setDisguisePageFlag(int8) ownrecv;
  setSosPageFlag(int8) ownrecv;
  setHouseId(uint32 = 0) required ownrecv db;
  setQuests(uint32[] = []) required broadcast ownrecv db;
  setQuestHistory(uint16[] = []) required ownrecv db;
  setRewardHistory(uint8 = 0, uint16[] = []) required ownrecv db;
  setQuestCarryLimit(uint8 = 1) required ownrecv db;
  requestDeleteQuest(uint32[]) ownsend airecv;
  setCheesyEffect(int16 = 0, uint32 = 0, uint32 = 0) required broadcast ownrecv db;
  setGhostMode(uint8) broadcast ownrecv ram;
  setPosIndex(uint8 = 0) required ownrecv db;
  setFishCollection(uint8[] = [], uint8[] = [], uint16[] = []) required ownrecv db;
  setMaxFishTank(uint8 = 20) required ownrecv db;
  setFishTank(uint8[] = [], uint8[] = [], uint16[] = []) required ownrecv db;
  setFishingRod(uint8 = 0) required broadcast ownrecv db;
  setFishingTrophies(uint8[] = []) required ownrecv db;
  setFlowerCollection(uint8[] = [], uint8[] = []) required ownrecv db;
  setFlowerBasket(uint8[] = [], uint8[] = []) required ownrecv db;
  setMaxFlowerBasket(uint8 = 20) required ownrecv db;
  setGardenTrophies(uint8[] = []) required ownrecv db;
  setShovel(uint8 = 0) required broadcast ownrecv db;
  setShovelSkill(uint32 = 0) required ownrecv db;
  setWateringCan(uint8 = 0) required broadcast ownrecv db;
  setWateringCanSkill(uint32 = 0) required ownrecv db;
  promoteShovel(uint8) ownrecv;
  promoteWateringCan(uint8) ownrecv;
  reactivateWater() ownrecv;
  presentPie(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int32) broadcast ownsend;
  tossPie(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, uint8, uint8, int32) broadcast ownsend;
  pieSplat(int16/10, int16/10, int16/10, uint8, uint8, int32) broadcast ownsend;
  setPieType(uint8) broadcast ownrecv ram;
  setNumPies(uint16) broadcast ownrecv ram;
  catalogGenClothes(uint32) broadcast ownrecv;
  catalogGenAccessories(uint32) broadcast ownrecv;
  setPetId(uint32 = 0) required broadcast ownrecv db;
  setPetMovie(uint32, uint8) ownsend airecv;
  setPetTutorialDone(uint8 = 0) required ownsend airecv db;
  setFishBingoTutorialDone(uint8 = 0) required ownsend airecv db;
  setFishBingoMarkTutorialDone(uint8 = 0) required ownsend airecv db;
  setKartBodyType(int8 = -1) required broadcast ownrecv db;
  setKartBodyColor(int8 = -1) required broadcast ownrecv db;
  setKartAccessoryColor(int8 = -1) required broadcast ownrecv db;
  setKartEngineBlockType(int8 = -1) required broadcast ownrecv db;
  setKartSpoilerType(int8 = -1) required broadcast ownrecv db;
  setKartFrontWheelWellType(int8 = -1) required broadcast ownrecv db;
  setKartBackWheelWellType(int8 = -1) required broadcast ownrecv db;
  setKartRimType(int8 = -1) required broadcast ownrecv db;
  setKartDecalType(int8 = -1) required broadcast ownrecv db;
  updateKartDNAField(int8, int8) ownsend airecv;
  addOwnedAccessory(int8) ownsend airecv;
  removeOwnedAccessory(int8) ownsend airecv;
  setTickets(uint32 = 200) required broadcast ownrecv db;
  setKartingHistory(uint8 [16] = [0 * 16]) required ownrecv db;
  setKartingTrophies(uint8 [33] = [0 * 33]) required ownrecv db;
  setKartingPersonalBest(uint32/1000 [6] = [0 * 6]) required ownrecv db;
  setKartingPersonalBest2(uint32/1000 [12] = [0 * 12]) required ownrecv db;
  setKartAccessoriesOwned(int8 [16] = [-1 * 16]) required broadcast ownrecv db;
  setCurrentKart(uint32) broadcast ownrecv ram;
  squish(uint8) ownsend airecv;
  announceBingo() broadcast ownrecv;
  trickOrTreatTargetMet(uint32) ownrecv;
  trickOrTreatMilestoneMet() ownrecv;
  winterCarolingTargetMet(uint32) ownrecv;
  setCogSummonsEarned(uint8[] = [0 * 32]) required ownrecv db;
  reqCogSummons(char [0-256], uint32) ownsend airecv;
  cogSummonsResponse(string, uint32, uint32) ownrecv;
  reqUseSpecial(int32) ownsend airecv;
  useSpecialResponse(string) ownrecv;
  setGardenStarted(uint8 = 0) required ownrecv db;
  sendToGolfCourse(uint32) ownrecv;
  setGolfHistory(uint16 [18] = [0 * 18]) required ownrecv db;
  setPackedGolfHoleBest(uint8 [18] = [0 * 18]) required ownrecv db;
  setGolfCourseBest(uint8 [3] = [0 * 3]) required ownrecv db;
  setUnlimitedSwing(uint8) broadcast ownrecv ram;
  logSuspiciousEvent(char [0-1024]) ownsend airecv;
  logMessage(char [0-1024]) ownsend airecv;
  forceLogoutWithNotify() ownrecv;
  setPinkSlips(uint8 = 0) required ownrecv db;
  setNametagStyle(uint8 = 0) broadcast required ram db;
  setMail(simpleMail []) ownrecv;
  setNumMailItems(uint32) airecv;
  setSimpleMailNotify(uint8) ownrecv airecv;
  setInvites(invite []) ownrecv airecv ram;
  setPartiesInvitedTo(party []) ownrecv airecv ram;
  setHostedParties(party []) ownrecv airecv ram;
  setPartyReplies(repliesForOneParty []) ownrecv airecv ram;
  updateInvite(uint64, uint8) ownrecv airecv;
  updateReply(uint64, uint64, uint8) ownrecv airecv;
  setPartyCanStart(uint64) ownrecv airecv;
  setPartyStatus(uint64, uint8) ownrecv airecv;
  announcePartyStarted(uint64) ownrecv;
  setNeverStartedPartyRefunded(uint64, int8, uint16) ownrecv;
  setDISLname(string) ram;
  setDISLid(uint32) ram db airecv;
  toggleSleep() ownrecv;
};

dclass DistributedCCharBase : DistributedObject {
  setChat(uint32, uint32, uint32) broadcast;
  fadeAway() broadcast;
  setWalk(string, string, int16) required broadcast ram;
  avatarEnter() airecv clsend;
  avatarExit() airecv clsend;
  setNearbyAvatarChat(char [0-1024]) airecv clsend;
  setNearbyAvatarSC(uint16) airecv clsend;
  setNearbyAvatarSCCustom(uint16) airecv clsend;
  setNearbyAvatarSCToontask(uint32, uint32, uint32, uint8) airecv clsend;
};

dclass DistributedMickey : DistributedCCharBase {
};

dclass DistributedVampireMickey : DistributedMickey {
};

dclass DistributedWitchMinnie : DistributedMickey {
};

dclass DistributedMinnie : DistributedCCharBase {
};

dclass DistributedGoofy : DistributedCCharBase {
};

dclass DistributedDaisy : DistributedCCharBase {
};

dclass DistributedSockHopDaisy : DistributedDaisy {
};

dclass DistributedChip : DistributedCCharBase {
};

dclass DistributedPoliceChip : DistributedChip {
};

dclass DistributedDale : DistributedCCharBase {
  setFollowChip(string, string, int16, int16/100, int16/100) broadcast ram;
  setChipId(uint32) required broadcast ram;
};

dclass DistributedJailbirdDale : DistributedDale {
};

dclass DistributedDonald : DistributedCCharBase {
};

dclass DistributedFrankenDonald : DistributedDonald {
};

dclass DistributedDonaldDock : DistributedCCharBase {
};

dclass DistributedPluto : DistributedCCharBase {
};

dclass DistributedWesternPluto : DistributedPluto {
};

dclass DistributedGoofySpeedway : DistributedCCharBase {
};

dclass DistributedSuperGoofy : DistributedGoofySpeedway {
};

dclass DistributedPartyGate : DistributedObject {
  getPartyList(uint32) airecv clsend;
  partyChoiceRequest(uint32, uint64, uint64) airecv clsend;
  listAllPublicParties(publicPartyInfo []);
  partyRequestDenied(uint8);
  setParty(publicPartyInfo);
};

dclass DistributedTrolley : DistributedObject {
  setState(string, int16) broadcast ram;
  fillSlot0(uint32) broadcast ram;
  fillSlot1(uint32) broadcast ram;
  fillSlot2(uint32) broadcast ram;
  fillSlot3(uint32) broadcast ram;
  emptySlot0(uint32, int16) broadcast ram;
  emptySlot1(uint32, int16) broadcast ram;
  emptySlot2(uint32, int16) broadcast ram;
  emptySlot3(uint32, int16) broadcast ram;
  requestBoard() airecv clsend;
  rejectBoard(uint32);
  requestExit() airecv clsend;
  setMinigameZone(uint32, uint16);
};

dclass DistributedSuitPlanner : DistributedObject {
  setZoneId(uint32) required broadcast ram;
  suitListQuery() airecv clsend;
  suitListResponse(uint8[]);
  buildingListQuery() airecv clsend;
  buildingListResponse(uint8[]);
};

dclass DistributedSuitBase : DistributedObject {
  denyBattle();
  setDNAString(blob) required broadcast ram;
  setLevelDist(int16) required broadcast ram;
  setBrushOff(int16) broadcast;
  setSkelecog(uint8) required broadcast ram;
  setSkeleRevives(uint8) required broadcast ram;
  setHP(int16) required broadcast ram;
};

dclass DistributedSuit : DistributedSuitBase {
  requestBattle(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) airecv clsend;
  setSPDoId(uint32) required broadcast ram;
  setPathEndpoints(uint16, uint16, uint16, uint16) required broadcast ram;
  setPathPosition(uint16, int16) required broadcast ram;
  setPathState(int8) required broadcast ram;
  debugSuitPosition(int16/10, int16, int16/10, int16/10, int16) broadcast;
};

dclass DistributedTutorialSuit : DistributedSuitBase {
  requestBattle(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) airecv clsend;
};

dclass DistributedFactorySuit : DistributedSuitBase {
  setLevelDoId(uint32) required broadcast ram;
  setCogId(uint32) required broadcast ram;
  setReserve(uint8) required broadcast ram;
  requestBattle(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) airecv clsend;
  setAlert(uint32) airecv clsend;
  setConfrontToon(uint32) broadcast;
  setStrayed() airecv clsend;
  setReturn() broadcast;
};

dclass DistributedMintSuit : DistributedFactorySuit {
};

dclass DistributedStageSuit : DistributedFactorySuit {
};

dclass DistributedBossCog : DistributedNode {
  setDNAString(blob) required broadcast db;
  setToonIds(uint32[], uint32[], uint32[]) broadcast ram;
  setBattleIds(uint8, uint32, uint32) broadcast ram;
  setArenaSide(uint8) broadcast ram;
  avatarEnter() airecv clsend;
  avatarExit() airecv clsend;
  avatarNearEnter() airecv clsend;
  avatarNearExit() airecv clsend;
  toonDied(uint32) broadcast;
  setBattleExperience(int32, int16[], int16[], uint32[], int16[], int16[], int16[], int16[], uint32[], int32, int16[], int16[], uint32[], int16[], int16[], int16[], int16[], uint32[], int32, int16[], int16[], uint32[], int16[], int16[], int16[], int16[], uint32[], int32, int16[], int16[], uint32[], int16[], int16[], int16[], int16[], uint32[], int32, int16[], int16[], uint32[], int16[], int16[], int16[], int16[], uint32[], int32, int16[], int16[], uint32[], int16[], int16[], int16[], int16[], uint32[], int32, int16[], int16[], uint32[], int16[], int16[], int16[], int16[], uint32[], int32, int16[], int16[], uint32[], int16[], int16[], int16[], int16[], uint32[], uint8[], int16[], uint32[]) required broadcast ram;
  zapToon(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int8/100, int8/100, uint8, int16) airecv clsend;
  showZapToon(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, uint8, int16) broadcast;
  setAttackCode(uint8, uint32) broadcast;
};

dclass DistributedSellbotBoss : DistributedBossCog {
  setCagedToonNpcId(uint32) required broadcast ram;
  setDooberIds(uint32[]) broadcast ram;
  setBossDamage(uint16, uint8, int16) broadcast ram;
  setState(string) broadcast ram;
  hitBoss(uint8) airecv clsend;
  hitBossInsides() airecv clsend;
  hitToon(uint32) airecv clsend;
  finalPieSplat() airecv clsend;
  touchCage() airecv clsend;
  doStrafe(uint8, uint8) broadcast;
  cagedToonBattleThree(uint16, uint32) broadcast;
  toonPromoted(uint8(0-1));
};

dclass DistributedCashbotBoss : DistributedBossCog {
  setState(string) broadcast ram;
  setBossDamage(uint16) broadcast ram;
  setRewardId(uint16) broadcast ram;
  applyReward() airecv clsend;
};

struct LinkPosition {
  int16/100 x;
  int16/100 y;
  int16/100 z;
};

dclass DistributedCashbotBossCrane : DistributedObject {
  setBossCogId(uint32) required broadcast ram;
  setIndex(uint8) required broadcast ram;
  setState(char, uint32) broadcast ram;
  requestControl() airecv clsend;
  requestFree() airecv clsend;
  clearSmoothing(int8) broadcast clsend;
  setCablePos(uint8, int16/100, uint16%360/100, LinkPosition [3], int16) broadcast clsend;
};

dclass DistributedCashbotBossObject : DistributedObject {
  setBossCogId(uint32) required broadcast ram;
  setObjectState(char, uint32, uint32) broadcast ram;
  requestGrab() airecv clsend;
  rejectGrab();
  requestDrop() airecv clsend;
  hitFloor() clsend;
  requestFree(int16/10, int16/10, int16/10, uint16%360/100) airecv clsend;
  hitBoss(uint16/255) airecv clsend;
  setX(int16/10) broadcast ram clsend airecv;
  setY(int16/10) broadcast ram clsend airecv;
  setZ(int16/10) broadcast ram clsend airecv;
  setH(int16%360/10) broadcast ram clsend airecv;
  setP(int16%360/10) broadcast ram clsend airecv;
  setR(int16%360/10) broadcast ram clsend airecv;
  setPos : setX, setY, setZ;
  setHpr : setH, setP, setR;
  setPosHpr : setX, setY, setZ, setH, setP, setR;
  setXY : setX, setY;
  setXZ : setX, setZ;
  setXYH : setX, setY, setH;
  setXYZH : setX, setY, setZ, setH;
  setComponentL(uint64) broadcast ram clsend airecv;
  setComponentX(int16/10) broadcast ram clsend airecv;
  setComponentY(int16/10) broadcast ram clsend airecv;
  setComponentZ(int16/10) broadcast ram clsend airecv;
  setComponentH(int16%360/10) broadcast ram clsend airecv;
  setComponentP(int16%360/10) broadcast ram clsend airecv;
  setComponentR(int16%360/10) broadcast ram clsend airecv;
  setComponentT(int16) broadcast ram clsend airecv;
  setSmStop : setComponentT;
  setSmH : setComponentH, setComponentT;
  setSmZ : setComponentZ, setComponentT;
  setSmXY : setComponentX, setComponentY, setComponentT;
  setSmXZ : setComponentX, setComponentZ, setComponentT;
  setSmPos : setComponentX, setComponentY, setComponentZ, setComponentT;
  setSmHpr : setComponentH, setComponentP, setComponentR, setComponentT;
  setSmXYH : setComponentX, setComponentY, setComponentH, setComponentT;
  setSmXYZH : setComponentX, setComponentY, setComponentZ, setComponentH, setComponentT;
  setSmPosHpr : setComponentX, setComponentY, setComponentZ, setComponentH, setComponentP, setComponentR, setComponentT;
  setSmPosHprL : setComponentL, setComponentX, setComponentY, setComponentZ, setComponentH, setComponentP, setComponentR, setComponentT;
  clearSmoothing(int8) broadcast clsend;
};

dclass DistributedCashbotBossSafe : DistributedCashbotBossObject {
  setIndex(uint8) required broadcast ram;
  requestInitial() airecv clsend;
};

dclass DistributedCashbotBossGoon : DistributedCashbotBossObject {
  requestBattle(int16/10) airecv clsend;
  requestStunned(int16/10) airecv clsend;
  setVelocity(uint8/10) broadcast ram;
  setHFov(uint8) broadcast ram;
  setAttackRadius(uint8) broadcast ram;
  setStrength(uint8) broadcast ram;
  setGoonScale(uint8/50) broadcast ram;
  setupGoon : setVelocity, setHFov, setAttackRadius, setStrength, setGoonScale;
  setTarget(int16/10, int16/10, uint16%360/100, int16) broadcast ram;
  destroyGoon() broadcast clsend airecv;
};

dclass DistributedBattleBase : DistributedObject {
  setLevelDoId(uint32) required broadcast ram;
  setBattleCellId(uint32) required broadcast ram;
  setInteractivePropTrackBonus(int8) required broadcast ram;
  setPosition(int16/10, int16/10, int16/10) required broadcast ram;
  setZoneId(uint32) required broadcast ram;
  setInitialSuitPos(int16/10, int16/10, int16/10) required broadcast ram;
  setMembers(uint32[], string, string, string, string, string, uint32[], string, string, string, string, int16) required broadcast ram;
  adjust(int16) broadcast;
  setMovie(int8, uint32[], uint32[], int8, int8, int8, int32, int16[], int16, int16, int16[], int8, int8, int8, int8, int8, int32, int16[], int16, int16, int16[], int8, int8, int8, int8, int8, int32, int16[], int16, int16, int16[], int8, int8, int8, int8, int8, int32, int16[], int16, int16, int16[], int8, int8, int8, int8, int8, int16[], int8, int8, int8, int8, int8, int8, int16[], int8, int8, int8, int8, int8, int8, int16[], int8, int8, int8, int8, int8, int8, int16[], int8, int8, int8) required broadcast ram;
  setChosenToonAttacks(uint32[], int16[], int16[], int32[]) broadcast ram;
  setBattleExperience(int32, int16[], int16[], uint32[], int16[], int16[], int16[], int16[], uint32[], int32, int16[], int16[], uint32[], int16[], int16[], int16[], int16[], uint32[], int32, int16[], int16[], uint32[], int16[], int16[], int16[], int16[], uint32[], int32, int16[], int16[], uint32[], int16[], int16[], int16[], int16[], uint32[], uint8[], int16[], uint32[]) required broadcast ram;
  denyLocalToonJoin();
  setBossBattle(uint8) required broadcast ram;
  setState(string, int16) required broadcast ram;
  faceOffDone() airecv clsend;
  toonRequestJoin(int16/10, int16/10, int16/10) airecv clsend;
  toonRequestRun() airecv clsend;
  toonDied() airecv clsend;
  adjustDone() airecv clsend;
  timeout() airecv clsend;
  movieDone() airecv clsend;
  rewardDone() airecv clsend;
  joinDone(uint32) airecv clsend;
  requestAttack(int8, int8, int32) airecv clsend;
  requestPetProxy(uint32) airecv clsend;
};

dclass DistributedBattle : DistributedBattleBase {
};

dclass DistributedBattleBldg : DistributedBattleBase {
};

dclass DistributedBattleTutorial : DistributedBattle {
};

dclass DistributedLevelBattle : DistributedBattle {
};

dclass DistributedBattleFactory : DistributedLevelBattle {
};

dclass DistributedMintBattle : DistributedLevelBattle {
};

dclass DistributedStageBattle : DistributedLevelBattle {
};

dclass DistributedBattleFinal : DistributedBattleBase {
  setBossCogId(uint32) required broadcast ram;
  setBattleNumber(uint8) required broadcast ram;
  setBattleSide(uint8) required broadcast ram;
};

dclass DistributedBoat : DistributedObject {
  setState(string, int16) required broadcast ram;
};

dclass DistributedButterfly : DistributedObject {
  setArea(int16, int16) required broadcast ram;
  setState(int8, uint8, uint8, uint16/10, int16) required broadcast ram;
  avatarEnter() airecv clsend;
};

dclass DistributedMMPiano : DistributedObject {
  requestSpeedUp() airecv clsend;
  requestChangeDirection() airecv clsend;
  setSpeed(int16/1000, uint16/100, int16) broadcast ram;
  playSpeedUp(uint32) broadcast;
  playChangeDirection(uint32) broadcast;
};

dclass DistributedDGFlower : DistributedObject {
  avatarEnter() airecv clsend;
  avatarExit() airecv clsend;
  setHeight(uint8/10) broadcast ram;
};

dclass DistributedFishingPond : DistributedObject {
  hitTarget(uint32) airecv clsend;
  setArea(uint32) required broadcast ram;
};

dclass DistributedFishingTarget : DistributedNode {
  setPondDoId(uint32) required broadcast ram;
  setState(uint8, int16/10, uint16/100, uint16/10, int16) required broadcast ram;
};

dclass DistributedFishingSpot : DistributedObject {
  setPondDoId(uint32) required broadcast ram;
  setPosHpr(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) required broadcast ram;
  requestEnter() airecv clsend;
  rejectEnter();
  requestExit() airecv clsend;
  setOccupied(uint32) broadcast ram;
  doCast(uint8/255, int16/100) airecv clsend;
  sellFish() airecv clsend;
  sellFishComplete(uint8, uint16);
  setMovie(uint8, uint8, uint16, uint16, uint16, uint8/100, int16/100) broadcast ram;
};

dclass DistributedPondBingoManager : DistributedObject {
  setPondDoId(uint32) required broadcast ram;
  updateGameState(uint32, uint8);
  setCardState(uint16, uint8, uint16, uint32);
  setState(string, int16);
  cardUpdate(uint16, uint8, uint8, uint8) airecv clsend;
  enableBingo();
  handleBingoCall(uint16) airecv clsend;
  setJackpot(uint16);
};

dclass DistributedCannon : DistributedObject {
  setEstateId(uint32) required broadcast ram;
  setTargetId(uint32) required broadcast ram;
  setPosHpr(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) required broadcast ram;
  setActive(uint8) airecv clsend;
  setActiveState(uint8) broadcast ram;
  requestEnter() airecv clsend;
  requestExit() broadcast;
  setMovie(uint8, uint32) broadcast ram;
  setCannonPosition(int32/100, uint32/100) airecv clsend;
  setCannonLit(int32/100, uint32/100) airecv clsend;
  setFired() airecv clsend;
  setLanded() airecv clsend;
  updateCannonPosition(uint32, int32/100, uint32/100) broadcast ram;
  setCannonWillFire(uint32, int32/100, int32/100, uint32/100, int16) broadcast;
  setCannonExit(uint32) broadcast;
  requestBumperMove(int32/100, int32/100, int32/100) airecv clsend;
  setCannonBumperPos(int32/100, int32/100, int32/100) required broadcast ram;
};

dclass DistributedTarget : DistributedObject {
  setPosition(int16/10, int16/10, int16/10) required broadcast ram;
  setState(uint8, uint32/10, uint8) broadcast;
  setReward(uint32) broadcast;
  setResult(uint32) airecv clsend;
  setBonus(int16/10) airecv clsend;
  setCurPinballScore(uint32, int32, int32) clsend airecv;
  setPinballHiScorer(string) broadcast ram;
  setPinballHiScore(int32) broadcast ram;
};

dclass DistributedMinigame : DistributedObject {
  setParticipants(uint32[]) broadcast ram required;
  setTrolleyZone(uint32) broadcast ram required;
  setStartingVotes(uint16[]) broadcast ram required;
  setMetagameRound(int8) broadcast ram required;
  setDifficultyOverrides(int32, int32) broadcast ram required;
  setAvatarJoined() airecv clsend;
  setAvatarReady() airecv clsend;
  setAvatarExited() airecv clsend;
  requestExit() airecv clsend;
  setGameReady() broadcast;
  setGameStart(int16) broadcast;
  setGameExit() broadcast;
  setGameAbort() broadcast;
};

dclass DistributedMinigameTemplate : DistributedMinigame {
};

dclass DistributedRaceGame : DistributedMinigame {
  setTimerStartTime(int16) broadcast;
  setAvatarChoice(uint8) airecv clsend;
  setAvatarChose(uint32) broadcast;
  setChancePositions(uint8[]) broadcast;
  setServerChoices(int8[], uint8[], int8[]) broadcast;
};

dclass DistributedCannonGame : DistributedMinigame {
  setCannonPosition(int32/100, uint32/100) airecv clsend;
  setCannonLit(int32/100, uint32/100) airecv clsend;
  updateCannonPosition(uint32, int32/100, uint32/100) broadcast;
  setCannonWillFire(uint32, int32/100, int32/100, uint32/100) broadcast;
  setToonWillLandInWater(int32/100) airecv clsend;
  announceToonWillLandInWater(uint32, int32/100) broadcast;
};

dclass DistributedPhotoGame : DistributedMinigame {
  newClientPhotoScore(uint8, char [0-256], uint32/100) airecv clsend;
  newAIPhotoScore(uint32, uint8, uint32/100) broadcast;
  filmOut() airecv clsend;
};

dclass DistributedPatternGame : DistributedMinigame {
  reportPlayerReady() airecv clsend;
  setPattern(uint8[]) broadcast;
  reportPlayerPattern(uint8[], uint16/1000) airecv clsend;
  setPlayerPatterns(uint8[], uint8[], uint8[], uint8[], uint32) broadcast;
  reportButtonPress(uint8, uint8) airecv clsend;
  remoteButtonPressed(uint32, uint8, uint8) broadcast;
};

dclass DistributedRingGame : DistributedMinigame {
  setTimeBase(int16) broadcast ram required;
  setColorIndices(int8, int8, int8, int8) broadcast ram required;
  setToonGotRing(uint8) airecv clsend;
  setRingGroupResults(uint8) broadcast;
};

dclass DistributedTagGame : DistributedMinigame {
  tag(uint32) airecv clsend;
  setIt(uint32) broadcast;
  setTreasureScore(uint16[]) broadcast;
};

dclass DistributedMazeGame : DistributedMinigame {
  claimTreasure(uint32) airecv clsend;
  setTreasureGrabbed(uint32, uint32) broadcast;
  allTreasuresTaken() broadcast;
  hitBySuit(uint32, int16) clsend broadcast;
};

dclass DistributedTugOfWarGame : DistributedMinigame {
  reportPlayerReady(uint8) airecv clsend;
  sendGoSignal(uint8[]) broadcast;
  sendStopSignal(uint32[], uint32[], uint32[]) broadcast;
  sendGameType(uint8, uint8) broadcast;
  reportEndOfContest(uint8) airecv clsend;
  sendNewAvIdList(uint32[]) airecv clsend;
  reportCurrentKeyRate(uint32, int16/100) airecv clsend;
  sendCurrentPosition(uint32[], int16/1000[]) broadcast;
  sendSuitPosition(int32/1000) broadcast;
  remoteKeyRateUpdate(uint32, uint32) broadcast;
};

dclass DistributedCatchGame : DistributedMinigame {
  claimCatch(uint32, uint32) airecv clsend;
  setObjectCaught(uint32, uint32) broadcast;
  hitBySuit(uint32, int16) clsend broadcast;
  reportDone() airecv clsend;
  setEveryoneDone() broadcast;
};

dclass DistributedDivingGame : DistributedMinigame {
  pickupTreasure(uint32) airecv clsend;
  setTreasureGrabbed(uint32, uint32) broadcast;
  handleFishCollision(uint32, uint32, uint32, char [0-256]) airecv clsend;
  performFishCollision(uint32, uint32, uint32, int16) broadcast;
  handleCrabCollision(uint32, char [0-256]) airecv clsend;
  performCrabCollision(uint32, int16) broadcast;
  setTreasureDropped(uint32, int16) broadcast;
  fishSpawn(int16, uint32, uint32, uint16) broadcast;
  removeFish(uint32) airecv clsend;
  getCrabMoving(uint32, int16, int8) airecv clsend;
  setCrabMoving(uint32, int16, int8, int8, int16, int8) broadcast;
  treasureRecovered() airecv clsend;
  incrementScore(uint32, uint32, int16) broadcast;
};

dclass DistributedTargetGame : DistributedMinigame {
  setTimeBase(int16) broadcast ram required;
  setToonGotRing(uint8) airecv clsend;
  setRingGroupResults(uint8) broadcast;
  setPlayerDone() airecv clsend;
  setScore(int32, int32) airecv clsend;
  setTargetSeed(uint32) broadcast ram;
  setRoundDone() broadcast;
  setSingleScore(uint16, uint32) broadcast;
  setGameDone() broadcast;
};

dclass EstateManager : DistributedObject {
  startAprilFools() broadcast;
  stopAprilFools() broadcast;
  getEstateZone(uint32, char [0-256]) airecv clsend;
  setEstateZone(uint32, uint32);
  setAvHouseId(uint32, uint32[]) broadcast;
  sendAvToPlayground(uint32, uint8);
  exitEstate() airecv clsend;
  removeFriend(uint32, uint32) airecv clsend;
};

struct decorItem {
  uint8 decorType;
  uint8 dataByte[];
  uint32 dataWord[];
};

struct lawnItem {
  uint8 type;
  uint8 hardPoint;
  int8 waterLevel;
  int8 growthLevel;
  uint16 optional;
};

dclass DistributedEstate : DistributedObject {
  string DcObjectType db;
  setEstateReady() broadcast;
  setClientReady() airecv clsend;
  setEstateType(uint8) required broadcast db;
  setClosestHouse(uint8) airecv clsend;
  setTreasureIds(uint32[]) broadcast ram;
  requestServerTime() airecv clsend;
  setServerTime(uint32);
  setDawnTime(uint32) required broadcast ram;
  placeOnGround(uint32) broadcast ram;
  setDecorData(lawnItem []) required airecv db;
  setLastEpochTimeStamp(uint32) required airecv db;
  setRentalTimeStamp(uint32) required airecv db;
  setRentalType(uint8) required airecv db;
  setSlot0ToonId(uint32) required airecv db;
  setSlot0Items(lawnItem []) required airecv db;
  setSlot1ToonId(uint32) required airecv db;
  setSlot1Items(lawnItem []) required airecv db;
  setSlot2ToonId(uint32) required airecv db;
  setSlot2Items(lawnItem []) required airecv db;
  setSlot3ToonId(uint32) required airecv db;
  setSlot3Items(lawnItem []) required airecv db;
  setSlot4ToonId(uint32) required airecv db;
  setSlot4Items(lawnItem []) required airecv db;
  setSlot5ToonId(uint32) required airecv db;
  setSlot5Items(lawnItem []) required airecv db;
  setIdList(uint32 []) broadcast ram;
  completeFlowerSale(uint8) airecv clsend;
  awardedTrophy(uint32) broadcast;
  setClouds(uint8) required broadcast ram;
  cannonsOver() broadcast;
  gameTableOver() broadcast;
};

dclass DistributedHouse : DistributedObject {
  string DcObjectType db;
  setHousePos(uint8) required broadcast;
  setHouseType(uint8) required broadcast db;
  setGardenPos(uint8) required broadcast db;
  setAvatarId(uint32) required broadcast db;
  setName(string) required broadcast db;
  setColor(uint8) required broadcast db;
  setAtticItems(blob) required db;
  setInteriorItems(blob) required db;
  setAtticWallpaper(blob) required db;
  setInteriorWallpaper(blob) required db;
  setAtticWindows(blob) required db;
  setInteriorWindows(blob) required db;
  setDeletedItems(blob) required db;
  setCannonEnabled(uint8) required;
  setHouseReady() broadcast ram;
};

dclass DistributedHouseInterior : DistributedObject {
  setHouseId(uint32) required broadcast ram;
  setHouseIndex(uint8) required broadcast ram;
  setWallpaper(blob) required broadcast ram;
  setWindows(blob) required broadcast ram;
};

dclass DistributedGarden : DistributedObject {
  sendNewProp(uint8, int16/10, int16/10, int16/10) broadcast;
};

dclass DistributedParty : DistributedObject {
  setPartyClockInfo(uint8, uint8, uint8) required broadcast;
  setInviteeIds(uint32[]) required broadcast;
  setPartyState(bool) required broadcast;
  setPartyInfoTuple(party) required broadcast;
  setAvIdsAtParty(uint32 []) required broadcast;
  setPartyStartedTime(string) required broadcast;
  setHostName(string) required broadcast;
  avIdEnteredParty(uint32) clsend airecv;
};

dclass DistributedPartyActivity : DistributedObject {
  setX(int16/10) broadcast required;
  setY(int16/10) broadcast required;
  setH(uint16%360/100) broadcast required;
  setPartyDoId(uint32) broadcast required;
  toonJoinRequest() airecv clsend;
  toonExitRequest() airecv clsend;
  toonExitDemand() airecv clsend;
  toonReady() airecv clsend;
  joinRequestDenied(uint8);
  exitRequestDenied(uint8);
  setToonsPlaying(uint32 []) broadcast ram;
  setState(string, int16) broadcast ram;
  showJellybeanReward(uint32, uint8, string);
};

dclass DistributedPartyTeamActivity : DistributedPartyActivity {
  toonJoinRequest(uint8(0-1)) airecv clsend;
  toonExitRequest(uint8(0-1)) airecv clsend;
  toonSwitchTeamRequest() airecv clsend;
  setPlayersPerTeam(uint8, uint8) broadcast required;
  setDuration(uint8) broadcast required;
  setCanSwitchTeams(bool) broadcast required;
  setState(string, int16, uint32) broadcast ram;
  setToonsPlaying(uint32 [0-8], uint32 [0-8]) required broadcast ram;
  setAdvantage(uint16/100);
  switchTeamRequestDenied(uint8);
};

struct CatchGeneration {
  uint32 generation;
  uint32 timestamp;
  int8 numPlayers;
};

dclass DistributedPartyCatchActivity : DistributedPartyActivity {
  setStartTimestamp(uint32) required broadcast ram;
  setGenerations(CatchGeneration []) required broadcast ram;
  requestActivityStart() airecv clsend;
  startRequestResponse(uint8);
  claimCatch(uint32, uint32, uint32) airecv clsend;
  setObjectCaught(uint32, uint32, uint32) broadcast;
};

dclass DistributedPartyWinterCatchActivity : DistributedPartyCatchActivity {
};

dclass DistributedPartyCogActivity : DistributedPartyTeamActivity {
  pieThrow(uint32, int32, int32/100, int32/100, int32/100, int32/100, uint8) clsend broadcast;
  pieHitsToon(uint32, int32, int32/100, int32/100, int32/100) clsend broadcast;
  pieHitsCog(uint32, int32, int8(0-2), int32/100, int32/100, int32/100, int32, bool) clsend broadcast airecv;
  setCogDistances(int8/100 [3]) broadcast ram;
  setHighScore(string, uint16) broadcast ram;
};

dclass DistributedPartyWinterCogActivity : DistributedPartyCogActivity {
};

dclass DistributedPartyDanceActivityBase : DistributedPartyActivity {
  updateDancingToon(uint8, char [0-256]) clsend airecv;
  setToonsPlaying(uint32 [], uint16%360/100 []) broadcast ram;
  setDancingToonState(uint32, uint8, string) broadcast;
};

dclass DistributedPartyDanceActivity : DistributedPartyDanceActivityBase {
};

dclass DistributedPartyDance20Activity : DistributedPartyDanceActivityBase {
};

dclass DistributedPartyValentineDanceActivity : DistributedPartyDanceActivityBase {
};

dclass DistributedPartyValentineDance20Activity : DistributedPartyDanceActivityBase {
};

dclass DistributedPartyJukeboxActivityBase : DistributedPartyActivity {
  setNextSong(jukeboxSongInfo) clsend airecv;
  setSongPlaying(jukeboxSongInfo, uint32) broadcast ram;
  queuedSongsRequest() clsend airecv;
  queuedSongsResponse(jukeboxSongInfo [], int16);
  setSongInQueue(jukeboxSongInfo);
  moveHostSongToTopRequest() clsend airecv;
  moveHostSongToTop();
};

dclass DistributedPartyJukeboxActivity : DistributedPartyJukeboxActivityBase {
};

dclass DistributedPartyJukebox40Activity : DistributedPartyJukeboxActivityBase {
};

dclass DistributedPartyValentineJukeboxActivity : DistributedPartyJukeboxActivityBase {
};

dclass DistributedPartyValentineJukebox40Activity : DistributedPartyJukeboxActivityBase {
};

dclass DistributedPartyCannonActivity : DistributedPartyActivity {
  setMovie(uint8, uint32) broadcast;
  setLanded(uint32) airecv broadcast clsend;
  setCannonWillFire(uint32, int32/100, uint32/100) broadcast;
  cloudsColorRequest() clsend airecv;
  cloudsColorResponse(partyCloudColor []);
  requestCloudHit(uint16, uint8/100, uint8/100, uint8/100) clsend airecv;
  setCloudHit(uint16, uint8/100, uint8/100, uint8/100) broadcast;
  setToonTrajectoryAi(int32, int32/100, int32/100, int32/100, int32/100, int32/100, int32/100, int32/100, int32/100, int32/100) airecv clsend;
  setToonTrajectory(uint32, int32, int32/100, int32/100, int32/100, int32/100, int32/100, int32/100, int32/100, int32/100, int32/100) broadcast;
  updateToonTrajectoryStartVelAi(int32/100, int32/100, int32/100) airecv clsend;
  updateToonTrajectoryStartVel(uint32, int32/100, int32/100, int32/100) broadcast;
};

dclass DistributedPartyCannon : DistributedObject {
  setActivityDoId(uint64) required broadcast ram;
  setPosHpr(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) required broadcast ram;
  requestEnter() airecv clsend;
  requestExit() broadcast;
  setMovie(uint8, uint32) broadcast ram;
  setCannonPosition(int32/100, uint32/100) airecv clsend;
  setCannonLit(int32/100, uint32/100) airecv clsend;
  setFired() airecv clsend;
  setLanded(uint32) airecv clsend;
  updateCannonPosition(uint32, int32/100, uint32/100) broadcast ram;
  setCannonExit(uint32) broadcast;
  setTimeout() clsend airecv;
};

dclass DistributedPartyFireworksActivity : DistributedPartyActivity {
  setEventId(uint8) required broadcast;
  setShowStyle(uint8) required broadcast;
};

dclass DistributedPartyTrampolineActivity : DistributedPartyActivity {
  awardBeans(uint8, uint16) clsend airecv;
  setBestHeightInfo(string, uint16) broadcast ram;
  reportHeightInformation(uint16) airecv clsend;
  leaveTrampoline() broadcast;
  requestAnim(char [0-256]) clsend airecv;
  requestAnimEcho(string) broadcast;
  removeBeans(int8 []) clsend airecv;
  removeBeansEcho(int8 []) broadcast;
};

dclass DistributedPartyValentineTrampolineActivity : DistributedPartyTrampolineActivity {
};

dclass DistributedPartyVictoryTrampolineActivity : DistributedPartyTrampolineActivity {
};

dclass DistributedPartyWinterTrampolineActivity : DistributedPartyTrampolineActivity {
};

dclass DistributedPartyTugOfWarActivity : DistributedPartyTeamActivity {
  reportKeyRateForce(uint32, int16/100) airecv clsend;
  reportFallIn(uint8) airecv clsend;
  setToonsPlaying(uint32 [0-4], uint32 [0-4]) required broadcast ram;
  updateToonKeyRate(uint32, uint32) broadcast;
  updateToonPositions(int16/1000) broadcast;
};

dclass DeleteManager : DistributedObject {
  setInventory(blob) airecv clsend;
};

dclass ToontownMagicWordManager : DistributedObject {
  requestExecuteMagicWord(int8, int8, int16, uint32, string) airecv clsend;
  executeMagicWord(string, string, uint32[], blob, int8, int8, int16, uint32);
  generateResponse(string, string, blob, string, int8, int8, int16, uint32, string);
  teleportResponse(string loaderId, string whereId, string how, uint32 hoodId, uint32 zoneId, uint32 avId);
};

struct weeklyCalendarHoliday {
  uint8 holidayId;
  uint8 dayOfTheWeek;
};

struct yearlyCalendarHoliday {
  uint8 holidayId;
  uint8[] firstStartTime;
  uint8[] lastEndTime;
};

struct oncelyCalendarHoliday {
  uint8 holidayId;
  uint16[] firstStartTime;
  uint16[] lastEndTime;
};

struct relativelyCalendarHoliday {
  uint8 holidayId;
  uint16[] firstStartTime;
  uint16[] lastEndTime;
};

struct startAndEndTime {
  uint16[] startTime;
  uint16[] endTime;
};

struct multipleStartHoliday {
  uint8 holidayId;
  startAndEndTime times[];
};

dclass NewsManager : DistributedObject {
  setPopulation(uint32) broadcast ram;
  setBingoWin(uint32) broadcast ram;
  setBingoStart() broadcast;
  setBingoEnd() broadcast;
  setCircuitRaceStart() broadcast;
  setCircuitRaceEnd() broadcast;
  setTrolleyHolidayStart() broadcast;
  setTrolleyHolidayEnd() broadcast;
  setTrolleyWeekendStart() broadcast;
  setTrolleyWeekendEnd() broadcast;
  setRoamingTrialerWeekendStart() broadcast;
  setRoamingTrialerWeekendEnd() broadcast;
  setInvasionStatus(uint8, string, uint32, uint8) broadcast;
  setHolidayIdList(uint32[]) broadcast ram;
  holidayNotify() broadcast;
  setWeeklyCalendarHolidays(weeklyCalendarHoliday []) required broadcast ram;
  setYearlyCalendarHolidays(yearlyCalendarHoliday []) required broadcast ram;
  setOncelyCalendarHolidays(oncelyCalendarHoliday []) required broadcast ram;
  setRelativelyCalendarHolidays(relativelyCalendarHoliday []) required broadcast ram;
  setMultipleStartHolidays(multipleStartHoliday []) required broadcast ram;
  sendSystemMessage(string, uint8) broadcast ram;
};

dclass PurchaseManager : DistributedObject {
  setPlayerIds(uint32, uint32, uint32, uint32) required broadcast ram;
  setNewbieIds(uint32[]) required broadcast ram;
  setMinigamePoints(uint8, uint8, uint8, uint8) required broadcast ram;
  setPlayerMoney(uint8, uint8, uint8, uint8) required broadcast ram;
  setPlayerStates(uint8, uint8, uint8, uint8) required broadcast ram;
  setCountdown(int16) required broadcast ram;
  setMetagameRound(int8) required broadcast ram;
  setVotesArray(int16[]) required broadcast ram;
  requestExit() airecv clsend;
  requestPlayAgain() airecv clsend;
  setInventory(blob, int16, uint8) airecv clsend;
  setPurchaseExit() broadcast;
};

dclass NewbiePurchaseManager : PurchaseManager {
  setOwnedNewbieId(uint32) required broadcast ram;
};

dclass SafeZoneManager : DistributedObject {
  enterSafeZone() airecv clsend;
  exitSafeZone() airecv clsend;
};

dclass TutorialManager : DistributedObject {
  requestTutorial() airecv clsend;
  rejectTutorial() airecv clsend;
  requestSkipTutorial() airecv clsend;
  skipTutorialResponse(uint8);
  enterTutorial(uint32, uint32, uint32, uint32);
  allDone() airecv clsend;
  toonArrived() airecv clsend;
};

dclass CatalogManager : DistributedObject {
  startCatalog() airecv clsend;
};

dclass DistributedMyTest : DistributedObject {
  setMyTest(uint16) broadcast;
};

dclass DistributedTreasure : DistributedObject {
  setPosition(int16/10, int16/10, int16/10) required broadcast ram;
  requestGrab() airecv clsend;
  setGrab(uint32) broadcast ram;
  setReject() broadcast;
};

dclass DistributedDDTreasure : DistributedTreasure {
};

dclass DistributedDGTreasure : DistributedTreasure {
};

dclass DistributedDLTreasure : DistributedTreasure {
};

dclass DistributedTTTreasure : DistributedTreasure {
};

dclass DistributedBRTreasure : DistributedTreasure {
};

dclass DistributedMMTreasure : DistributedTreasure {
};

dclass DistributedOZTreasure : DistributedTreasure {
};

dclass DistributedETreasure : DistributedTreasure {
};

dclass DistributedEFlyingTreasure : DistributedTreasure {
};

dclass DistributedTagTreasure : DistributedTreasure {
};

dclass DistributedCashbotBossTreasure : DistributedTreasure {
  setGoonId(uint32) required broadcast ram;
  setFinalPosition(int16/10, int16/10, int16/10) required broadcast ram;
  setStyle(uint16) required broadcast ram;
};

dclass DistributedLargeBlobSender : DistributedObject {
  setMode(uint8) required broadcast ram;
  setTargetAvId(uint32) required broadcast ram;
  setChunk(blob);
  setFilename(string);
  setAck() airecv clsend;
};

dclass DistributedLevel : DistributedObject {
  setLevelZoneId(uint32) required broadcast ram;
  setPlayerIds(uint32[]) required broadcast ram;
  setEntranceId(uint8) required broadcast ram;
  setZoneIds(uint32[]) broadcast ram;
  setStartTimestamp(int32) broadcast ram;
  setOuch(uint8) airecv clsend;
  requestCurrentLevelSpec(string, string) airecv clsend;
  setSpecDeny(blob);
  setSpecSenderDoId(uint32);
  setAttribChange(uint32, blob, blob, blob) broadcast;
};

dclass DistributedEntity : DistributedObject {
  setLevelDoId(uint32) required broadcast ram;
  setEntId(uint32) required broadcast ram;
};

dclass DistributedInteractiveEntity : DistributedEntity {
  setAvatarInteract(uint32) required broadcast ram;
  requestInteract() airecv clsend;
  rejectInteract();
  requestExit() airecv clsend;
  avatarExit(uint32) broadcast;
  setState(string, int32) required broadcast ram;
};

dclass DistributedTrophyMgr : DistributedObject {
  requestTrophyScore() airecv clsend;
};

dclass DistributedBuilding : DistributedObject {
  setBlock(uint16, uint32) required broadcast ram;
  setSuitData(int8, int8, int8) required broadcast ram;
  setVictorList(uint32[]) broadcast ram;
  setState(string, int16) broadcast ram;
  setVictorReady() airecv clsend;
};

dclass DistributedAnimBuilding : DistributedBuilding {
};

struct savedBy {
  uint32 avId;
  string name;
  blob dna;
}

dclass DistributedToonInterior : DistributedObject {
  setZoneIdAndBlock(uint32, uint16) required broadcast ram;
  setSavedBy(savedBy[]) required broadcast ram;
  setState(string, int16) required broadcast ram;
};

dclass DistributedToonHallInterior : DistributedToonInterior {
};

dclass DistributedSuitInterior : DistributedObject {
  setZoneId(uint32) required broadcast ram;
  setExtZoneId(uint32) required broadcast ram;
  setDistBldgDoId(uint32) required broadcast ram;
  setNumFloors(int8) required broadcast ram;
  setToons(uint32[], uint16) broadcast ram;
  setSuits(uint32[], uint32[], uint16[]) broadcast ram;
  setState(string, int16) required broadcast ram;
  setAvatarJoined() airecv clsend;
  elevatorDone() airecv clsend;
  reserveJoinDone() airecv clsend;
};

dclass DistributedCogdoBarrel : DistributedObject {
  requestGrab() airecv clsend;
  setIndex(uint32) required broadcast ram;
  setState(uint32) required broadcast ram;
  setGrab(uint32) broadcast ram;
  setReject() broadcast;
};

dclass DistributedCogdoInterior : DistributedObject {
  setZoneId(uint32) required broadcast ram;
  setExtZoneId(uint32) required broadcast ram;
  setDistBldgDoId(uint32) required broadcast ram;
  setNumFloors(int8) required broadcast ram;
  setShopOwnerNpcId(uint32) required broadcast ram;
  setSOSNpcId(uint32) broadcast ram;
  setFOType(int8) broadcast ram;
  setToons(uint32[], uint16) broadcast ram;
  setSuits(uint32[], uint32[], uint16[]) broadcast ram;
  setState(string, int16) required broadcast ram;
  setAvatarJoined() airecv clsend;
  elevatorDone() airecv clsend;
  reserveJoinDone() airecv clsend;
  toonLeftBarrelRoom() airecv clsend;
  toonBarrelRoomIntroDone() airecv clsend;
  setBarrelRoomReward(uint32 [], uint8 []) broadcast;
  toonBarrelRoomRewardDone() airecv clsend;
};

dclass DistributedCogdoBattleBldg : DistributedBattleBldg {
};

dclass DistCogdoGame : DistributedObject {
  setInteriorId(uint32) required broadcast ram;
  setExteriorZone(uint32) broadcast ram required;
  setDifficultyOverrides(int32, int32) broadcast ram required;
  setVisible() broadcast;
  setIntroStart() broadcast;
  setToonSad(uint32) broadcast;
  setToonDisconnect(uint32) broadcast;
  setAvatarReady() airecv clsend;
  setGameStart(int16) broadcast;
  setGameFinish(int16) broadcast;
};

dclass DistCogdoLevelGame : DistCogdoGame, DistributedLevel {
};

dclass DistCogdoMazeGame : DistCogdoGame {
  requestAction(uint8, uint32) airecv clsend;
  doAction(uint8, uint32, int16) broadcast;
  setNumSuits(uint8 [3]) required broadcast;
  requestUseGag(int16/10, int16/10, int16/10, int16) clsend airecv;
  toonUsedGag(uint32, int16/10, int16/10, int16/10, int16) broadcast;
  requestSuitHitByGag(uint8, uint8) clsend airecv;
  suitHitByGag(uint32, uint8, uint8) broadcast;
  requestHitBySuit(uint8, uint8, int16) clsend airecv;
  toonHitBySuit(uint32, uint8, uint8, int16) broadcast;
  requestHitByDrop() clsend airecv;
  toonHitByDrop(uint32) broadcast;
  requestPickUp(uint8) clsend airecv;
  pickUp(uint32, uint8, int16) broadcast;
  requestGag(uint8) clsend airecv;
  hasGag(uint32, int16) broadcast;
};

dclass DistCogdoFlyingGame : DistCogdoGame {
  requestAction(uint8, uint8) airecv clsend;
  requestPickUp(uint16, uint8) airecv clsend;
  pickUp(uint32, uint16, int16) broadcast;
  debuffPowerup(uint32, uint16, int16) broadcast;
  doAction(uint8, uint32) broadcast;
  eagleExitCooldown(uint32, int16) broadcast;
  toonSetAsEagleTarget(uint32, uint8, int16) broadcast;
  toonClearAsEagleTarget(uint32, uint8, int16) broadcast;
  toonDied(uint32, int32) broadcast;
  toonSpawn(uint32, int32) broadcast;
  toonSetBlades(uint32, int32) broadcast;
  toonBladeLost(uint32) broadcast;
};

dclass DistCogdoBoardroomGame : DistCogdoLevelGame {
};

dclass DistCogdoCraneGame : DistCogdoLevelGame {
};

dclass DistCogdoCrane : DistributedObject {
  setCraneGameId(uint32) required broadcast ram;
  setIndex(uint8) required broadcast ram;
  setState(char, uint32) broadcast ram;
  clearSmoothing(int8) broadcast clsend;
  setCablePos(uint8, int16/100, uint16%360/100, LinkPosition [3], int16) broadcast clsend;
};

dclass DistCogdoCraneObject : DistributedObject {
  setCraneGameId(uint32) required broadcast ram;
  setObjectState(char, uint32, uint32) broadcast ram;
  requestGrab() airecv clsend;
  rejectGrab();
  requestDrop() airecv clsend;
  hitFloor() clsend;
  requestFree(int16/10, int16/10, int16/10, uint16%360/100) airecv clsend;
  hitBoss(uint16/255) airecv clsend;
  setX(int16/10) broadcast ram clsend airecv;
  setY(int16/10) broadcast ram clsend airecv;
  setZ(int16/10) broadcast ram clsend airecv;
  setH(int16%360/10) broadcast ram clsend airecv;
  setP(int16%360/10) broadcast ram clsend airecv;
  setR(int16%360/10) broadcast ram clsend airecv;
  setPos : setX, setY, setZ;
  setHpr : setH, setP, setR;
  setPosHpr : setX, setY, setZ, setH, setP, setR;
  setXY : setX, setY;
  setXZ : setX, setZ;
  setXYH : setX, setY, setH;
  setXYZH : setX, setY, setZ, setH;
  setComponentL(uint64) broadcast ram clsend airecv;
  setComponentX(int16/10) broadcast ram clsend airecv;
  setComponentY(int16/10) broadcast ram clsend airecv;
  setComponentZ(int16/10) broadcast ram clsend airecv;
  setComponentH(int16%360/10) broadcast ram clsend airecv;
  setComponentP(int16%360/10) broadcast ram clsend airecv;
  setComponentR(int16%360/10) broadcast ram clsend airecv;
  setComponentT(int16) broadcast ram clsend airecv;
  setSmStop : setComponentT;
  setSmH : setComponentH, setComponentT;
  setSmZ : setComponentZ, setComponentT;
  setSmXY : setComponentX, setComponentY, setComponentT;
  setSmXZ : setComponentX, setComponentZ, setComponentT;
  setSmPos : setComponentX, setComponentY, setComponentZ, setComponentT;
  setSmHpr : setComponentH, setComponentP, setComponentR, setComponentT;
  setSmXYH : setComponentX, setComponentY, setComponentH, setComponentT;
  setSmXYZH : setComponentX, setComponentY, setComponentZ, setComponentH, setComponentT;
  setSmPosHpr : setComponentX, setComponentY, setComponentZ, setComponentH, setComponentP, setComponentR, setComponentT;
  setSmPosHprL : setComponentL, setComponentX, setComponentY, setComponentZ, setComponentH, setComponentP, setComponentR, setComponentT;
  clearSmoothing(int8) broadcast clsend;
};

dclass DistCogdoCraneMoneyBag : DistCogdoCraneObject {
  setIndex(uint8) required broadcast ram;
  requestInitial() airecv clsend;
};

dclass DistCogdoCraneCog : DistributedObject {
  setGameId(uint32) required broadcast ram;
  setDNAString(blob) required broadcast ram;
  setSpawnInfo(uint8, int16) required broadcast ram;
};

dclass DistributedHQInterior : DistributedObject {
  setZoneIdAndBlock(uint32, uint16) required broadcast ram;
  setLeaderBoard(blob) required broadcast ram;
  setTutorial(uint8) required broadcast ram;
};

dclass DistributedGagshopInterior : DistributedObject {
  setZoneIdAndBlock(uint32, uint16) required broadcast ram;
};

dclass DistributedPetshopInterior : DistributedObject {
  setZoneIdAndBlock(uint32, uint16) required broadcast ram;
};

dclass DistributedKartShopInterior : DistributedObject {
  setZoneIdAndBlock(uint32, uint16) required broadcast ram;
};

dclass DistributedDoor : DistributedObject {
  setZoneIdAndBlock(uint32, uint32) required broadcast ram;
  setSwing(int8) required broadcast ram;
  setDoorType(uint8) required broadcast ram;
  setDoorIndex(uint8) required broadcast ram;
  setOtherZoneIdAndDoId(uint32, uint32);
  requestEnter() airecv clsend;
  requestExit() airecv clsend;
  rejectEnter(int8);
  avatarEnter(uint32) broadcast;
  avatarExit(uint32) broadcast;
  setState(string, int16) required broadcast ram;
  setExitDoorState(string, int16) required broadcast ram;
};

dclass DistributedAnimDoor : DistributedDoor {
};

dclass DistributedHouseDoor : DistributedDoor {
};

dclass DistributedCogHQDoor : DistributedDoor {
};

dclass DistributedSellbotHQDoor : DistributedCogHQDoor {
  informPlayer(uint8) broadcast ram;
};

dclass DistributedNPCToonBase : DistributedNode {
  setName(string) required broadcast ram;
  setDNAString(blob) required broadcast ram;
  setPositionIndex(uint8) required broadcast ram;
  setAnimState(string, int16/1000, int16) broadcast ram;
  setPageNumber(int16, int8, int16) broadcast ram clsend;
  avatarEnter() airecv clsend;
  freeAvatar();
};

dclass DistributedNPCToon : DistributedNPCToonBase {
  setMovie(uint8, uint32, uint32, uint16[], int16) broadcast ram;
  setMovieDone() airecv clsend;
  chooseQuest(uint16) airecv clsend;
  chooseTrack(int8) airecv clsend;
};

dclass DistributedNPCSpecialQuestGiver : DistributedNPCToonBase {
  setMovie(uint8, uint32, uint32, uint16[], int16) broadcast ram;
  setMovieDone() airecv clsend;
  chooseQuest(uint16) airecv clsend;
  chooseTrack(int8) airecv clsend;
};

dclass DistributedNPCFlippyInToonHall : DistributedNPCToon {
};

dclass DistributedNPCScientist : DistributedNPCToonBase {
  setChat(char [0-1024], uint8, uint32, uint8, uint8) ownsend broadcast;
};

dclass DistributedNPCClerk : DistributedNPCToonBase {
  setMovie(uint8, uint32, uint32, int16) broadcast ram;
  setInventory(blob, int16, uint8) airecv clsend;
};

dclass DistributedNPCTailor : DistributedNPCToonBase {
  setMovie(uint8, uint32, uint32, int16) broadcast ram;
  setDNA(blob, int8, uint8) airecv clsend;
  setCustomerDNA(uint32, blob) broadcast ram;
};

dclass DistributedNPCBlocker : DistributedNPCToonBase {
  setMovie(uint8, uint32, uint32, int16) broadcast ram;
};

dclass DistributedNPCFisherman : DistributedNPCToonBase {
  setMovie(uint8, uint32, uint32, uint32[], int16) broadcast ram;
  completeSale(uint8) airecv clsend;
};

dclass DistributedNPCPartyPerson : DistributedNPCToonBase {
  setMovie(uint8, uint32, uint32, uint32[], int16) broadcast ram;
  answer(uint8) airecv clsend;
};

dclass DistributedNPCPetclerk : DistributedNPCToonBase {
  setMovie(uint8, uint32, uint32, uint32[], int16) broadcast ram;
  setPetSeeds(uint32[]);
  petAdopted(uint8, uint32) airecv clsend;
  petReturned() airecv clsend;
  fishSold() airecv clsend;
  transactionDone() airecv clsend;
};

dclass DistributedNPCKartClerk : DistributedNPCToonBase {
  setMovie(uint8, uint32, uint32, uint32[], int16) broadcast ram;
  buyKart(uint8) airecv clsend;
  buyAccessory(uint8) airecv clsend;
  transactionDone() airecv clsend;
};

dclass DistributedKnockKnockDoor : DistributedAnimatedProp {
};

dclass DistributedElevator : DistributedObject {
  setBldgDoId(uint32) required broadcast ram;
  setState(string, int16) broadcast ram;
  fillSlot0(uint32, uint8) broadcast ram;
  fillSlot1(uint32, uint8) broadcast ram;
  fillSlot2(uint32, uint8) broadcast ram;
  fillSlot3(uint32, uint8) broadcast ram;
  fillSlot4(uint32, uint8) broadcast ram;
  fillSlot5(uint32, uint8) broadcast ram;
  fillSlot6(uint32, uint8) broadcast ram;
  fillSlot7(uint32, uint8) broadcast ram;
  emptySlot0(uint32, int8, int16, int16) broadcast ram;
  emptySlot1(uint32, int8, int16, int16) broadcast ram;
  emptySlot2(uint32, int8, int16, int16) broadcast ram;
  emptySlot3(uint32, int8, int16, int16) broadcast ram;
  emptySlot4(uint32, int8, int16, int16) broadcast ram;
  emptySlot5(uint32, int8, int16, int16) broadcast ram;
  emptySlot6(uint32, int8, int16, int16) broadcast ram;
  emptySlot7(uint32, int8, int16, int16) broadcast ram;
  requestBoard() airecv clsend;
  rejectBoard(uint32, uint8);
  requestExit() airecv clsend;
  setElevatorTripId(uint32) required broadcast ram;
  setAntiShuffle(uint8) required broadcast ram;
  setMinLaff(uint8) required broadcast ram;
};

dclass DistributedElevatorFSM : DistributedObject {
  setBldgDoId(uint32) required broadcast ram;
  setState(string, int16) broadcast ram;
  fillSlot0(uint32) broadcast ram;
  fillSlot1(uint32) broadcast ram;
  fillSlot2(uint32) broadcast ram;
  fillSlot3(uint32) broadcast ram;
  fillSlot4(uint32) broadcast ram;
  fillSlot5(uint32) broadcast ram;
  fillSlot6(uint32) broadcast ram;
  fillSlot7(uint32) broadcast ram;
  emptySlot0(uint32, int8, int16) broadcast ram;
  emptySlot1(uint32, int8, int16) broadcast ram;
  emptySlot2(uint32, int8, int16) broadcast ram;
  emptySlot3(uint32, int8, int16) broadcast ram;
  emptySlot4(uint32, int8, int16) broadcast ram;
  emptySlot5(uint32, int8, int16) broadcast ram;
  emptySlot6(uint32, int8, int16) broadcast ram;
  emptySlot7(uint32, int8, int16) broadcast ram;
  requestBoard() airecv clsend;
  rejectBoard(uint32, uint8);
  requestExit() airecv clsend;
  setElevatorTripId(uint32) required broadcast ram;
  setAntiShuffle(uint8) required broadcast ram;
  setMinLaff(uint8) required broadcast ram;
};

dclass DistributedElevatorFloor : DistributedElevatorFSM {
  setFloor(int8) broadcast ram;
  setLocked(uint16) required broadcast ram;
  setEntering(uint16) required broadcast ram;
  kickToonsOut() broadcast;
  setLatch(uint32) required broadcast ram;
};

dclass DistributedElevatorExt : DistributedElevator {
  setFloor(int8) broadcast ram;
};

dclass DistributedLawOfficeElevatorExt : DistributedElevatorExt {
  setEntranceId(uint8) required broadcast ram;
  setLawOfficeInteriorZone(uint32);
  setLawOfficeInteriorZoneForce(uint32);
};

dclass DistributedElevatorInt : DistributedElevator {
  requestBuildingExit() airecv clsend;
  forcedExit(uint32);
};

dclass DistributedFactoryElevatorExt : DistributedElevatorExt {
  setEntranceId(uint8) required broadcast ram;
  setFactoryInteriorZone(uint32);
  setFactoryInteriorZoneForce(uint32);
};

dclass DistributedMintElevatorExt : DistributedElevatorExt {
  setMintId(uint16) required broadcast ram;
  setMintInteriorZone(uint32);
  setMintInteriorZoneForce(uint32);
};

dclass DistributedCogdoElevatorExt : DistributedElevatorExt {
};

dclass DistributedLawOfficeElevatorInt : DistributedElevatorFloor {
  setLawOfficeInteriorZone(uint32);
};

dclass DistributedCogdoElevatorInt : DistributedElevatorInt {
};

dclass DistributedBossElevator : DistributedElevatorExt {
  setBossOfficeZone(uint32);
  setBossOfficeZoneForce(uint32);
};

dclass DistributedVPElevator : DistributedBossElevator {
};

dclass DistributedCFOElevator : DistributedBossElevator {
};

dclass DistributedCJElevator : DistributedBossElevator {
};

dclass DistributedBBElevator : DistributedBossElevator {
};

dclass DistributedBoardingParty : DistributedObject {
  postGroupInfo(uint32, uint32[], uint32[], uint32[]) broadcast;
  informDestinationInfo(uint8) clsend airecv;
  postDestinationInfo(uint8) broadcast;
  postInvite(uint32, uint32) broadcast;
  postInviteCanceled() broadcast;
  postKick(uint32) broadcast;
  postKickReject(uint32, uint32, uint32) broadcast;
  postSizeReject(uint32, uint32, uint32) broadcast;
  postInviteAccepted(uint32) broadcast;
  postInviteDelcined(uint32) broadcast;
  postInviteNotQualify(uint32, int8, uint32) broadcast;
  postAlreadyInGroup() broadcast;
  postGroupDissolve(uint32, uint32, uint32 [], uint8) broadcast;
  postMessageAcceptanceFailed(uint32, int8) broadcast;
  postGroupAlreadyFull() broadcast;
  postSomethingMissing() broadcast;
  postRejectBoard(uint32, int8, uint32 [], uint32 []) broadcast;
  postRejectGoto(uint32, int8, uint32 [], uint32 []) broadcast;
  postMessageInvited(uint32, uint32) broadcast;
  postMessageInvitationFailed(uint32) broadcast;
  acceptGoToFirstTime(uint32) broadcast;
  acceptGoToSecondTime(uint32) broadcast;
  rejectGoToRequest(uint32, int8, uint32 [], uint32 []) broadcast;
  requestInvite(uint32) airecv clsend;
  requestCancelInvite(uint32) airecv clsend;
  requestAcceptInvite(uint32, uint32) airecv clsend;
  requestRejectInvite(uint32, uint32) airecv clsend;
  requestKick(uint32) airecv clsend;
  requestLeave(uint32) airecv clsend;
  requestBoard(uint32) airecv clsend;
  requestGoToFirstTime(uint32) airecv clsend;
  requestGoToSecondTime(uint32) airecv clsend;
  setElevatorIdList(uint32[]) required broadcast ram;
  setGroupSize(uint8) required broadcast ram;
};

dclass DistributedTutorialInterior : DistributedObject {
  setZoneIdAndBlock(uint32, uint16) required broadcast ram;
  setTutorialNpcId(uint32) required broadcast ram;
};

dclass DistributedBankMgr : DistributedObject {
  transferMoney(int16) airecv clsend;
};

dclass DistributedMailbox : DistributedObject {
  setHouseId(uint32) required broadcast ram;
  setHousePos(uint8) required broadcast ram;
  setName(string) required broadcast ram;
  setFullIndicator(uint8) broadcast ram;
  avatarEnter() airecv clsend;
  avatarExit() airecv clsend;
  freeAvatar();
  setMovie(uint8, uint32) broadcast ram;
  acceptItemMessage(uint16, blob, uint8, int32) airecv clsend;
  acceptItemResponse(uint16, int8);
  discardItemMessage(uint16, blob, uint8, int32) airecv clsend;
  discardItemResponse(uint16, int8);
  acceptInviteMessage(uint16, uint64) airecv clsend;
  rejectInviteMessage(uint16, uint64) airecv clsend;
  markInviteReadButNotReplied(uint64) airecv clsend;
};

dclass DistributedFurnitureManager : DistributedObject {
  setOwnerId(uint32) required broadcast ram;
  setOwnerName(string) required broadcast ram;
  setInteriorId(uint32) required broadcast ram;
  setAtticItems(blob) required broadcast ram;
  setAtticWallpaper(blob) required broadcast ram;
  setAtticWindows(blob) required broadcast ram;
  setDeletedItems(blob) required broadcast ram;
  suggestDirector(uint32) airecv clsend;
  setDirector(uint32) broadcast ram;
  avatarEnter() airecv clsend;
  avatarExit() airecv clsend;
  moveItemToAtticMessage(uint32, uint16) airecv clsend;
  moveItemToAtticResponse(int8, uint16);
  moveItemFromAtticMessage(uint16, int16/10, int16/10, int16/100, int16/10, int16/10, int16/10, uint16) airecv clsend;
  moveItemFromAtticResponse(int8, uint32, uint16);
  deleteItemFromAtticMessage(blob, uint16, uint16) airecv clsend;
  deleteItemFromAtticResponse(int8, uint16);
  deleteItemFromRoomMessage(blob, uint32, uint16) airecv clsend;
  deleteItemFromRoomResponse(int8, uint16);
  moveWallpaperFromAtticMessage(uint16, uint8, uint16) airecv clsend;
  moveWallpaperFromAtticResponse(int8, uint16);
  deleteWallpaperFromAtticMessage(blob, uint16, uint16) airecv clsend;
  deleteWallpaperFromAtticResponse(int8, uint16);
  moveWindowToAtticMessage(uint8, uint16) airecv clsend;
  moveWindowToAtticResponse(int8, uint16);
  moveWindowFromAtticMessage(uint16, uint8, uint16) airecv clsend;
  moveWindowFromAtticResponse(int8, uint16);
  moveWindowMessage(uint8, uint8, uint16) airecv clsend;
  moveWindowResponse(int8, uint16);
  deleteWindowFromAtticMessage(blob, uint16, uint16) airecv clsend;
  deleteWindowFromAtticResponse(int8, uint16);
  recoverDeletedItemMessage(blob, uint16, uint16) airecv clsend;
  recoverDeletedItemResponse(int8, uint16);
};

dclass DistributedFurnitureItem : DistributedSmoothNode {
  setItem(uint32, blob) required broadcast ram;
  requestPosHpr(uint8, int16/10, int16/10, int16/100, int16/10, int16/10, int16/10, int16) airecv clsend;
  setMode(uint8, uint32) required broadcast ram;
};

dclass DistributedBank : DistributedFurnitureItem {
  avatarEnter() airecv clsend;
  freeAvatar();
  setMovie(uint8, uint32, int16) broadcast ram;
  transferMoney(int16) airecv clsend;
};

dclass DistributedCloset : DistributedFurnitureItem {
  setOwnerId(uint32) required broadcast ram;
  enterAvatar() airecv clsend;
  freeAvatar();
  removeItem(blob, uint8) airecv clsend;
  setDNA(blob, int8, uint8) airecv clsend;
  setState(uint8, uint32, uint32, string, uint8[], uint8[]) broadcast ram;
  setMovie(uint8, uint32, int16) broadcast ram;
  resetItemLists() broadcast ram;
  setCustomerDNA(uint32, blob) broadcast ram;
};

dclass DistributedTrunk : DistributedCloset {
  setState(uint8, uint32, uint32, string, uint8[], uint8[], uint8[], uint8[]) broadcast ram;
  removeItem(uint8, uint8, uint8, uint8) airecv clsend;
  setDNA(uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, int8, uint8) airecv clsend;
  setCustomerDNA(uint32, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8, uint8) broadcast ram;
};

dclass DistributedPhone : DistributedFurnitureItem {
  setInitialScale(uint8/170, uint8/170, uint8/170) required broadcast ram;
  setNewScale(uint8/170, uint8/170, uint8/170) airecv clsend;
  avatarEnter() airecv clsend;
  avatarExit() airecv clsend;
  freeAvatar();
  setLimits(uint16);
  setMovie(uint8, uint32, int32) broadcast ram;
  requestPurchaseMessage(uint16, blob, int32) airecv clsend;
  requestPurchaseResponse(uint16, int8);
  requestGiftPurchaseMessage(uint16, uint32, blob, int32) airecv clsend;
  requestGiftPurchaseResponse(uint16, int8);
};

dclass DistributedFireworkShow : DistributedObject {
  startShow(uint8, uint8, int16) broadcast ram;
  requestFirework(int16/10, int16/10, int16/100, uint8, uint8, uint8) airecv clsend;
  shootFirework(int16/10, int16/10, int16/100, uint8, uint8, uint8) broadcast;
};

dclass DistributedFireworksCannon : DistributedFireworkShow {
  avatarEnter() airecv clsend;
  avatarExit() airecv clsend;
  freeAvatar();
  setMovie(uint8, uint32, int16) broadcast ram;
  setPosition(int16/10, int16/10, int16/10) required broadcast ram;
};

dclass LobbyManager : DistributedObject {
};

dclass DistributedFactory : DistributedLevel {
  setFactoryId(uint16) required broadcast ram;
  setSuits(uint32[], uint32[]) broadcast ram;
  setForemanConfronted(uint32) broadcast ram;
  setDefeated() broadcast ram;
};

dclass DistributedLawOffice : DistributedObject {
  setLawOfficeId(uint16) required broadcast ram;
  startSignal() broadcast ram;
  readyForNextFloor() airecv clsend;
};

dclass DistributedLawOfficeFloor : DistributedLevel {
  setLawOfficeId(uint16) required broadcast ram;
  setSuits(uint32[], uint32[]) broadcast ram;
  readyForNextFloor() airecv clsend;
  setForemanConfronted(uint32) broadcast ram;
  setDefeated() broadcast ram;
};

dclass DistributedMint : DistributedObject {
  setZoneId(uint32) required broadcast ram;
  setMintId(uint16) required broadcast ram;
  setFloorNum(uint8) required broadcast ram;
  setRoomDoIds(uint32[]) broadcast ram;
};

dclass DistributedMintRoom : DistributedLevel {
  setMintId(uint16) required broadcast ram;
  setRoomId(uint16) required broadcast ram;
  setRoomNum(uint8) required broadcast ram;
  setSuits(uint32[], uint32[]) broadcast ram;
  setBossConfronted(uint32) broadcast ram;
  setDefeated() broadcast ram;
};

dclass DistributedStage : DistributedObject {
  setZoneId(uint32) required broadcast ram;
  setStageId(uint16) required broadcast ram;
  setLayoutIndex(uint16) required broadcast ram;
  setFloorNum(uint8) required broadcast ram;
  setRoomDoIds(uint32[]) broadcast ram;
  setStageZone(uint32) broadcast ram;
  elevatorAlert(uint32) broadcast ram;
};

dclass DistributedStageRoom : DistributedLevel {
  setStageId(uint16) required broadcast ram;
  setRoomId(uint16) required broadcast ram;
  setRoomNum(uint8) required broadcast ram;
  setSuits(uint32[], uint32[]) broadcast ram;
  setBossConfronted(uint32) broadcast ram;
  setDefeated() broadcast ram;
};

dclass DistributedInGameEditor : DistributedObject {
  setEditorAvId(uint32) required broadcast ram;
  setEditUsername(blob) required broadcast ram;
  setLevelDoId(uint32) required broadcast ram;
  requestCurrentLevelSpec() airecv clsend;
  setSpecSenderDoId(uint32);
  setEdit(uint32, blob, blob, blob) airecv clsend;
  setAttribChange(uint32, blob, blob, blob);
  setFinished() airecv clsend;
};

dclass DistributedLift : DistributedEntity {
  setStateTransition(uint8, uint8, uint32) required broadcast ram;
  setAvatarEnter() airecv clsend;
  setAvatarLeave() airecv clsend;
};

dclass DistributedDoorEntity : DistributedEntity {
  setLocksState(uint16) required broadcast ram;
  setDoorState(uint8, int32) required broadcast ram;
  requestOpen() airecv clsend;
};

dclass DistributedSwitch : DistributedInteractiveEntity {
};

dclass DistributedButton : DistributedSwitch {
};

dclass DistributedTrigger : DistributedSwitch {
};

dclass DistributedCrushableEntity : DistributedEntity {
  setPosition(int16/10, int16/10, int16/10) broadcast ram;
  setCrushed(uint32, uint8) broadcast ram;
};

dclass DistributedCrusherEntity : DistributedEntity {
};

dclass DistributedElevatorMarker : DistributedEntity {
};

dclass DistributedStomper : DistributedCrusherEntity {
  setMovie(uint8, int16, uint32[]) broadcast ram;
};

dclass DistributedStomperPair : DistributedEntity {
  setChildren(uint32[]) broadcast ram;
  setSquash() airecv clsend;
};

dclass DistributedBarrelBase : DistributedEntity {
  requestGrab() airecv clsend;
  setGrab(uint32) broadcast ram;
  setReject() broadcast;
};

dclass DistributedGagBarrel : DistributedBarrelBase {
};

dclass DistributedBeanBarrel : DistributedBarrelBase {
};

dclass DistributedHealBarrel : DistributedBarrelBase {
};

dclass DistributedGrid : DistributedEntity {
};

dclass ActiveCell : DistributedEntity {
  setState(uint8, uint32) broadcast ram;
};

dclass DirectionalCell : ActiveCell {
};

dclass CrusherCell : ActiveCell {
};

dclass DistributedCrate : DistributedCrushableEntity {
  requestPush(uint8) airecv clsend;
  setReject();
  setAccept() broadcast;
  setMoveTo(uint32, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) broadcast ram;
  setDone() airecv clsend;
};

dclass DistributedSinkingPlatform : DistributedEntity {
  setOnOff(uint8, uint32) airecv clsend;
  setSinkMode(uint32, uint8, uint32) broadcast ram;
};

dclass DistributedGoon : DistributedCrushableEntity {
  requestBattle(int16/10) airecv clsend;
  requestStunned(int16/10) airecv clsend;
  requestResync() airecv clsend;
  setParameterize(int16/10, int16/10, int16/10, uint32) airecv clsend;
  setMovie(uint8, uint32, int32/10, int16) broadcast ram;
};

dclass DistributedGridGoon : DistributedGoon {
  setPathPts(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) broadcast ram;
};

dclass BattleBlocker : DistributedEntity {
  setActive(uint8) required broadcast ram;
  setSuits(uint32[]) broadcast ram;
  setBattle(uint32) broadcast ram;
  setBattleFinished() broadcast ram;
};

dclass DistributedLaserField : BattleBlocker {
  setGrid(uint8, uint8) required broadcast ram;
  setField(uint8 []) required broadcast ram;
  setSuccess(uint8) broadcast ram;
  hit(int8, int8, int8, int8) airecv clsend;
  trapFire() airecv clsend;
  setActiveLF(uint8) broadcast ram;
  hideSuit(uint32[]) broadcast ram;
  showSuit(uint32[]) broadcast ram;
  setGridGame(string) broadcast ram;
};

struct golfGreenGameBoardData {
  uint8 posX;
  uint8 posZ;
  uint8 typeIndex;
};

struct golfGreenGameScoreData {
  uint32 avId;
  uint8 score;
};

dclass DistributedGolfGreenGame : BattleBlocker {
  requestJoin() airecv clsend;
  leaveGame() airecv clsend;
  acceptJoin(uint16, int32, uint32 []) broadcast ram;
  requestBoard(uint8) airecv clsend;
  startBoard(golfGreenGameBoardData [], uint8 []);
  signalDone(uint8) broadcast ram;
  boardCleared(uint32);
  scoreData(uint8, uint8, golfGreenGameScoreData []) broadcast ram;
  informGag(uint8, uint8);
  helpOthers(uint32) broadcast;
  setTimerStart(uint16, int32) broadcast ram;
};

dclass DistributedSecurityCamera : DistributedEntity {
  trapFire() airecv clsend;
  setTarget(uint8) broadcast ram;
};

dclass DistributedMover : DistributedEntity {
  startMove(int16) broadcast ram;
};

typedef uint16/10000 PetTrait;

dclass DistributedPet : DistributedSmoothNode {
  string DcObjectType db;
  setOwnerId(uint32) required broadcast db;
  setPetName(string) required broadcast db;
  setTraitSeed(uint32) required broadcast db;
  setSafeZone(uint32) required broadcast db;
  setForgetfulness(PetTrait) required broadcast db;
  setBoredomThreshold(PetTrait) required broadcast db;
  setRestlessnessThreshold(PetTrait) required broadcast db;
  setPlayfulnessThreshold(PetTrait) required broadcast db;
  setLonelinessThreshold(PetTrait) required broadcast db;
  setSadnessThreshold(PetTrait) required broadcast db;
  setFatigueThreshold(PetTrait) required broadcast db;
  setHungerThreshold(PetTrait) required broadcast db;
  setConfusionThreshold(PetTrait) required broadcast db;
  setExcitementThreshold(PetTrait) required broadcast db;
  setAngerThreshold(PetTrait) required broadcast db;
  setSurpriseThreshold(PetTrait) required broadcast db;
  setAffectionThreshold(PetTrait) required broadcast db;
  setHead(int8(-1-1)) required broadcast db;
  setEars(int8(-1-4)) required broadcast db;
  setNose(int8(-1-3)) required broadcast db;
  setTail(int8(-1-6)) required broadcast db;
  setBodyTexture(int8(0-6)) required broadcast db;
  setColor(int8(0-25)) required broadcast db;
  setColorScale(int8(0-8)) required broadcast db;
  setEyeColor(int8(0-5)) required broadcast db;
  setGender(int8(0-1)) required broadcast db;
  setLastSeenTimestamp(uint32) required broadcast db;
  setBoredom(uint16/1000(0-1)) required broadcast db;
  setRestlessness(uint16/1000(0-1)) required broadcast db;
  setPlayfulness(uint16/1000(0-1)) required broadcast db;
  setLoneliness(uint16/1000(0-1)) required broadcast db;
  setSadness(uint16/1000(0-1)) required broadcast db;
  setAffection(uint16/1000(0-1)) required broadcast db;
  setHunger(uint16/1000(0-1)) required broadcast db;
  setConfusion(uint16/1000(0-1)) required broadcast db;
  setExcitement(uint16/1000(0-1)) required broadcast db;
  setFatigue(uint16/1000(0-1)) required broadcast db;
  setAnger(uint16/1000(0-1)) required broadcast db;
  setSurprise(uint16/1000(0-1)) required broadcast db;
  setMood : setBoredom, setRestlessness, setPlayfulness, setLoneliness, setSadness, setAffection, setHunger, setConfusion, setExcitement, setFatigue, setAnger, setSurprise;
  teleportIn(int16) broadcast ownsend;
  teleportOut(int16) broadcast ownsend;
  setTrickAptitudes(uint16/10000(0-1) []) required broadcast db;
  doTrick(uint8, int16) broadcast ram;
  avatarInteract(uint32);
  setMovie(uint8, uint32, int16) broadcast ram;
  freeAvatar();
};

dclass DistributedPetProxy : DistributedPet {
  setDominantMood(string) broadcast ram;
};

dclass DistributedBlackCatMgr : DistributedObject {
  setAvId(uint32) required broadcast ram;
  doBlackCatTransformation() airecv clsend;
};

dclass DistributedPolarPlaceEffectMgr : DistributedObject {
  addPolarPlaceEffect() airecv clsend;
};

dclass DistributedGreenToonEffectMgr : DistributedObject {
  addGreenToonEffect() airecv clsend;
};

dclass DistributedResistanceEmoteMgr : DistributedObject {
  addResistanceEmote() airecv clsend;
};

dclass DistributedScavengerHuntTarget : DistributedObject {
  attemptScavengerHunt() airecv clsend;
};

dclass DistributedTrickOrTreatTarget : DistributedScavengerHuntTarget {
};

dclass DistributedWinterCarolingTarget : DistributedScavengerHuntTarget {
};

dclass DistributedDataStoreManager : DistributedObject {
  startStore(uint8);
  stopStore(uint8);
  queryStore(uint8, string);
  receiveResults(uint8, string);
  deleteBackupStores();
};

dclass DistributedVehicle : DistributedSmoothNode {
  setOwner(uint32) required broadcast ram;
  setState(char, uint32) broadcast ram;
  setBodyType(int8) required broadcast ram;
  setBodyColor(int8) required broadcast ram;
  setAccessoryColor(int8) required broadcast ram;
  setEngineBlockType(int8) required broadcast ram;
  setSpoilerType(int8) required broadcast ram;
  setFrontWheelWellType(int8) required broadcast ram;
  setBackWheelWellType(int8) required broadcast ram;
  setRimType(int8) required broadcast ram;
  setDecalType(int8) required broadcast ram;
  requestControl() airecv clsend;
  requestParked() airecv clsend;
  setInput(int8) broadcast ram;
};

struct avatarAndKart {
  uint32 avId;
  uint32 kartId;
};

dclass DistributedRace : DistributedObject {
  setZoneId(uint32) required broadcast ram;
  setTrackId(uint16) required broadcast ram;
  setRaceType(uint16) required broadcast ram;
  setCircuitLoop(uint16[]) required broadcast ram;
  setAvatars(uint32[]) required broadcast ram;
  setStartingPlaces(uint8[]) required broadcast ram;
  setLapCount(uint8) broadcast required ram;
  waitingForJoin() broadcast ram;
  setEnteredRacers(avatarAndKart []) broadcast ram;
  prepForRace() broadcast ram;
  startTutorial() broadcast ram;
  startRace(int16) broadcast ram;
  goToSpeedway(uint32[], uint8) broadcast ram;
  genGag(uint8, uint16, uint8) broadcast ram;
  dropAnvilOn(uint32, uint32, int16) broadcast ram;
  shootPiejectile(uint32, uint32, uint8) broadcast ram;
  racerDisconnected(uint32) broadcast ram;
  setPlace(uint32, uint32/1000, uint8, uint32, uint8, uint32, uint32, uint32[], uint16[], uint32/1000) broadcast ram;
  setCircuitPlace(uint32, uint8, uint32, uint32, uint32, uint32[]) broadcast ram;
  endCircuitRace() broadcast ram;
  setRaceZone(uint32, uint32);
  hasGag(uint8, uint8, uint8) broadcast airecv clsend;
  racerLeft(uint32) clsend airecv broadcast ram;
  heresMyT(uint32, int8, uint16/65535, int16) clsend airecv broadcast;
  requestThrow(int32/1000, int32/1000, int32/1000) clsend airecv;
  requestKart() clsend airecv;
};

dclass DistributedGag : DistributedObject {
  setInitTime(int16) required broadcast ram;
  setActivateTime(uint16) required broadcast ram;
  setPos(int32/1000, int32/1000, int32/1000) required broadcast ram;
  setRace(uint32) required broadcast ram;
  setOwnerId(uint32) required broadcast ram;
  setType(uint8) required broadcast ram;
  hitSomebody(uint32, int16) broadcast clsend airecv;
};

dclass DistributedProjectile : DistributedObject {
  setInitTime(int16) required broadcast ram;
  setPos(int32/1000, int32/1000, int32/1000) required broadcast ram;
  setRace(uint32) required broadcast ram;
  setOwnerId(uint32) required broadcast ram;
  setType(uint8) required broadcast ram;
  hitSomebody(uint32, int16) broadcast clsend airecv;
};

dclass DistributedKartPad : DistributedObject {
  setArea(uint32) required broadcast ram;
};

dclass DistributedRacePad : DistributedKartPad {
  setState(string, int16) required broadcast ram;
  setRaceZone(uint32);
  setTrackInfo(uint16[]) required broadcast ram;
};

dclass DistributedViewPad : DistributedKartPad {
  setLastEntered(int16) required broadcast ram;
};

dclass DistributedStartingBlock : DistributedObject {
  setPadDoId(uint32) required broadcast ram;
  setPosHpr(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) required broadcast ram;
  setPadLocationId(uint8) required broadcast ram;
  requestEnter(uint8) airecv clsend;
  rejectEnter(uint8);
  requestExit() airecv clsend;
  setOccupied(uint32) broadcast ram;
  setMovie(uint8) broadcast ram;
  movieFinished() airecv clsend;
};

dclass DistributedViewingBlock : DistributedStartingBlock {
};

dclass DistributedLeaderBoard : DistributedObject {
  setPosHpr(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) required broadcast ram;
  setDisplay(blob) broadcast ram;
};

dclass DistributedDeliveryManager : DistributedObject {
  hello(string) clsend;
  rejectHello(string);
  helloResponse(string);
  getName(uint32);
  receiveRejectGetName(string);
  receiveAcceptGetName(string);
  addName(uint32, string);
  receiveRejectAddName(uint32);
  receiveAcceptAddName(uint32);
  addGift(uint32, blob, uint32, uint32, uint32);
  receiveRejectAddGift(uint32);
  receiveAcceptAddGift(uint32, uint32, uint32, uint32);
  deliverGifts(uint32, uint32);
  receiveAcceptDeliverGifts(uint32, string);
  receiveRejectDeliverGifts(uint32, string);
  receiveRequestPayForGift(blob, uint32, uint32) airecv clsend;
  receiveRequestPurchaseGift(blob, uint32, uint32, uint32) airecv;
  receiveAcceptPurchaseGift(uint32, uint32, int16);
  receiveRejectPurchaseGift(uint32, uint32, int16, uint16);
  heartbeat() airecv;
  giveBeanBonus(uint32, uint16);
  requestAck() clsend;
  returnAck();
  givePartyRefund(uint32, uint32, uint64, int8, uint16);
};

dclass DistributedLawbotBoss : DistributedBossCog {
  setState(string) broadcast ram;
  setBossDamage(uint16, uint8, int16) broadcast ram;
  touchWitnessStand() airecv clsend;
  hitBoss(uint8) airecv clsend;
  healBoss(uint8) airecv clsend;
  hitToon(uint32) airecv clsend;
  hitDefensePan() airecv clsend;
  hitProsecutionPan() airecv clsend;
  hitChair(uint8, uint8) airecv clsend;
  setLawyerIds(uint32[]) broadcast ram;
  setTaunt(int8, int8) broadcast;
  toonGotHealed(uint32) broadcast;
  enteredBonusState() broadcast;
  setBattleDifficulty(uint8) broadcast ram;
};

dclass DistributedLawbotBossSuit : DistributedSuitBase {
  setPosHpr(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) required broadcast ram;
  doAttack(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) broadcast;
  doProsecute() broadcast;
  hitByToon() airecv clsend;
  doStun() broadcast;
};

dclass DistributedLawbotBossGavel : DistributedObject {
  setBossCogId(uint32) required broadcast ram;
  setIndex(uint8) required broadcast ram;
  setState(char) broadcast ram;
};

dclass DistributedLawbotCannon : DistributedObject {
  setBossCogId(uint32) required broadcast ram;
  setIndex(uint8) required broadcast ram;
  setPosHpr(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) required broadcast ram;
  requestEnter() airecv clsend;
  setMovie(int8, uint32, uint8) broadcast;
  setCannonPosition(int16/10, int16/10) airecv clsend;
  updateCannonPosition(uint32, int16/10, int16/10) broadcast;
  setCannonLit(int16/10, int16/10) airecv clsend;
  setCannonWillFire(uint32, int16/10, int16/10, int16/10, int16) broadcast;
  setLanded() airecv clsend;
  requestLeave() airecv clsend;
};

dclass DistributedLawbotChair : DistributedObject {
  setBossCogId(uint32) required broadcast ram;
  setIndex(uint8) required broadcast ram;
  setState(char) broadcast ram;
  showCogJurorFlying() broadcast;
  setToonJurorIndex(int8) broadcast ram;
};

dclass DistributedLawnDecor : DistributedNode {
  setPlot(int8) required broadcast ram;
  setHeading(int16/10) required broadcast ram;
  setPosition(int16/10, int16/10, int16/10) required broadcast ram;
  setOwnerIndex(int8) required broadcast ram;
  plotEntered() airecv clsend;
  removeItem() airecv clsend;
  setMovie(uint8, uint32) broadcast ram;
  movieDone() airecv clsend;
  interactionDenied(uint32) broadcast ram;
};

dclass DistributedGardenPlot : DistributedLawnDecor {
  plantFlower(uint8, uint8) airecv clsend;
  plantGagTree(uint8, uint8) airecv clsend;
  plantStatuary(uint8) airecv clsend;
  plantToonStatuary(uint8, uint16) airecv clsend;
  plantNothing(uint8) airecv clsend;
};

dclass DistributedGardenBox : DistributedLawnDecor {
  setTypeIndex(uint8) required broadcast ram;
};

dclass DistributedStatuary : DistributedLawnDecor {
  setTypeIndex(uint8) required broadcast ram;
  setWaterLevel(int8) required broadcast ram;
  setGrowthLevel(int8) required broadcast ram;
};

dclass DistributedToonStatuary : DistributedStatuary {
  setOptional(uint16) required broadcast ram;
};

dclass DistributedAnimatedStatuary : DistributedStatuary {
};

dclass DistributedChangingStatuary : DistributedStatuary {
  setGrowthLevel(int8) required broadcast ram;
};

dclass DistributedPlantBase : DistributedLawnDecor {
  setTypeIndex(uint8) required broadcast ram;
  setWaterLevel(int8) required broadcast ram;
  setGrowthLevel(int8) required broadcast ram;
  waterPlant() airecv clsend;
  waterPlantDone() airecv clsend;
};

dclass DistributedFlower : DistributedPlantBase {
  setTypeIndex(uint8) required broadcast ram;
  setVariety(uint8) required broadcast ram;
};

dclass DistributedGagTree : DistributedPlantBase {
  setWilted(int8) required broadcast ram;
  requestHarvest() airecv clsend;
};

dclass DistributedTravelGame : DistributedMinigame {
  setTimerStartTime(int16) broadcast;
  setAvatarChoice(uint16, uint8) airecv clsend;
  setAvatarChose(uint32) broadcast;
  setServerChoices(int16[], uint8[], uint8, uint8) broadcast;
  setMinigames(uint8[], uint8[]) broadcast;
  setBonuses(uint8[], uint8[]) broadcast;
  setBoardIndex(uint8) required broadcast ram;
};

dclass DistributedPairingGame : DistributedMinigame {
  setDeckSeed(uint32) required broadcast ram;
  setMaxOpenCards(uint8) broadcast ram;
  openCardRequest(int16, int16) airecv clsend;
  openCardResult(int16, uint32, int16, int8, int16[]) broadcast;
  reportDone() airecv clsend;
  setEveryoneDone() broadcast;
  setSignaling(uint32) clsend broadcast;
};

struct golfData {
  int16 frame;
  int32/100000 x;
  int32/100000 y;
  int32/100000 z;
};

struct Coord3 {
  int32/100000 x;
  int32/100000 y;
  int32/100000 z;
};

struct CommonObjectData {
  uint8 id;
  uint8 type;
  int32/100000 x;
  int32/100000 y;
  int32/100000 z;
  int32/100000 q1;
  int32/100000 q2;
  int32/100000 q3;
  int32/100000 q4;
  int32/100000 aVX;
  int32/100000 aVY;
  int32/100000 aVZ;
  int32/100000 lVX;
  int32/100000 lVY;
  int32/100000 lVZ;
};

dclass DistributedPhysicsWorld : DistributedObject {
  clientCommonObject(uint8, uint8, Coord3, Coord3, int32/100, int32/100, int32/1000) broadcast ram;
  setCommonObjects(CommonObjectData []) broadcast;
  upSetCommonObjects(CommonObjectData []) airecv clsend;
};

dclass DistributedGolfHole : DistributedPhysicsWorld {
  setHoleId(int8) broadcast ram required;
  setTimingCycleLength(uint32/1000) broadcast ram required;
  setAvatarReadyHole() airecv clsend;
  setGolfCourseDoId(uint32) broadcast ram required;
  turnDone() airecv clsend;
  ballInHole() airecv clsend;
  setAvatarTempTee(uint32, uint8) clsend broadcast;
  setTempAimHeading(uint32, int32/1000) clsend broadcast;
  setAvatarFinalTee(uint32, uint8) broadcast;
  setGolferIds(uint32[]) broadcast ram required;
  golfersTurn(uint32) broadcast;
  golferChooseTee(uint32) broadcast;
  setAvatarTee(uint8) airecv clsend;
  postSwing(uint32/1000, int32, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000) airecv clsend;
  postSwingState(uint32/1000, int32, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, uint16/100, CommonObjectData []) airecv clsend;
  swing(uint32, int32, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000) broadcast;
  ballMovie2AI(uint32/1000, uint32, golfData [], golfData [], uint16, uint16, uint16, CommonObjectData []) airecv clsend;
  ballMovie2Client(uint32/1000, uint32, golfData [], golfData [], uint16, uint16, uint16, CommonObjectData []) broadcast;
  assignRecordSwing(uint32, uint32/1000, int32, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, CommonObjectData []);
  setBox(int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000) airecv clsend;
  sendBox(int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000, int32/1000) broadcast;
};

dclass DistributedGolfCourse : DistributedObject {
  setGolferIds(uint32[]) broadcast ram required;
  setCourseId(int8) broadcast ram required;
  setAvatarJoined() airecv clsend;
  setAvatarReadyCourse() airecv clsend;
  setAvatarReadyHole() airecv clsend;
  setAvatarExited() airecv clsend;
  setCurHoleIndex(int8) broadcast ram required;
  setCurHoleDoId(uint32) broadcast ram required;
  setDoneReward() airecv clsend;
  setReward(uint8[] [], int8[], uint8[] [], uint8[] [], uint8[] [], uint32, uint32/100, uint32/100, uint32/100, uint32/100) broadcast;
  setCourseReady(int8, int16[], int8) broadcast;
  setHoleStart(int16) broadcast;
  setCourseExit() broadcast;
  setCourseAbort(uint32) broadcast;
  setPlayHole() broadcast;
  avExited(uint32) broadcast;
  setScores(int16 []) broadcast;
  changeDrivePermission(uint32, int8) broadcast;
};

dclass DistributedVineGame : DistributedMinigame {
  reachedEndVine(int8) clsend airecv;
  setNewVine(uint32, int8, uint32/10000, int8) airecv clsend broadcast;
  setNewVineT(uint32, uint32/10000, int8) clsend broadcast;
  setJumpingFromVine(uint32, int8, int8, int32/100, int16/100, int16/100, int16) clsend broadcast;
  claimTreasure(uint32) airecv clsend;
  setTreasureGrabbed(uint32, uint32) broadcast;
  setScore(uint32, uint32) broadcast;
  allAtEndVine() broadcast;
  setFallingFromVine(uint32, int8, int8, int32/100, int16/100, int16/100, int16, int8) clsend broadcast;
  setFallingFromMidair(uint32, int8, int32/100, int16/100, int16/100, int16, int8) clsend broadcast;
  setVineSections(uint8[]) required broadcast ram;
};

dclass TTAvatarFriendsManager : AvatarFriendsManager {
};

dclass TTPlayerFriendsManager : PlayerFriendsManager {
};

dclass TTSpeedchatRelay : SpeedchatRelay {
};

dclass DistributedGolfKart : DistributedObject {
  setState(string, int16) broadcast ram;
  fillSlot0(uint32) broadcast ram;
  fillSlot1(uint32) broadcast ram;
  fillSlot2(uint32) broadcast ram;
  fillSlot3(uint32) broadcast ram;
  emptySlot0(uint32, int16) broadcast ram;
  emptySlot1(uint32, int16) broadcast ram;
  emptySlot2(uint32, int16) broadcast ram;
  emptySlot3(uint32, int16) broadcast ram;
  requestBoard() airecv clsend;
  rejectBoard(uint32);
  requestExit() airecv clsend;
  setMinigameZone(uint32, uint16);
  setGolfZone(uint32, uint16);
  setGolfCourse(int8) required broadcast ram;
  setPosHpr(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) required broadcast ram;
  setColor(int16, int16, int16) required broadcast ram;
};

dclass DistributedTimer : DistributedObject {
  setStartTime(int32) broadcast ram required;
};

dclass DistributedPicnicBasket : DistributedObject {
  setState(string, uint16, int16) broadcast ram;
  fillSlot0(uint32) broadcast ram;
  fillSlot1(uint32) broadcast ram;
  fillSlot2(uint32) broadcast ram;
  fillSlot3(uint32) broadcast ram;
  emptySlot0(uint32, int16) broadcast ram;
  emptySlot1(uint32, int16) broadcast ram;
  emptySlot2(uint32, int16) broadcast ram;
  emptySlot3(uint32, int16) broadcast ram;
  requestBoard(int16) airecv clsend;
  rejectBoard(uint32);
  requestExit() airecv clsend;
  doneExit() airecv clsend;
  setMinigameZone(uint32, uint16);
  setPicnicDone();
  setPosHpr(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) required broadcast ram;
  setTableNumber(int16) required broadcast ram;
};

dclass DistributedBossbotBoss : DistributedBossCog {
  setState(string) broadcast ram;
  setBattleDifficulty(uint8) broadcast ram;
  requestGetFood(int8, int8, uint32) airecv clsend;
  toonGotFood(uint32, int8, int8, uint32) broadcast;
  requestServeFood(int8, int8) airecv clsend;
  toonServeFood(uint32, int8, int8) broadcast;
  hitBoss(uint8) airecv clsend;
  hitToon(uint32) airecv clsend;
  ballHitBoss(uint8) airecv clsend;
  setBossDamage(uint16, uint8, int16) broadcast ram;
  setSpeedDamage(uint16, uint8, int16) broadcast ram;
  reachedTable(uint8) airecv clsend;
  hitTable(uint8) airecv clsend;
  awayFromTable(uint8) airecv clsend;
  toonGotHealed(uint32) broadcast;
  requestGetToonup(int8, int8, uint32) airecv clsend;
  toonGotToonup(uint32, int8, int8, uint32) broadcast;
};

dclass DistributedCogKart : DistributedElevatorExt {
  setCountryClubId(uint16) required broadcast ram;
  setPosHpr(int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) required broadcast ram;
  setCountryClubInteriorZone(uint32);
  setCountryClubInteriorZoneForce(uint32);
};

dclass DistributedCountryClub : DistributedObject {
  setZoneId(uint32) required broadcast ram;
  setBlockedRooms(uint8[]) required broadcast ram;
  setCountryClubId(uint16) required broadcast ram;
  setLayoutIndex(uint16) required broadcast ram;
  setFloorNum(uint8) required broadcast ram;
  setRoomDoIds(uint32[]) broadcast ram;
  setCountryClubZone(uint32) broadcast ram;
  elevatorAlert(uint32) broadcast ram;
};

dclass DistributedCountryClubRoom : DistributedLevel {
  setCountryClubId(uint16) required broadcast ram;
  setRoomId(uint16) required broadcast ram;
  setRoomNum(uint8) required broadcast ram;
  setSuits(uint32[], uint32[]) broadcast ram;
  setBossConfronted(uint32) broadcast ram;
  setDefeated() broadcast ram;
  forceOuch(uint8) broadcast;
};

dclass DistributedMoleField : DistributedEntity {
  setGameStart(int16, uint8, uint16) broadcast;
  setClientTriggered() airecv clsend;
  whackedMole(int8, int16) airecv clsend;
  whackedBomb(int8, int16, int32) airecv clsend;
  updateMole(int8, int8) broadcast;
  reportToonHitByBomb(uint32, int8, int32) broadcast;
  setScore(int16) required broadcast ram;
  damageMe() airecv clsend;
  setPityWin() broadcast;
};

dclass DistributedCountryClubBattle : DistributedLevelBattle {
};

dclass DistributedClubElevator : DistributedElevatorFSM {
  setFloor(int8) broadcast ram;
  setLocked(uint16) required broadcast ram;
  setEntering(uint16) required broadcast ram;
  kickToonsOut() broadcast;
  setLatch(uint32) required broadcast ram;
};

dclass DistributedMaze : DistributedEntity {
  setRoomDoId(uint32) required broadcast ram;
  setGameStart(int16) broadcast;
  setClientTriggered() airecv clsend;
  setFinishedMaze() airecv clsend;
  setGameOver() broadcast;
  toonFinished(uint32, uint8, uint8) broadcast;
  damageMe() airecv clsend;
};

dclass DistributedBattleWaiters : DistributedBattleFinal {
};

dclass DistributedFoodBelt : DistributedObject {
  setBossCogId(uint32) required broadcast ram;
  setIndex(uint8) required broadcast ram;
  setState(char) broadcast ram;
};

dclass DistributedBanquetTable : DistributedObject {
  setIndex(uint8) required broadcast ram;
  setNumDiners(uint8) required broadcast ram;
  setBossCogId(uint32) required broadcast ram;
  setDinerInfo(uint8[], uint8[], uint8[]) required broadcast ram;
  setState(char, uint32, int8) broadcast ram;
  setDinerStatus(uint8, uint8) broadcast;
  requestControl() airecv clsend;
  requestFree(int8) airecv clsend;
  setPitcherPos(uint8, uint16%360/100, int16) broadcast clsend;
  clearSmoothing(int8) broadcast clsend;
  firingWater(int32/100, int32/100, int32/100, int32/100, int32/100, int32/100) broadcast clsend;
  waterHitBoss(uint8) broadcast clsend;
};

dclass DistributedBattleDiners : DistributedBattleFinal {
};

dclass DistributedGolfSpot : DistributedObject {
  setIndex(uint8) required broadcast ram;
  setBossCogId(uint32) required broadcast ram;
  setState(char, uint32, int8) broadcast ram;
  setGoingToReward() broadcast ram;
  requestControl() airecv clsend;
  requestFree(int8) airecv clsend;
  setGolfSpotPos(uint8, uint16%360/100, int16) broadcast clsend;
  clearSmoothing(int8) broadcast clsend;
  setSwingInfo(uint8, int16/10, uint8) broadcast clsend;
};

struct TireInput {
  int32/100 force;
  int32/100 heading;
};

dclass DistributedIceGame : DistributedMinigame {
  setForceArrowInfo(uint32, int32/100, int32/100) broadcast clsend;
  setAvatarChoice(int32/100, int32/100) airecv clsend;
  endingPositions(Coord3 []) airecv clsend;
  reportScoringMovieDone() airecv clsend;
  claimTreasure(uint8) airecv clsend;
  claimPenalty(uint8) airecv clsend;
  setTireInputs(TireInput []) broadcast;
  setTimerStartTime(int16) broadcast;
  setFinalPositions(Coord3 []) broadcast;
  setMatchAndRound(int8, int8) broadcast;
  setScores(int8, int8, int16[]) broadcast;
  setNewState(string) broadcast;
  setTreasureGrabbed(uint32, uint32) broadcast;
  setPenaltyGrabbed(uint32, uint32) broadcast;
};

dclass DistributedCogThiefGame : DistributedMinigame {
  throwingPie(uint32, int32, int32/100, int32/100, int32/100, int32/100) clsend broadcast;
  hitBySuit(uint32, int32, int8, int32/100, int32/100, int32/100) clsend broadcast airecv;
  pieHitSuit(uint32, int32, int8, int32/100, int32/100, int32/100) clsend broadcast airecv;
  cogHitBarrel(int32, int8, int8, int32/100, int32/100, int32/100) clsend airecv;
  cogAtReturnPos(int32, int8, int8) clsend airecv;
  updateSuitGoal(int32, int32, int8, int8, int64, int32/100, int32/100, int32/100) broadcast;
  makeCogCarryBarrel(int32, int32, int8, int8, int32/100, int32/100, int32/100) broadcast;
  makeCogDropBarrel(int32, int32, int8, int8, int32/100, int32/100, int32/100) broadcast;
  markBarrelStolen(int32, int32, int8) broadcast;
};

struct twoDTreasureInfo {
  uint8 treasureIndex;
  uint8 treasureValue;
};

struct twoDSectionInfo {
  uint8 sectionIndex;
  uint8 enemyIndicesSelected[];
  twoDTreasureInfo treasureIndicesSelected[];
  uint8 spawnPointIndicesSelected[];
  uint8 stomperIndicesSelected[];
};

dclass DistributedTwoDGame : DistributedMinigame {
  showShootGun(uint32, int16) clsend broadcast;
  toonHitByEnemy(uint32, int16) clsend broadcast airecv;
  toonFellDown(uint32, int16) clsend broadcast airecv;
  toonSquished(uint32, int16) clsend broadcast airecv;
  toonVictory(uint32, int16) clsend broadcast airecv;
  claimTreasure(uint8, uint8) airecv clsend;
  claimEnemyShot(uint8, uint8) airecv clsend;
  reportDone() airecv clsend;
  setSectionsSelected(twoDSectionInfo []) required broadcast ram;
  setTreasureGrabbed(uint32, uint8, uint8) broadcast;
  setEnemyShot(uint32, uint8, uint8, uint32) broadcast;
  addVictoryScore(uint32, uint8) broadcast;
  setEveryoneDone() broadcast;
};

dclass DistributedPicnicTable : DistributedNode {
  fillSlot(uint32, uint8, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10, int16, uint32) broadcast;
  emptySlot(uint32, uint8, int16) broadcast;
  requestTableState() airecv clsend;
  setTableState(uint32 [], uint8) broadcast ram;
  setGameZone(uint32, uint8) broadcast;
  setIsPlaying(uint8) broadcast ram;
  requestJoin(uint8, int16/10, int16/10, int16/10, int16/10, int16/10, int16/10) airecv clsend;
  rejectJoin() broadcast;
  requestObserve() airecv clsend;
  leaveObserve() airecv clsend;
  requestGameZone() airecv clsend;
  requestPickedGame(uint8) clsend airecv;
  requestExit() airecv clsend;
  requestZone() clsend airecv;
  announceWinner(string, uint32) broadcast;
  allowObserve() broadcast;
  allowPick() broadcast;
  setZone(uint32) broadcast;
};

dclass DistributedChineseCheckers : DistributedNode {
  requestExit() clsend airecv;
  requestBegin() clsend airecv;
  requestMove(uint8 []) clsend airecv;
  requestTimer() clsend airecv;
  requestSeatPositions() clsend airecv;
  startBeginTimer(uint16, int16) broadcast ram;
  gameStart(uint8) broadcast;
  setTableDoId(uint32) required broadcast ram;
  setGameState(uint8 [], uint8 []) required broadcast ram;
  setTimer(int16) broadcast ram required;
  setTurnTimer(int16) broadcast ram required;
  sendTurn(uint8) broadcast ram;
  requestWin() clsend airecv;
  announceWin(uint32) broadcast;
  announceSeatPositions(uint8 []) broadcast;
};

dclass DistributedCheckers : DistributedNode {
  requestExit() clsend airecv;
  requestBegin() clsend airecv;
  requestTimer() clsend airecv;
  requestMove(uint8 []) clsend airecv;
  startBeginTimer(uint16, int16) broadcast ram;
  gameStart(uint8) broadcast;
  setTableDoId(uint32) required broadcast ram;
  setGameState(uint8 [], uint8 []) required broadcast ram;
  setTimer(int16) broadcast ram required;
  setTurnTimer(int16) broadcast ram required;
  sendTurn(uint8) broadcast ram;
  requestWin() clsend airecv;
  announceWin(uint32) broadcast;
  illegalMove() broadcast;
};

dclass DistributedFindFour : DistributedNode {
  requestExit() clsend airecv;
  requestBegin() clsend airecv;
  requestMove(uint8) clsend airecv;
  requestTimer() clsend airecv;
  requestWin(uint8 []) clsend airecv;
  startBeginTimer(uint16, int16) broadcast ram;
  setTableDoId(uint32) required broadcast ram;
  setGameState(uint8 [][], uint8, uint8, uint8) required broadcast ram;
  setTimer(int16) broadcast ram required;
  setTurnTimer(int16) broadcast ram required;
  gameStart(uint8) broadcast;
  sendTurn(uint8) broadcast ram;
  announceWin(uint32) broadcast;
  announceWinLocation(uint8, uint8, uint8, uint8) broadcast;
  announceWinnerPosition(uint8, uint8, uint8, uint8) broadcast;
  illegalMove() broadcast;
  tie() broadcast;
};

dclass DistributedMailManager : DistributedObject {
  sendSimpleMail(uint32, uint32, string);
  setNumMailItems(uint32, uint32) airecv;
};

dclass DistributedPartyManager : DistributedObject {
  addParty(uint32, uint32, string, string, int8, int8, activity [], decoration [], uint32[], uint16);
  addPartyRequest(uint32, char [0-256], char [0-256], int8, int8, activity [], decoration [], uint32[]) airecv clsend;
  addPartyResponse(uint32, int8);
  addPartyResponseUdToAi(uint32, int8, uint16) airecv;
  markInviteAsReadButNotReplied(uint32, uint64);
  respondToInvite(uint32, uint32, uint16, uint64, uint8);
  respondToInviteResponse(uint32, uint16, uint64, int8, uint8) airecv;
  changePrivateRequest(uint64, int8) airecv clsend;
  changePrivateRequestAiToUd(uint32, uint64, int8);
  changePrivateResponseUdToAi(uint32, uint64, int8, int8) airecv;
  changePrivateResponse(uint64, int8, int8);
  changePartyStatusRequest(uint64, int8) airecv clsend;
  changePartyStatusRequestAiToUd(uint32, uint64, int8);
  changePartyStatusResponseUdToAi(uint32, uint64, int8, int8) airecv;
  changePartyStatusResponse(uint64, int8, int8, uint16);
  partyInfoOfHostRequestAiToUd(uint32, uint32);
  partyInfoOfHostFailedResponseUdToAi(uint32) airecv;
  partyInfoOfHostResponseUdToAi(party, uint32[]) airecv;
  givePartyRefundResponse(uint32, uint64, int8, uint16, uint32);
  getPartyZone(uint32, uint32, uint8) clsend airecv;
  receivePartyZone(uint32, uint64, uint32);
  freeZoneIdFromPlannedParty(uint32, uint32) clsend airecv;
  sendAvToPlayground(uint32, uint8);
  exitParty(uint32) clsend airecv;
  removeGuest(uint32, uint32) airecv clsend;
  partyManagerAIStartingUp(uint32, uint32);
  partyManagerAIGoingDown(uint32, uint32);
  partyHasStartedAiToUd(uint32, uint64, uint32, uint32, string);
  toonHasEnteredPartyAiToUd(uint32);
  toonHasExitedPartyAiToUd(uint32);
  partyHasFinishedUdToAllAi(uint32) airecv;
  updateToPublicPartyInfoUdToAllAi(uint32, uint64, uint32, uint32, uint8, uint8, string, uint8 [], uint64) airecv;
  updateToPublicPartyCountUdToAllAi(uint32, uint8) airecv;
  requestShardIdZoneIdForHostId(uint32) clsend airecv;
  sendShardIdZoneIdToAvatar(uint32, uint32);
  partyManagerUdStartingUp() airecv;
  updateAllPartyInfoToUd(uint32, uint64, uint32, uint32, uint8, uint8, string, uint8 [], uint64);
  forceCheckStart();
  requestMw(uint32, string, uint32, uint32);
  mwResponseUdToAllAi(uint32, string, uint32, uint32) airecv;
};

dclass DistributedObjectGlobal : DistributedObject {
};

dclass RATManager : DistributedObjectGlobal {
};

dclass AwardManager : DistributedObjectGlobal {
  giveAwardToToon(uint32, DoId, string, DoId, uint32, uint32);
};

dclass DistributedCpuInfoMgr : DistributedObjectGlobal {
  setCpuInfoToUd(uint32, uint32, string, string);
};

dclass DistributedSecurityMgr : DistributedObjectGlobal {
  requestAccountId(uint32, uint32, uint32);
  requestAccountIdResponse(uint32, uint32) airecv;
};

dclass NonRepeatableRandomSourceClient {
  getRandomSamplesReply(uint32, uint32 []) airecv;
};

dclass TTCodeRedemptionMgr : DistributedObject, NonRepeatableRandomSourceClient {
  giveAwardToToonResult(uint32, uint32);
  redeemCode(uint32, char [0-256]) airecv clsend;
  redeemCodeAiToUd(uint32, DoId, uint32, string, uint32);
  redeemCodeResultUdToAi(uint32, uint32, uint32, uint32, uint32) airecv;
  redeemCodeResult(uint32, uint32, uint32);
};

dclass NonRepeatableRandomSource : DistributedObject, NonRepeatableRandomSourceClient {
  getRandomSamples(DoId, string, uint32, uint32);
  randomSample(DoId, uint32);
  randomSampleAck() airecv;
};

dclass DistributedInGameNewsMgr : DistributedObjectGlobal {
  setLatestIssueStr(string) required broadcast ram;
  inGameNewsMgrAIStartingUp(uint32, uint32);
  newIssueUDtoAI(string) airecv;
};

dclass DistributedWhitelistMgr : DistributedObjectGlobal {
  updateWhitelist() broadcast;
  whitelistMgrAIStartingUp(uint32, uint32);
  newListUDtoAI() airecv;
};

dclass DistributedPhaseEventMgr : DistributedObject {
  setNumPhases(uint8) required broadcast ram;
  setDates(datetime []) broadcast required;
  setCurPhase(int8) required broadcast ram;
  setIsRunning(bool) required broadcast ram;
};

dclass DistributedHydrantZeroMgr : DistributedPhaseEventMgr {
};

dclass DistributedMailboxZeroMgr : DistributedPhaseEventMgr {
};

dclass DistributedTrashcanZeroMgr : DistributedPhaseEventMgr {
};

dclass DistributedSillyMeterMgr : DistributedPhaseEventMgr {
};


================================================
FILE: linux/.vscode/tasks.json
================================================
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Linux - Start Game",
            "type": "shell",
            "command": "./start-game.sh",
            "group": "test",
            "presentation": {
                "reveal": "always",
                "panel": "new"
            }
        },
        {
            "label": "Linux - Start AI Server",
            "type": "shell",
            "command": "./start-ai-server.sh",
            "group": "test",
            "presentation": {
                "reveal": "always",
                "panel": "new"
            }
        },
        {
            "label": "Linux - Start Astron Server",
            "type": "shell",
            "command": "./start-astron-server.sh",
            "group": "test",
            "presentation": {
                "reveal": "always",
                "panel": "new"
            }
        },
        {
            "label": "Linux - Start UberDOG Server",
            "type": "shell",
            "command": "./start-uberdog-server.sh",
            "group": "test",
            "presentation": {
                "reveal": "always",
                "panel": "new"
            }
        },
    ]
}


================================================
FILE: linux/start-ai-server.sh
================================================
#!/bin/sh
cd ..

BASE_CHANNEL=401000000
MAX_CHANNELS=999999
STATE_SERVER=4002
MESSAGE_DIRECTOR_IP="127.0.0.1:7199"
EVENT_LOGGER_IP="127.0.0.1:7197"
DISTRICT_NAME="Toon Valley"

python3 -m toontown.ai.AIStart --base-channel ${BASE_CHANNEL} \
               --max-channels ${MAX_CHANNELS} --stateserver ${STATE_SERVER} \
               --messagedirector-ip ${MESSAGE_DIRECTOR_IP} \
               --eventlogger-ip ${EVENT_LOGGER_IP} --district-name "$DISTRICT_NAME"


================================================
FILE: linux/start-astron-server.sh
================================================
#!/bin/sh
cd ../astron/linux

# This assumes that your astrond build is located in the
# "astron/linux" directory.
./astrond --loglevel info ../config/astrond.yml


================================================
FILE: linux/start-game.sh
================================================
#!/bin/sh
cd ..

export LOGIN_TOKEN=dev

python3 -m toontown.launcher.QuickStartLauncher


================================================
FILE: linux/start-uberdog-server.sh
================================================
#!/bin/sh
cd ..

MAX_CHANNELS=999999
STATE_SERVER=4002
MESSAGE_DIRECTOR_IP="127.0.0.1:7199"
EVENT_LOGGER_IP="127.0.0.1:7197"
BASE_CHANNEL=1000000

python3 -m toontown.uberdog.UDStart --base-channel ${BASE_CHANNEL} \
               --max-channels ${MAX_CHANNELS} --stateserver ${STATE_SERVER} \
               --messagedirector-ip ${MESSAGE_DIRECTOR_IP} \
               --eventlogger-ip ${EVENT_LOGGER_IP}


================================================
FILE: otp/__init__.py
================================================


================================================
FILE: otp/ai/AIBase.py
================================================
from panda3d.core import *
from direct.directnotify.DirectNotifyGlobal import *
from direct.showbase import DConfig
from direct.showbase.MessengerGlobal import *
from direct.showbase.BulletinBoardGlobal import *
from direct.task.TaskManagerGlobal import *
from direct.showbase.JobManagerGlobal import *
from direct.showbase.EventManagerGlobal import *
from direct.showbase.PythonUtil import *
from otp.otpbase import PythonUtil
from direct.interval.IntervalManager import ivalMgr
from direct.task import Task
from direct.showbase import EventManager
from direct.showbase import ExceptionVarDump
import math
import sys
import time
import gc

class AIBase:
    notify = directNotify.newCategory('AIBase')

    def __init__(self):
        self.config = DConfig
        __builtins__['__dev__'] = self.config.GetBool('want-dev', 0)
        __builtins__['__astron__'] = self.config.GetBool('astron-support', 1)
        __builtins__['__execWarnings__'] = self.config.GetBool('want-exec-warnings', 0)
        logStackDump = (self.config.GetBool('log-stack-dump', (not __debug__)) or self.config.GetBool('ai-log-stack-dump', (not __debug__)))
        uploadStackDump = self.config.GetBool('upload-stack-dump', 0)
        if logStackDump or uploadStackDump:
            ExceptionVarDump.install(logStackDump, uploadStackDump)
        if self.config.GetBool('use-vfs', 1):
            vfs = VirtualFileSystem.getGlobalPtr()
        else:
            vfs = None
        self.wantTk = self.config.GetBool('want-tk', 0)
        self.AISleep = self.config.GetFloat('ai-sleep', 0.04)
        self.AIRunningNetYield = self.config.GetBool('ai-running-net-yield', 0)
        self.AIForceSleep = self.config.GetBool('ai-force-sleep', 0)
        self.eventMgr = eventMgr
        self.messenger = messenger
        self.bboard = bulletinBoard
        self.taskMgr = taskMgr
        Task.TaskManager.taskTimerVerbose = self.config.GetBool('task-timer-verbose', 0)
        Task.TaskManager.extendedExceptions = self.config.GetBool('extended-exceptions', 0)
        self.sfxManagerList = None
        self.musicManager = None
        self.jobMgr = jobMgr
        self.hidden = NodePath('hidden')
        self.graphicsEngine = GraphicsEngine()
        globalClock = ClockObject.getGlobalClock()
        self.trueClock = TrueClock.getGlobalPtr()
        globalClock.setRealTime(self.trueClock.getShortTime())
        globalClock.setAverageFrameRateInterval(30.0)
        globalClock.tick()
        taskMgr.globalClock = globalClock
        __builtins__['ostream'] = Notify.out()
        __builtins__['globalClock'] = globalClock
        __builtins__['vfs'] = vfs
        __builtins__['hidden'] = self.hidden
        AIBase.notify.info('__dev__ == %s' % __dev__)
        AIBase.notify.info('__astron__ == %s' % __astron__)
        PythonUtil.recordFunctorCreationStacks()
        __builtins__['wantTestObject'] = self.config.GetBool('want-test-object', 0)
        self.wantStats = self.config.GetBool('want-pstats', 0)
        Task.TaskManager.pStatsTasks = self.config.GetBool('pstats-tasks', 0)
        taskMgr.resumeFunc = PStatClient.resumeAfterPause
        defaultValue = 1
        if __dev__:
            defaultValue = 0
        wantFakeTextures = self.config.GetBool('want-fake-textures-ai', defaultValue)
        if wantFakeTextures:
            loadPrcFileData('aibase', 'textures-header-only 1')
        self.wantPets = self.config.GetBool('want-pets', 1)
        if self.wantPets:
            if game.name == 'toontown':
                from toontown.pets import PetConstants
                self.petMoodTimescale = self.config.GetFloat('pet-mood-timescale', 1.0)
                self.petMoodDriftPeriod = self.config.GetFloat('pet-mood-drift-period', PetConstants.MoodDriftPeriod)
                self.petThinkPeriod = self.config.GetFloat('pet-think-period', PetConstants.ThinkPeriod)
                self.petMovePeriod = self.config.GetFloat('pet-move-period', PetConstants.MovePeriod)
                self.petPosBroadcastPeriod = self.config.GetFloat('pet-pos-broadcast-period', PetConstants.PosBroadcastPeriod)
        self.wantBingo = self.config.GetBool('want-fish-bingo', 1)
        self.wantKarts = self.config.GetBool('wantKarts', 1)
        self.newDBRequestGen = self.config.GetBool('new-database-request-generate', 1)
        self.waitShardDelete = self.config.GetBool('wait-shard-delete', 1)
        self.blinkTrolley = self.config.GetBool('blink-trolley', 0)
        self.fakeDistrictPopulations = self.config.GetBool('fake-district-populations', 0)
        self.wantSwitchboard = self.config.GetBool('want-switchboard', 0)
        self.wantSwitchboardHacks = self.config.GetBool('want-switchboard-hacks', 0)
        self.GEMdemoWhisperRecipientDoid = self.config.GetBool('gem-demo-whisper-recipient-doid', 0)
        self.sqlAvailable = self.config.GetBool('sql-available', 1)
        self.createStats()
        self.restart()
        return

    def setupCpuAffinities(self, minChannel):
        if game.name == 'uberDog':
            affinityMask = self.config.GetInt('uberdog-cpu-affinity-mask', -1)
        else:
            affinityMask = self.config.GetInt('ai-cpu-affinity-mask', -1)
        if affinityMask != -1:
            TrueClock.getGlobalPtr().setCpuAffinity(affinityMask)
        else:
            autoAffinity = self.config.GetBool('auto-single-cpu-affinity', 0)
            if game.name == 'uberDog':
                affinity = self.config.GetInt('uberdog-cpu-affinity', -1)
                if autoAffinity and affinity == -1:
                    affinity = 2
            else:
                affinity = self.config.GetInt('ai-cpu-affinity', -1)
                if autoAffinity and affinity == -1:
                    affinity = 1
            if affinity != -1:
                TrueClock.getGlobalPtr().setCpuAffinity(1 << affinity)
            elif autoAffinity:
                if game.name == 'uberDog':
                    channelSet = int(minChannel / 1000000)
                    channelSet -= 240
                    affinity = channelSet + 3
                    TrueClock.getGlobalPtr().setCpuAffinity(1 << affinity % 4)

    def taskManagerDoYield(self, frameStartTime, nextScheuledTaksTime):
        minFinTime = frameStartTime + self.MaxEpockSpeed
        if nextScheuledTaksTime > 0 and nextScheuledTaksTime < minFinTime:
            minFinTime = nextScheuledTaksTime
        delta = minFinTime - globalClock.getRealTime()
        while delta > 0.002:
            time.sleep(delta)
            delta = minFinTime - globalClock.getRealTime()

    def createStats(self, hostname = None, port = None):
        if not self.wantStats:
            return False
        if PStatClient.isConnected():
            PStatClient.disconnect()
        if hostname is None:
            hostname = ''
        if port is None:
            port = -1
        PStatClient.connect(hostname, port)
        return PStatClient.isConnected()

    def __sleepCycleTask(self, task):
        time.sleep(self.AISleep)
        return Task.cont

    def __resetPrevTransform(self, state):
        PandaNode.resetAllPrevTransform()
        return Task.cont

    def __ivalLoop(self, state):
        ivalMgr.step()
        return Task.cont

    def __igLoop(self, state):
        self.graphicsEngine.renderFrame()
        return Task.cont

    def shutdown(self):
        self.taskMgr.remove('ivalLoop')
        self.taskMgr.remove('igLoop')
        self.taskMgr.remove('aiSleep')
        self.eventMgr.shutdown()

    def restart(self):
        self.shutdown()
        self.taskMgr.add(self.__resetPrevTransform, 'resetPrevTransform', priority=-51)
        self.taskMgr.add(self.__ivalLoop, 'ivalLoop', priority=20)
        self.taskMgr.add(self.__igLoop, 'igLoop', priority=50)
        if self.AISleep >= 0 and (not self.AIRunningNetYield or self.AIForceSleep):
            self.taskMgr.add(self.__sleepCycleTask, 'aiSleep', priority=55)
        self.eventMgr.restart()

    def getRepository(self):
        return self.air

    def run(self):
        self.taskMgr.run()


================================================
FILE: otp/ai/AIBaseGlobal.py
================================================
from .AIBase import *
__builtins__['simbase'] = AIBase()
__builtins__['ostream'] = Notify.out()
__builtins__['run'] = simbase.run
__builtins__['taskMgr'] = simbase.taskMgr
__builtins__['jobMgr'] = simbase.jobMgr
__builtins__['eventMgr'] = simbase.eventMgr
__builtins__['messenger'] = simbase.messenger
__builtins__['bboard'] = simbase.bboard
__builtins__['config'] = simbase.config
__builtins__['directNotify'] = directNotify
from direct.showbase import Loader
simbase.loader = Loader.Loader(simbase)
__builtins__['loader'] = simbase.loader
directNotify.setDconfigLevels()

def inspect(anObject):
    from direct.tkpanels import Inspector
    Inspector.inspect(anObject)


__builtins__['inspect'] = inspect
if not __debug__ and __dev__:
    notify = directNotify.newCategory('ShowBaseGlobal')
    notify.error("You must set 'want-dev' to false in non-debug mode.")
taskMgr.finalInit()


================================================
FILE: otp/ai/AIInterestHandles.py
================================================
PIRATES_CARDGAME = 1
PIRATES_CREW = 2
PIRATES_GUILD = 3
PIRATES_FRIENDS = 4
PIRATES_BAND = 5
PIRATES_PVP_RESPAWN = 6
PIRATES_TREASUREMAP = 7
PIRATES_SHIPPVP = 8


================================================
FILE: otp/ai/AIMsgTypes.py
================================================
from otp.distributed.OtpDoGlobals import *
from direct.showbase.PythonUtil import invertDictLossless
OTP_SERVER_ROOT_DO_ID = 4007
CHANNEL_CLIENT_BROADCAST = 4014
BAD_CHANNEL_ID = 0
BAD_ZONE_ID = 0
BAD_DO_ID = 0
CONTROL_MESSAGE = 4001
CONTROL_SET_CHANNEL = 2001
CONTROL_REMOVE_CHANNEL = 2002
CONTROL_SET_CON_NAME = 2004
CONTROL_SET_CON_URL = 2005
CONTROL_ADD_RANGE = 2008
CONTROL_REMOVE_RANGE = 2009
CONTROL_ADD_POST_REMOVE = 2010
CONTROL_CLEAR_POST_REMOVE = 2011
AIMsgName2Id = {'STATESERVER_OBJECT_GENERATE_WITH_REQUIRED': 2001,
 'STATESERVER_OBJECT_GENERATE_WITH_REQUIRED_OTHER': 2003,
 'STATESERVER_OBJECT_UPDATE_FIELD': 2004,
 'STATESERVER_OBJECT_UPDATE_FIELD_MULTIPLE': 2005,
 'STATESERVER_OBJECT_DELETE_RAM': 2007,
 'STATESERVER_OBJECT_SET_ZONE': 2008,
 'STATESERVER_OBJECT_CHANGE_ZONE': 2009,
 'STATESERVER_OBJECT_NOTFOUND': 2015,
 'STATESERVER_QUERY_OBJECT_ALL': 2020,
 'STATESERVER_QUERY_ZONE_OBJECT_ALL': 2021,
 'STATESERVER_OBJECT_LOCATE': 2022,
 'STATESERVER_OBJECT_LOCATE_RESP': 2023,
 'STATESERVER_OBJECT_QUERY_FIELD': 2024,
 'STATESERVER_QUERY_OBJECT_ALL_RESP': 2030,
 'STATESERVER_SHARD_REST': 2061,
 'STATESERVER_ADD_AI_RECV': 2045,
 'STATESERVER_QUERY_ZONE_OBJECT_ALL_DONE': 2046,
 'STATESERVER_OBJECT_CREATE_WITH_REQUIRED_CONTEXT': 2050,
 'STATESERVER_OBJECT_CREATE_WITH_REQUIR_OTHER_CONTEXT': 2051,
 'STATESERVER_OBJECT_CREATE_WITH_REQUIRED_CONTEXT_RESP': 2052,
 'STATESERVER_OBJECT_CREATE_WITH_REQUIR_OTHER_CONTEXT_RESP': 2053,
 'STATESERVER_OBJECT_DELETE_DISK': 2060,
 'STATESERVER_OBJECT_QUERY_FIELD_RESP': 2062,
 'STATESERVER_OBJECT_ENTERZONE_WITH_REQUIRED_OTHER': 2066,
 'STATESERVER_OBJECT_ENTER_AI_RECV': 2067,
 'STATESERVER_OBJECT_LEAVING_AI_INTEREST': 2033,
 'STATESERVER_OBJECT_ENTER_OWNER_RECV': 2068,
 'STATESERVER_OBJECT_CHANGE_OWNER_RECV': 2069,
 'STATESERVER_OBJECT_SET_OWNER_RECV': 2070,
 'STATESERVER_OBJECT_QUERY_FIELDS': 2080,
 'STATESERVER_OBJECT_QUERY_FIELDS_RESP': 2081,
 'STATESERVER_OBJECT_QUERY_FIELDS_STRING': 2082,
 'STATESERVER_OBJECT_QUERY_MANAGING_AI': 2083,
 'STATESERVER_BOUNCE_MESSAGE': 2086,
 'STATESERVER_QUERY_OBJECT_CHILDREN_LOCAL': 2087,
 'STATESERVER_QUERY_OBJECT_CHILDREN_LOCAL_DONE': 2089,
 'STATESERVER_QUERY_OBJECT_CHILDREN_RESP': 2087,
 'ACCOUNT_AVATAR_USAGE': 3005,
 'ACCOUNT_ACCOUNT_USAGE': 3006,
 'CLIENT_AGENT_OPEN_CHANNEL': 3104,
 'CLIENT_AGENT_CLOSE_CHANNEL': 3105,
 'CLIENT_AGENT_SET_INTEREST': 3106,
 'CLIENT_AGENT_REMOVE_INTEREST': 3107,
 'CHANNEL_PUPPET_ACTION': 4004,
 'DBSERVER_MAKE_FRIENDS': 1017,
 'DBSERVER_MAKE_FRIENDS_RESP': 1031,
 'DBSERVER_REQUEST_SECRET': 1025,
 'DBSERVER_REQUEST_SECRET_RESP': 1026,
 'DBSERVER_SUBMIT_SECRET': 1027,
 'DBSERVER_SUBMIT_SECRET_RESP': 1028,
 'DBSERVER_CREATE_STORED_OBJECT': 1003,
 'DBSERVER_CREATE_STORED_OBJECT_RESP': 1004,
 'DBSERVER_DELETE_STORED_OBJECT': 1008,
 'DBSERVER_GET_STORED_VALUES': 1012,
 'DBSERVER_GET_STORED_VALUES_RESP': 1013,
 'DBSERVER_SET_STORED_VALUES': 1014,
 'SERVER_PING': 5002}
AIMsgId2Names = invertDictLossless(AIMsgName2Id)
if not __debug__ or __execWarnings__:
    print('EXECWARNING AIMsgTypes: %s' % AIMsgName2Id)
    printStack()
for name, value in list(AIMsgName2Id.items()):
    exec('%s = %s' % (name, value))

del name
del value
DBSERVER_ID = 4003


================================================
FILE: otp/ai/AIZoneData.py
================================================
from panda3d.core import *
from direct.distributed import ParentMgr
from direct.directnotify.DirectNotifyGlobal import directNotify
from direct.task import Task
from direct.showbase import LeakDetectors
from otp.otpbase import OTPGlobals
import random

class AIZoneData:
    notify = directNotify.newCategory('AIZoneData')

    def __init__(self, air, parentId, zoneId):
        self._air = air
        self._parentId = parentId
        self._zoneId = zoneId
        self._data = self._air.getZoneDataStore().getDataForZone(self._parentId, self._zoneId)

    def destroy(self):
        del self._data
        self._air.getZoneDataStore().releaseDataForZone(self._parentId, self._zoneId)
        del self._zoneId
        del self._parentId
        del self._air

    def __getattr__(self, attr):
        return getattr(self._data, attr)


class AIZoneDataObj:
    notify = directNotify.newCategory('AIZoneDataObj')
    DefaultCTravName = 'default'

    def __init__(self, parentId, zoneId):
        self._parentId = parentId
        self._zoneId = zoneId
        self._refCount = 0
        self._collTravs = {}
        self._collTravsStarted = set()

    def __str__(self):
        output = str(self._collTravs)
        output += '\n'
        totalColliders = 0
        totalTraversers = 0
        for currCollTrav in list(self._collTravs.values()):
            totalTraversers += 1
            totalColliders += currCollTrav.getNumColliders()

        output += 'Num traversers: %s  Num total colliders: %s' % (totalTraversers, totalColliders)
        return output

    def _incRefCount(self):
        self._refCount += 1

    def _decRefCount(self):
        self._refCount -= 1

    def _getRefCount(self):
        return self._refCount

    def destroy(self):
        for name in list(self._collTravsStarted):
            self.stopCollTrav(cTravName=name)

        del self._collTravsStarted
        del self._collTravs
        if hasattr(self, '_nonCollidableParent'):
            self._nonCollidableParent.removeNode()
            del self._nonCollidableParent
        if hasattr(self, '_render'):
            if hasattr(self, '_renderLeakDetector'):
                self._renderLeakDetector.destroy()
                del self._renderLeakDetector
            self._render.removeNode()
            del self._render
        if hasattr(self, '_parentMgr'):
            self._parentMgr.destroy()
            del self._parentMgr
        del self._zoneId
        del self._parentId

    def getLocation(self):
        return (self._parentId, self._zoneId)

    def getRender(self):
        if not hasattr(self, '_render'):
            self._render = NodePath('render-%s-%s' % (self._parentId, self._zoneId))
            if config.GetBool('leak-scene-graph', 0):
                self._renderLeakDetector = LeakDetectors.SceneGraphLeakDetector(self._render)
        return self._render

    def getNonCollidableParent(self):
        if not hasattr(self, '_nonCollidableParent'):
            render = self.getRender()
            self._nonCollidableParent = render.attachNewNode('nonCollidables')
        if __dev__:
            pass
        return self._nonCollidableParent

    def getParentMgr(self):
        if not hasattr(self, '_parentMgr'):
            self._parentMgr = ParentMgr.ParentMgr()
            self._parentMgr.registerParent(OTPGlobals.SPHidden, hidden)
            self._parentMgr.registerParent(OTPGlobals.SPRender, self.getRender())
        return self._parentMgr

    def hasCollTrav(self, name = None):
        if name is None:
            name = AIZoneDataObj.DefaultCTravName
        return name in self._collTravs

    def getCollTrav(self, name = None):
        if name is None:
            name = AIZoneDataObj.DefaultCTravName
        if name not in self._collTravs:
            self._collTravs[name] = CollisionTraverser('cTrav-%s-%s-%s' % (name, self._parentId, self._zoneId))
        return self._collTravs[name]

    def removeCollTrav(self, name):
        if name in self._collTravs:
            del self._collTravs[name]

    def _getCTravTaskName(self, name = None):
        if name is None:
            name = AIZoneDataObj.DefaultCTravName
        return 'collTrav-%s-%s-%s' % (name, self._parentId, self._zoneId)

    def _doCollisions(self, task = None, topNode = None, cTravName = None):
        render = self.getRender()
        curTime = globalClock.getFrameTime()
        render.setTag('lastTraverseTime', str(curTime))
        if topNode is not None:
            if not render.isAncestorOf(topNode):
                self.notify.warning('invalid topNode for collision traversal in %s: %s' % (self.getLocation(), topNode))
        else:
            topNode = render
        if cTravName is None:
            cTravName = AIZoneDataObj.DefaultCTravName
        collTrav = self._collTravs[cTravName]
        messenger.send('preColl-' + collTrav.getName())
        collTrav.traverse(topNode)
        messenger.send('postColl-' + collTrav.getName())
        return Task.cont

    def doCollTrav(self, topNode = None, cTravName = None):
        self.getCollTrav(cTravName)
        self._doCollisions(topNode=topNode, cTravName=cTravName)

    def startCollTrav(self, respectPrevTransform = 1, cTravName = None):
        if cTravName is None:
            cTravName = AIZoneDataObj.DefaultCTravName
        if cTravName not in self._collTravsStarted:
            self.getCollTrav(name=cTravName)
            taskMgr.add(self._doCollisions, self._getCTravTaskName(name=cTravName), priority=OTPGlobals.AICollisionPriority, extraArgs=[self._zoneId])
            self._collTravsStarted.add(cTravName)
        self.setRespectPrevTransform(respectPrevTransform, cTravName=cTravName)
        return

    def stopCollTrav(self, cTravName = None):
        if cTravName is None:
            cTravName = AIZoneDataObj.DefaultCTravName
        self.notify.debug('stopCollTrav(%s, %s, %s)' % (cTravName, self._parentId, self._zoneId))
        if cTravName in self._collTravsStarted:
            self.notify.info('removing %s collision traversal for (%s, %s)' % (cTravName, self._parentId, self._zoneId))
            taskMgr.remove(self._getCTravTaskName(name=cTravName))
            self._collTravsStarted.remove(cTravName)
        return

    def setRespectPrevTransform(self, flag, cTravName = None):
        if cTravName is None:
            cTravName = AIZoneDataObj.DefaultCTravName
        self._collTravs[cTravName].setRespectPrevTransform(flag)
        return

    def getRespectPrevTransform(self, cTravName = None):
        if cTravName is None:
            cTravName = AIZoneDataObj.DefaultCTravName
        return self._collTravs[cTravName].getRespectPrevTransform()


class AIZoneDataStore:
    notify = directNotify.newCategory('AIZoneDataStore')

    def __init__(self):
        self._zone2data = {}

    def destroy(self):
        for zone, data in list(self._zone2data.items()):
            data.destroy()

        del self._zone2data

    def hasDataForZone(self, parentId, zoneId):
        key = (parentId, zoneId)
        return key in self._zone2data

    def getDataForZone(self, parentId, zoneId):
        key = (parentId, zoneId)
        if key not in self._zone2data:
            self._zone2data[key] = AIZoneDataObj(parentId, zoneId)
            self.printStats()
        data = self._zone2data[key]
        data._incRefCount()
        return data

    def releaseDataForZone(self, parentId, zoneId):
        key = (parentId, zoneId)
        data = self._zone2data[key]
        data._decRefCount()
        refCount = data._getRefCount()
        if refCount == 0:
            del self._zone2data[key]
            data.destroy()
            self.printStats()

    def printStats(self):
        self.notify.debug('%s zones have zone data allocated' % len(self._zone2data))


================================================
FILE: otp/ai/BanManagerAI.py
================================================
import urllib.request, urllib.parse, urllib.error
import os
from panda3d.core import HTTPClient, Ramfile
from direct.directnotify import DirectNotifyGlobal

class BanManagerAI:
    notify = DirectNotifyGlobal.directNotify.newCategory('BanManagerAI')
    BanUrl = simbase.config.GetString('ban-base-url', 'http://vapps.disl.starwave.com:8005/dis-hold/action/event')
    App = simbase.config.GetString('ban-app-name', 'TTWorldAI')
    Product = simbase.config.GetString('ban-product', 'Toontown')
    EventName = simbase.config.GetString('ban-event-name', 'tthackattempt')

    def __init__(self):
        self.curBanRequestNum = 0
        self.channels = {}
        self.ramFiles = {}

    def ban(self, avatarId, dislid, comment):
        parameters = ''
        parameters += 'app=%s' % self.App
        parameters += '&product=%s' % self.Product
        parameters += '&user_id=%s' % dislid
        parameters += '&event_name=%s' % self.EventName
        commentWithAvatarId = 'avId-%s ' % avatarId
        commentWithAvatarId += comment
        parameters += '&comments=%s' % urllib.parse.quote(str(commentWithAvatarId))
        baseUrlToUse = self.BanUrl
        osBaseUrl = os.getenv('BAN_URL')
        if osBaseUrl:
            baseUrlToUse = osBaseUrl
        fullUrl = baseUrlToUse + '?' + parameters
        self.notify.info('ban request %s dislid=%s comment=%s fullUrl=%s' % (self.curBanRequestNum,
         dislid,
         comment,
         fullUrl))
        simbase.air.writeServerEvent('ban_request', avatarId, '%s|%s|%s' % (dislid, comment, fullUrl))
        if simbase.config.GetBool('do-actual-ban', True):
            newTaskName = 'ban-task-%d' % self.curBanRequestNum
            newTask = taskMgr.add(self.doBanUrlTask, newTaskName)
            newTask.banRequestNum = self.curBanRequestNum
            http = HTTPClient.getGlobalPtr()
            channel = http.makeChannel(False)
            self.channels[self.curBanRequestNum] = channel
            rf = Ramfile()
            self.ramFiles[self.curBanRequestNum] = rf
            channel.beginGetDocument(fullUrl)
            channel.downloadToRam(rf)
        self.curBanRequestNum += 1

    def cleanupBanReq(self, banReq):
        channel = self.channels.get(banReq)
        if channel:
            del self.channels[banReq]
        ramfile = self.ramFiles.get(banReq)
        if ramfile:
            del self.ramFiles[banReq]

    def doBanUrlTask(self, task):
        banReq = task.banRequestNum
        channel = self.channels.get(banReq)
        if channel:
            if channel.run():
                return task.cont
        else:
            self.notify.warning('no channel for ban req %s' % banReq)
            self.cleanupBanReq(banReq)
            return task.done
        result = ''
        ramfile = self.ramFiles.get(banReq)
        if ramfile:
            result = ramfile.getData()
        self.notify.info('done processing ban request %s, ramFile=%s' % (banReq, result))
        self.cleanupBanReq(banReq)
        return task.done


================================================
FILE: otp/ai/Barrier.py
================================================
from otp.ai.AIBase import *
from direct.task import Task
from direct.showbase import DirectObject
import random

class Barrier(DirectObject.DirectObject):
    notify = directNotify.newCategory('Barrier')

    def __init__(self, name, uniqueName, avIdList, timeout, clearedFunc = None, timeoutFunc = None, doneFunc = None):
        self.name = name
        self.uniqueName = uniqueName + '-Barrier'
        self.avIdList = avIdList[:]
        self.pendingAvatars = self.avIdList[:]
        self.timeout = timeout
        self.clearedFunc = clearedFunc
        self.timeoutFunc = timeoutFunc
        self.doneFunc = doneFunc
        if len(self.pendingAvatars) == 0:
            self.notify.debug('%s: barrier with empty list' % self.uniqueName)
            self.active = 0
            if self.clearedFunc:
                self.clearedFunc()
            if self.doneFunc:
                self.doneFunc(self.avIdList)
            return
        self.taskName = self.uniqueName + '-Timeout'
        origTaskName = self.taskName
        while taskMgr.hasTaskNamed(self.taskName):
            self.taskName = origTaskName + '-' + str(random.randint(0, 10000))

        taskMgr.doMethodLater(self.timeout, self.__timerExpired, self.taskName)
        for avId in self.avIdList:
            event = simbase.air.getAvatarExitEvent(avId)
            self.acceptOnce(event, self.__handleUnexpectedExit, extraArgs=[avId])

        self.notify.debug('%s: expecting responses from %s within %s seconds' % (self.uniqueName, self.avIdList, self.timeout))
        self.active = 1

    def cleanup(self):
        if self.active:
            taskMgr.remove(self.taskName)
            self.active = 0
        self.ignoreAll()

    def clear(self, avId):
        if avId not in self.pendingAvatars:
            self.notify.warning('%s: tried to clear %s, who was not listed.' % (self.uniqueName, avId))
            return
        self.notify.debug('%s: clearing avatar %s' % (self.uniqueName, avId))
        self.pendingAvatars.remove(avId)
        if len(self.pendingAvatars) == 0:
            self.notify.debug('%s: barrier cleared by %s' % (self.uniqueName, self.avIdList))
            self.cleanup()
            if self.clearedFunc:
                self.clearedFunc()
            if self.doneFunc:
                self.doneFunc(self.avIdList)

    def isActive(self):
        return self.active

    def getPendingAvatars(self):
        return self.pendingAvatars[:]

    def __timerExpired(self, task):
        self.notify.warning('%s: timeout expired; responses not received from %s' % (self.uniqueName, self.pendingAvatars))
        self.cleanup()
        if self.timeoutFunc:
            self.timeoutFunc(self.pendingAvatars[:])
        if self.doneFunc:
            clearedAvIds = self.avIdList[:]
            for avId in self.pendingAvatars:
                clearedAvIds.remove(avId)

            self.doneFunc(clearedAvIds)
        return Task.done

    def __handleUnexpectedExit(self, avId):
        if avId not in self.avIdList:
            return
        self.avIdList.remove(avId)
        if avId in self.pendingAvatars:
            self.clear(avId)


================================================
FILE: otp/ai/GarbageLeakServerEventAggregator.py
================================================
from direct.showbase.DirectObject import DirectObject
from direct.showbase import GarbageReport

class GarbageLeakServerEventAggregator(DirectObject):

    def __init__(self, cr):
        self.cr = cr
        self._doLaterName = None
        self._sentLeakDesc2num = {}
        self._curLeakDesc2num = {}
        self.accept(GarbageReport.GarbageCycleCountAnnounceEvent, self._handleCycleCounts)
        return

    def destroy(self):
        self._stopSending()
        self.ignoreAll()
        del self.cr

    def _handleCycleCounts(self, desc2num):
        self._curLeakDesc2num = desc2num
        self._startSending()

    def _startSending(self):
        if not self._doLaterName:
            self._sendLeaks()
            self._doLaterName = uniqueName('%s-sendGarbageLeakInfo' % self.__class__.__name__)
            self.doMethodLater(60 * 60.0, self._sendLeaks, self._doLaterName)

    def _stopSending(self):
        if self._doLaterName:
            self.removeTask(self._doLaterName)
        self._doLaterName = None
        return

    def _sendLeaks(self, task = None):
        for desc, curNum in self._curLeakDesc2num.items():
            self._sentLeakDesc2num.setdefault(desc, 0)
            num = curNum - self._sentLeakDesc2num[desc]
            if num > 0:
                base.cr.timeManager.d_setClientGarbageLeak(num, desc)
                self._sentLeakDesc2num[desc] = curNum

        if task:
            return task.again


================================================
FILE: otp/ai/TimeManager.py
================================================
from panda3d.core import *
from direct.showbase.DirectObject import *
from direct.distributed.ClockDelta import *
from direct.task import Task
from direct.distributed import DistributedObject
from direct.directnotify import DirectNotifyGlobal
from otp.otpbase import OTPGlobals
from direct.showbase import PythonUtil
from otp.otpbase.PythonUtil import describeException
from direct.showbase import GarbageReport
import base64
import time
import os
import sys
import re

class TimeManager(DistributedObject.DistributedObject):
    notify = DirectNotifyGlobal.directNotify.newCategory('TimeManager')
    neverDisable = 1

    def __init__(self, cr):
        DistributedObject.DistributedObject.__init__(self, cr)
        self.updateFreq = base.config.GetFloat('time-manager-freq', 1800)
        self.minWait = base.config.GetFloat('time-manager-min-wait', 10)
        self.maxUncertainty = base.config.GetFloat('time-manager-max-uncertainty', 1)
        self.maxAttempts = base.config.GetInt('time-manager-max-attempts', 5)
        self.extraSkew = base.config.GetInt('time-manager-extra-skew', 0)
        if self.extraSkew != 0:
            self.notify.info('Simulating clock skew of %0.3f s' % self.extraSkew)
        self.reportFrameRateInterval = base.config.GetDouble('report-frame-rate-interval', 300.0)
        self.talkResult = 0
        self.thisContext = -1
        self.nextContext = 0
        self.attemptCount = 0
        self.start = 0
        self.lastAttempt = -self.minWait * 2
        self.setFrameRateInterval(self.reportFrameRateInterval)
        self._numClientGarbage = 0

    def generate(self):
        self._gotFirstTimeSync = False
        if self.cr.timeManager != None:
            self.cr.timeManager.delete()
        self.cr.timeManager = self
        DistributedObject.DistributedObject.generate(self)
        self.accept(OTPGlobals.SynchronizeHotkey, self.handleHotkey)
        self.accept('clock_error', self.handleClockError)
        if __dev__ and base.config.GetBool('enable-garbage-hotkey', 0):
            self.accept(OTPGlobals.DetectGarbageHotkey, self.handleDetectGarbageHotkey)
        if self.updateFreq > 0:
            self.startTask()
        return

    def announceGenerate(self):
        DistributedObject.DistributedObject.announceGenerate(self)
        self.synchronize('TimeManager.announceGenerate')

    def gotInitialTimeSync(self):
        return self._gotFirstTimeSync

    def disable(self):
        self.ignore(OTPGlobals.SynchronizeHotkey)
        if __dev__:
            self.ignore(OTPGlobals.DetectGarbageHotkey)
        self.ignore('clock_error')
        self.stopTask()
        taskMgr.remove('frameRateMonitor')
        if self.cr.timeManager == self:
            self.cr.timeManager = None
        del self._gotFirstTimeSync
        DistributedObject.DistributedObject.disable(self)
        return

    def delete(self):
        self.ignore(OTPGlobals.SynchronizeHotkey)
        self.ignore(OTPGlobals.DetectGarbageHotkey)
        self.ignore('clock_error')
        self.stopTask()
        taskMgr.remove('frameRateMonitor')
        if self.cr.timeManager == self:
            self.cr.timeManager = None
        DistributedObject.DistributedObject.delete(self)
        return

    def startTask(self):
        self.stopTask()
        taskMgr.doMethodLater(self.updateFreq, self.doUpdate, 'timeMgrTask')

    def stopTask(self):
        taskMgr.remove('timeMgrTask')

    def doUpdate(self, task):
        self.synchronize('timer')
        taskMgr.doMethodLater(self.updateFreq, self.doUpdate, 'timeMgrTask')
        return Task.done

    def handleHotkey(self):
        self.lastAttempt = -self.minWait * 2
        if self.synchronize('user hotkey'):
            self.talkResult = 1
        else:
            base.localAvatar.setChatAbsolute('Too soon.', CFSpeech | CFTimeout)

    def handleClockError(self):
        self.synchronize('clock error')

    def synchronize(self, description):
        now = globalClock.getRealTime()
        if now - self.lastAttempt < self.minWait:
            self.notify.debug('Not resyncing (too soon): %s' % description)
            return 0
        self.talkResult = 0
        self.thisContext = self.nextContext
        self.attemptCount = 0
        self.nextContext = self.nextContext + 1 & 255
        self.notify.info('Clock sync: %s' % description)
        self.start = now
        self.lastAttempt = now
        self.sendUpdate('requestServerTime', [self.thisContext])
        return 1

    def serverTime(self, context, timestamp, timeOfDay):
        end = globalClock.getRealTime()
        aiTimeSkew = timeOfDay - self.cr.getServerTimeOfDay()
        if context != self.thisContext:
            self.notify.info('Ignoring TimeManager response for old context %d' % context)
            return
        elapsed = end - self.start
        self.attemptCount += 1
        self.notify.info('Clock sync roundtrip took %0.3f ms' % (elapsed * 1000.0))
        self.notify.info('AI time delta is %s from server delta' % PythonUtil.formatElapsedSeconds(aiTimeSkew))
        average = (self.start + end) / 2.0 - self.extraSkew
        uncertainty = (end - self.start) / 2.0 + abs(self.extraSkew)
        globalClockDelta.resynchronize(average, timestamp, uncertainty)
        self.notify.info('Local clock uncertainty +/- %.3f s' % globalClockDelta.getUncertainty())
        if globalClockDelta.getUncertainty() > self.maxUncertainty:
            if self.attemptCount < self.maxAttempts:
                self.notify.info('Uncertainty is too high, trying again.')
                self.start = globalClock.getRealTime()
                self.sendUpdate('requestServerTime', [self.thisContext])
                return
            self.notify.info('Giving up on uncertainty requirement.')
        if self.talkResult:
            base.localAvatar.setChatAbsolute('latency %0.0f ms, sync \xc2\xb1%0.0f ms' % (elapsed * 1000.0, globalClockDelta.getUncertainty() * 1000.0), CFSpeech | CFTimeout)
        self._gotFirstTimeSync = True
        messenger.send('gotTimeSync')

    def setDisconnectReason(self, disconnectCode):
        self.notify.info('Client disconnect reason %s.' % disconnectCode)
        self.sendUpdate('setDisconnectReason', [disconnectCode])

    def setExceptionInfo(self):
        info = describeException()
        self.notify.info('Client exception: %s' % info)
        self.sendUpdate('setExceptionInfo', [info])
        self.cr.flush()

    def setStackDump(self, dump):
        self.notify.debug('Stack dump: %s' % fastRepr(dump))
        maxLen = 900
        dataLeft = base64.b64encode(dump)
        index = 0
        while dataLeft:
            if len(dataLeft) >= maxLen:
                data = dataLeft[:maxLen]
                dataLeft = dataLeft[maxLen:]
            else:
                data = dataLeft
                dataLeft = None
            self.sendUpdate('setStackDump', [index, data])
            index += 1
            self.cr.flush()

        return

    def d_setSignature(self, signature, hash, pyc):
        self.sendUpdate('setSignature', [signature, hash, pyc])

    def sendCpuInfo(self):
        if not base.pipe:
            return
        di = base.pipe.getDisplayInformation()
        if di.getNumCpuCores() == 0 and hasattr(base.pipe, 'lookupCpuData'):
            base.pipe.lookupCpuData()
            di = base.pipe.getDisplayInformation()
        di.updateCpuFrequency(0)
        try:
            cacheStatus = preloadCache()
        except NameError:
            cacheStatus = ''

        ooghz = 1e-09
        cpuSpeed = (di.getMaximumCpuFrequency() * ooghz, di.getCurrentCpuFrequency() * ooghz)
        numCpuCores = di.getNumCpuCores()
        numLogicalCpus = di.getNumLogicalCpus()
        info = '%s|%s|%d|%d|%s|%s cpus' % (di.getCpuVendorString(),
         di.getCpuBrandString(),
         di.getCpuVersionInformation(),
         di.getCpuBrandIndex(),
         '%0.03f,%0.03f' % cpuSpeed,
         '%d,%d' % (numCpuCores, numLogicalCpus))
        print('cpu info: %s' % info)
        self.sendUpdate('setCpuInfo', [info, cacheStatus])

    def setFrameRateInterval(self, frameRateInterval):
        if frameRateInterval == 0:
            return
        if not base.frameRateMeter:
            maxFrameRateInterval = base.config.GetDouble('max-frame-rate-interval', 30.0)
            globalClock.setAverageFrameRateInterval(min(frameRateInterval, maxFrameRateInterval))
        taskMgr.remove('frameRateMonitor')
        taskMgr.doMethodLater(frameRateInterval, self.frameRateMonitor, 'frameRateMonitor')

    def frameRateMonitor(self, task):
        from otp.avatar.Avatar import Avatar
        vendorId = 0
        deviceId = 0
        processMemory = 0
        pageFileUsage = 0
        physicalMemory = 0
        pageFaultCount = 0
        osInfo = (os.name,
         0,
         0,
         0)
        cpuSpeed = (0, 0)
        numCpuCores = 0
        numLogicalCpus = 0
        apiName = 'None'
        if getattr(base, 'pipe', None):
            di = base.pipe.getDisplayInformation()
            if di.getDisplayState() == DisplayInformation.DSSuccess:
                vendorId = di.getVendorId()
                deviceId = di.getDeviceId()
            di.updateMemoryInformation()
            oomb = 1.0 / (1024.0 * 1024.0)
            processMemory = di.getProcessMemory() * oomb
            pageFileUsage = di.getPageFileUsage() * oomb
            physicalMemory = di.getPhysicalMemory() * oomb
            pageFaultCount = di.getPageFaultCount() / 1000.0
            osInfo = (os.name,
             di.getOsPlatformId(),
             di.getOsVersionMajor(),
             di.getOsVersionMinor())
            if sys.platform == 'darwin':
                osInfo = self.getMacOsInfo(osInfo)
            di.updateCpuFrequency(0)
            ooghz = 1e-09
            cpuSpeed = (di.getMaximumCpuFrequency() * ooghz, di.getCurrentCpuFrequency() * ooghz)
            numCpuCores = di.getNumCpuCores()
            numLogicalCpus = di.getNumLogicalCpus()
            apiName = base.pipe.getInterfaceName()
        self.d_setFrameRate(max(0, globalClock.getAverageFrameRate()), max(0, globalClock.calcFrameRateDeviation()), len(Avatar.Acti
Download .txt
gitextract_42ieqy6d/

├── .gitignore
├── LICENSE
├── README.md
├── astron/
│   ├── config/
│   │   └── astrond.yml
│   ├── darwin/
│   │   └── astrond
│   ├── databases/
│   │   ├── .gitignore
│   │   └── astrondb/
│   │       └── .gitignore
│   └── logs/
│       └── .gitignore
├── darwin/
│   ├── .vscode/
│   │   └── tasks.json
│   ├── start-ai-server.sh
│   ├── start-astron-server.sh
│   ├── start-game.sh
│   └── start-uberdog-server.sh
├── etc/
│   ├── Configrc.prc
│   ├── otp.dc
│   └── toon.dc
├── linux/
│   ├── .vscode/
│   │   └── tasks.json
│   ├── start-ai-server.sh
│   ├── start-astron-server.sh
│   ├── start-game.sh
│   └── start-uberdog-server.sh
├── otp/
│   ├── __init__.py
│   ├── ai/
│   │   ├── AIBase.py
│   │   ├── AIBaseGlobal.py
│   │   ├── AIInterestHandles.py
│   │   ├── AIMsgTypes.py
│   │   ├── AIZoneData.py
│   │   ├── BanManagerAI.py
│   │   ├── Barrier.py
│   │   ├── GarbageLeakServerEventAggregator.py
│   │   ├── TimeManager.py
│   │   ├── TimeManagerAI.py
│   │   └── __init__.py
│   ├── avatar/
│   │   ├── Avatar.py
│   │   ├── AvatarDNA.py
│   │   ├── AvatarDetail.py
│   │   ├── AvatarHandle.py
│   │   ├── AvatarPanel.py
│   │   ├── DistributedAvatar.py
│   │   ├── DistributedAvatarAI.py
│   │   ├── DistributedAvatarUD.py
│   │   ├── DistributedPlayer.py
│   │   ├── DistributedPlayerAI.py
│   │   ├── Emote.py
│   │   ├── LocalAvatar.py
│   │   ├── PlayerBase.py
│   │   ├── PositionExaminer.py
│   │   ├── ShadowCaster.py
│   │   ├── SpeedMonitor.py
│   │   └── __init__.py
│   ├── chat/
│   │   ├── ChatGarbler.py
│   │   ├── ChatGlobals.py
│   │   ├── ChatInputNormal.py
│   │   ├── ChatInputTyped.py
│   │   ├── ChatInputWhiteListFrame.py
│   │   ├── ChatManager.py
│   │   ├── TalkAssistant.py
│   │   ├── TalkGlobals.py
│   │   ├── TalkHandle.py
│   │   ├── TalkMessage.py
│   │   ├── WhiteList.py
│   │   └── __init__.py
│   ├── distributed/
│   │   ├── Account.py
│   │   ├── AccountAI.py
│   │   ├── AccountUD.py
│   │   ├── AstronAccount.py
│   │   ├── AstronAccountAI.py
│   │   ├── AstronAccountUD.py
│   │   ├── CentralLogger.py
│   │   ├── CentralLoggerAI.py
│   │   ├── CentralLoggerUD.py
│   │   ├── ClsendTracker.py
│   │   ├── DistributedDirectory.py
│   │   ├── DistributedDirectoryAI.py
│   │   ├── DistributedDistrict.py
│   │   ├── DistributedDistrictAI.py
│   │   ├── DistributedDistrictUD.py
│   │   ├── DistributedTestObject.py
│   │   ├── DistributedTestObjectAI.py
│   │   ├── GameServerTestSuite.py
│   │   ├── OTPClientRepository.py
│   │   ├── OTPInternalRepository.py
│   │   ├── ObjectServer.py
│   │   ├── ObjectServerAI.py
│   │   ├── ObjectServerUD.py
│   │   ├── OtpDoGlobals.py
│   │   ├── PotentialAvatar.py
│   │   ├── PotentialShard.py
│   │   ├── TelemetryLimited.py
│   │   ├── TelemetryLimiter.py
│   │   └── __init__.py
│   ├── friends/
│   │   ├── AvatarFriendInfo.py
│   │   ├── AvatarFriendsManager.py
│   │   ├── AvatarFriendsManagerUD.py
│   │   ├── FriendInfo.py
│   │   ├── FriendManager.py
│   │   ├── FriendManagerAI.py
│   │   ├── FriendResponseCodes.py
│   │   ├── FriendSecret.py
│   │   ├── GuildManager.py
│   │   ├── GuildManagerAI.py
│   │   ├── GuildManagerUD.py
│   │   ├── PlayerFriendsManager.py
│   │   ├── PlayerFriendsManagerUD.py
│   │   └── __init__.py
│   ├── launcher/
│   │   ├── DownloadWatcher.py
│   │   ├── DummyLauncherBase.py
│   │   ├── LauncherBase.py
│   │   └── __init__.py
│   ├── level/
│   │   ├── AmbientSound.py
│   │   ├── AttribDesc.py
│   │   ├── BasicEntities.py
│   │   ├── CollisionSolidEntity.py
│   │   ├── CutScene.py
│   │   ├── DistributedEntity.py
│   │   ├── DistributedEntityAI.py
│   │   ├── DistributedInteractiveEntity.py
│   │   ├── DistributedInteractiveEntityAI.py
│   │   ├── DistributedLevel.py
│   │   ├── DistributedLevelAI.py
│   │   ├── EditMgr.py
│   │   ├── EditMgrAI.py
│   │   ├── EditMgrBase.py
│   │   ├── EditorGlobals.py
│   │   ├── Entity.py
│   │   ├── EntityCreator.py
│   │   ├── EntityCreatorAI.py
│   │   ├── EntityCreatorBase.py
│   │   ├── EntityStateVarSet.py
│   │   ├── EntityTypeDesc.py
│   │   ├── EntityTypeRegistry.py
│   │   ├── EntityTypes.py
│   │   ├── EntrancePoint.py
│   │   ├── Level.py
│   │   ├── LevelConstants.py
│   │   ├── LevelMgr.py
│   │   ├── LevelMgrAI.py
│   │   ├── LevelMgrBase.py
│   │   ├── LevelSpec.py
│   │   ├── LevelUtil.py
│   │   ├── LocatorEntity.py
│   │   ├── LogicGate.py
│   │   ├── ModelEntity.py
│   │   ├── PathEntity.py
│   │   ├── PropSpinner.py
│   │   ├── VisibilityBlocker.py
│   │   ├── VisibilityExtender.py
│   │   ├── ZoneEntity.py
│   │   ├── ZoneEntityAI.py
│   │   ├── ZoneEntityBase.py
│   │   └── __init__.py
│   ├── login/
│   │   ├── AstronLoginManager.py
│   │   ├── AstronLoginManagerUD.py
│   │   ├── CreateAccountScreen.py
│   │   ├── GuiScreen.py
│   │   ├── HTTPUtil.py
│   │   ├── LeaveToPayDialog.py
│   │   ├── LoginAstronAccount.py
│   │   ├── LoginBase.py
│   │   ├── LoginDISLTokenAccount.py
│   │   ├── LoginGSAccount.py
│   │   ├── LoginGoAccount.py
│   │   ├── LoginScreen.py
│   │   ├── LoginTTAccount.py
│   │   ├── LoginTTSpecificDevAccount.py
│   │   ├── LoginWebPlayTokenAccount.py
│   │   ├── MultiPageTextFrame.py
│   │   ├── PrivacyPolicyPanel.py
│   │   ├── SecretFriendsInfoPanel.py
│   │   └── __init__.py
│   ├── movement/
│   │   ├── Impulse.py
│   │   ├── Mover.py
│   │   ├── PyVec3.py
│   │   └── __init__.py
│   ├── namepanel/
│   │   ├── NameCheck.py
│   │   ├── NameTumbler.py
│   │   ├── PickANamePattern.py
│   │   └── __init__.py
│   ├── otpbase/
│   │   ├── OTPBase.py
│   │   ├── OTPGlobals.py
│   │   ├── OTPLauncherGlobals.py
│   │   ├── OTPLocalizer.py
│   │   ├── OTPLocalizerEnglish.py
│   │   ├── OTPLocalizerEnglishProperty.py
│   │   ├── OTPRender.py
│   │   ├── OTPTimer.py
│   │   ├── ObjectCount.py
│   │   ├── PythonUtil.py
│   │   └── __init__.py
│   ├── otpgui/
│   │   ├── OTPDialog.py
│   │   └── __init__.py
│   ├── settings/
│   │   ├── Settings.py
│   │   └── __init__.py
│   ├── snapshot/
│   │   ├── SnapshotDispatcher.py
│   │   ├── SnapshotDispatcherAI.py
│   │   ├── SnapshotDispatcherUD.py
│   │   ├── SnapshotRenderer.py
│   │   ├── SnapshotRendererAI.py
│   │   ├── SnapshotRendererUD.py
│   │   └── __init__.py
│   ├── speedchat/
│   │   ├── ColorSpace.py
│   │   ├── SCColorScheme.py
│   │   ├── SCConstants.py
│   │   ├── SCCustomMenu.py
│   │   ├── SCCustomTerminal.py
│   │   ├── SCDecoders.py
│   │   ├── SCElement.py
│   │   ├── SCEmoteMenu.py
│   │   ├── SCEmoteTerminal.py
│   │   ├── SCGMTextTerminal.py
│   │   ├── SCMenu.py
│   │   ├── SCMenuHolder.py
│   │   ├── SCObject.py
│   │   ├── SCSettings.py
│   │   ├── SCStaticTextTerminal.py
│   │   ├── SCTerminal.py
│   │   ├── SpeedChat.py
│   │   ├── SpeedChatGMHandler.py
│   │   ├── SpeedChatGlobals.py
│   │   ├── SpeedChatTypes.py
│   │   └── __init__.py
│   ├── status/
│   │   ├── StatusDatabase.py
│   │   ├── StatusDatabaseUD.py
│   │   └── __init__.py
│   ├── uberdog/
│   │   ├── AccountDetailRecord.py
│   │   ├── DistributedChatManager.py
│   │   ├── DistributedChatManagerAI.py
│   │   ├── DistributedChatManagerUD.py
│   │   ├── OtpAvatarManager.py
│   │   ├── OtpAvatarManagerAI.py
│   │   ├── OtpAvatarManagerUD.py
│   │   ├── RejectCode.py
│   │   ├── SpeedchatRelay.py
│   │   ├── SpeedchatRelayGlobals.py
│   │   ├── SpeedchatRelayUD.py
│   │   └── __init__.py
│   └── web/
│       ├── SettingsMgr.py
│       ├── SettingsMgrAI.py
│       ├── SettingsMgrBase.py
│       ├── SettingsMgrUD.py
│       └── __init__.py
├── requirements.txt
├── toontown/
│   ├── __init__.py
│   ├── ai/
│   │   ├── AIStart.py
│   │   ├── BlackCatHolidayMgrAI.py
│   │   ├── CrashedLeaderBoardDecorator.py
│   │   ├── DatabaseObject.py
│   │   ├── DistributedBlackCatMgr.py
│   │   ├── DistributedBlackCatMgrAI.py
│   │   ├── DistributedGreenToonEffectMgr.py
│   │   ├── DistributedGreenToonEffectMgrAI.py
│   │   ├── DistributedHydrantZeroMgr.py
│   │   ├── DistributedHydrantZeroMgrAI.py
│   │   ├── DistributedMailboxZeroMgr.py
│   │   ├── DistributedMailboxZeroMgrAI.py
│   │   ├── DistributedPhaseEventMgr.py
│   │   ├── DistributedPhaseEventMgrAI.py
│   │   ├── DistributedPolarPlaceEffectMgr.py
│   │   ├── DistributedPolarPlaceEffectMgrAI.py
│   │   ├── DistributedResistanceEmoteMgr.py
│   │   ├── DistributedResistanceEmoteMgrAI.py
│   │   ├── DistributedScavengerHuntTarget.py
│   │   ├── DistributedScavengerHuntTargetAI.py
│   │   ├── DistributedSillyMeterMgr.py
│   │   ├── DistributedSillyMeterMgrAI.py
│   │   ├── DistributedTrashcanZeroMgr.py
│   │   ├── DistributedTrashcanZeroMgrAI.py
│   │   ├── DistributedTrickOrTreatTarget.py
│   │   ├── DistributedTrickOrTreatTargetAI.py
│   │   ├── DistributedWinterCarolingTarget.py
│   │   ├── DistributedWinterCarolingTargetAI.py
│   │   ├── HalloweenHolidayDecorator.py
│   │   ├── HolidayBaseAI.py
│   │   ├── HolidayDecorator.py
│   │   ├── HolidayManagerAI.py
│   │   ├── NewsManager.py
│   │   ├── NewsManagerAI.py
│   │   ├── ServerEventBuffer.py
│   │   ├── ToonBarrier.py
│   │   ├── ToontownAIMsgTypes.py
│   │   ├── ToontownAIRepository.py
│   │   ├── WelcomeValleyManager.py
│   │   ├── WelcomeValleyManagerAI.py
│   │   └── __init__.py
│   ├── battle/
│   │   ├── BattleBase.py
│   │   ├── BattleCalculatorAI.py
│   │   ├── BattleExperience.py
│   │   ├── BattleExperienceAI.py
│   │   ├── BattleManagerAI.py
│   │   ├── BattleParticles.py
│   │   ├── BattlePlace.py
│   │   ├── BattleProps.py
│   │   ├── BattleSounds.py
│   │   ├── DistributedBattle.py
│   │   ├── DistributedBattleAI.py
│   │   ├── DistributedBattleBase.py
│   │   ├── DistributedBattleBaseAI.py
│   │   ├── DistributedBattleBldg.py
│   │   ├── DistributedBattleBldgAI.py
│   │   ├── DistributedBattleDiners.py
│   │   ├── DistributedBattleDinersAI.py
│   │   ├── DistributedBattleFinal.py
│   │   ├── DistributedBattleFinalAI.py
│   │   ├── DistributedBattleWaiters.py
│   │   ├── DistributedBattleWaitersAI.py
│   │   ├── Fanfare.py
│   │   ├── FireCogPanel.py
│   │   ├── HealJokes.py
│   │   ├── Movie.py
│   │   ├── MovieCamera.py
│   │   ├── MovieDrop.py
│   │   ├── MovieFire.py
│   │   ├── MovieHeal.py
│   │   ├── MovieLure.py
│   │   ├── MovieNPCSOS.py
│   │   ├── MoviePetSOS.py
│   │   ├── MovieSOS.py
│   │   ├── MovieSound.py
│   │   ├── MovieSquirt.py
│   │   ├── MovieSuitAttacks.py
│   │   ├── MovieThrow.py
│   │   ├── MovieToonVictory.py
│   │   ├── MovieTrap.py
│   │   ├── MovieUtil.py
│   │   ├── PlayByPlayText.py
│   │   ├── RewardPanel.py
│   │   ├── SuitBattleGlobals.py
│   │   └── __init__.py
│   ├── building/
│   │   ├── BoardingGroupShow.py
│   │   ├── BoardingPartyBase.py
│   │   ├── DistributedAnimBuilding.py
│   │   ├── DistributedAnimBuildingAI.py
│   │   ├── DistributedAnimDoor.py
│   │   ├── DistributedAnimDoorAI.py
│   │   ├── DistributedAnimatedProp.py
│   │   ├── DistributedAnimatedPropAI.py
│   │   ├── DistributedBBElevator.py
│   │   ├── DistributedBBElevatorAI.py
│   │   ├── DistributedBoardingParty.py
│   │   ├── DistributedBoardingPartyAI.py
│   │   ├── DistributedBossElevator.py
│   │   ├── DistributedBossElevatorAI.py
│   │   ├── DistributedBuilding.py
│   │   ├── DistributedBuildingAI.py
│   │   ├── DistributedBuildingMgrAI.py
│   │   ├── DistributedCFOElevator.py
│   │   ├── DistributedCFOElevatorAI.py
│   │   ├── DistributedCJElevator.py
│   │   ├── DistributedCJElevatorAI.py
│   │   ├── DistributedClubElevator.py
│   │   ├── DistributedClubElevatorAI.py
│   │   ├── DistributedDoor.py
│   │   ├── DistributedDoorAI.py
│   │   ├── DistributedElevator.py
│   │   ├── DistributedElevatorAI.py
│   │   ├── DistributedElevatorExt.py
│   │   ├── DistributedElevatorExtAI.py
│   │   ├── DistributedElevatorFSM.py
│   │   ├── DistributedElevatorFSMAI.py
│   │   ├── DistributedElevatorFloor.py
│   │   ├── DistributedElevatorFloorAI.py
│   │   ├── DistributedElevatorInt.py
│   │   ├── DistributedElevatorIntAI.py
│   │   ├── DistributedGagshopInterior.py
│   │   ├── DistributedGagshopInteriorAI.py
│   │   ├── DistributedHQInterior.py
│   │   ├── DistributedHQInteriorAI.py
│   │   ├── DistributedKartShopInterior.py
│   │   ├── DistributedKartShopInteriorAI.py
│   │   ├── DistributedKnockKnockDoor.py
│   │   ├── DistributedKnockKnockDoorAI.py
│   │   ├── DistributedPetshopInterior.py
│   │   ├── DistributedPetshopInteriorAI.py
│   │   ├── DistributedSuitInterior.py
│   │   ├── DistributedSuitInteriorAI.py
│   │   ├── DistributedToonHallInterior.py
│   │   ├── DistributedToonHallInteriorAI.py
│   │   ├── DistributedToonInterior.py
│   │   ├── DistributedToonInteriorAI.py
│   │   ├── DistributedTrophyMgr.py
│   │   ├── DistributedTrophyMgrAI.py
│   │   ├── DistributedTutorialInterior.py
│   │   ├── DistributedTutorialInteriorAI.py
│   │   ├── DistributedVPElevator.py
│   │   ├── DistributedVPElevatorAI.py
│   │   ├── DoorTypes.py
│   │   ├── Elevator.py
│   │   ├── ElevatorConstants.py
│   │   ├── ElevatorUtils.py
│   │   ├── FADoorCodes.py
│   │   ├── GagshopBuildingAI.py
│   │   ├── HQBuildingAI.py
│   │   ├── KartShopBuildingAI.py
│   │   ├── KnockKnockJokes.py
│   │   ├── PetshopBuildingAI.py
│   │   ├── SuitBuildingGlobals.py
│   │   ├── SuitInterior.py
│   │   ├── SuitPlannerInteriorAI.py
│   │   ├── ToonInterior.py
│   │   ├── ToonInteriorColors.py
│   │   ├── TutorialBuildingAI.py
│   │   ├── TutorialHQBuildingAI.py
│   │   └── __init__.py
│   ├── catalog/
│   │   ├── CatalogAccessoryItem.py
│   │   ├── CatalogAccessoryItemGlobals.py
│   │   ├── CatalogAnimatedFurnitureItem.py
│   │   ├── CatalogAtticItem.py
│   │   ├── CatalogBeanItem.py
│   │   ├── CatalogChatItem.py
│   │   ├── CatalogChatItemPicker.py
│   │   ├── CatalogClothingItem.py
│   │   ├── CatalogEmoteItem.py
│   │   ├── CatalogFlooringItem.py
│   │   ├── CatalogFurnitureItem.py
│   │   ├── CatalogGardenItem.py
│   │   ├── CatalogGardenStarterItem.py
│   │   ├── CatalogGenerator.py
│   │   ├── CatalogInvalidItem.py
│   │   ├── CatalogItem.py
│   │   ├── CatalogItemList.py
│   │   ├── CatalogItemPanel.py
│   │   ├── CatalogItemTypes.py
│   │   ├── CatalogManager.py
│   │   ├── CatalogManagerAI.py
│   │   ├── CatalogMouldingItem.py
│   │   ├── CatalogNametagItem.py
│   │   ├── CatalogNotifyDialog.py
│   │   ├── CatalogPetTrickItem.py
│   │   ├── CatalogPoleItem.py
│   │   ├── CatalogRentalItem.py
│   │   ├── CatalogScreen.py
│   │   ├── CatalogSurfaceColors.py
│   │   ├── CatalogSurfaceItem.py
│   │   ├── CatalogToonStatueItem.py
│   │   ├── CatalogWainscotingItem.py
│   │   ├── CatalogWallpaperItem.py
│   │   ├── CatalogWindowItem.py
│   │   ├── MailboxScreen.py
│   │   └── __init__.py
│   ├── char/
│   │   ├── Char.py
│   │   ├── CharDNA.py
│   │   ├── DistributedChar.py
│   │   └── __init__.py
│   ├── chat/
│   │   ├── ResistanceChat.py
│   │   ├── TTChatInputNormal.py
│   │   ├── TTChatInputSpeedChat.py
│   │   ├── TTChatInputWhiteList.py
│   │   ├── TTSCWhiteListTerminal.py
│   │   ├── TTTalkAssistant.py
│   │   ├── TTWhiteList.py
│   │   ├── ToonChatGarbler.py
│   │   ├── ToontownChatManager.py
│   │   └── __init__.py
│   ├── classicchars/
│   │   ├── CCharChatter.py
│   │   ├── CCharPaths.py
│   │   ├── CharStateDatas.py
│   │   ├── CharStateDatasAI.py
│   │   ├── DistributedCCharBase.py
│   │   ├── DistributedCCharBaseAI.py
│   │   ├── DistributedChip.py
│   │   ├── DistributedChipAI.py
│   │   ├── DistributedDaisy.py
│   │   ├── DistributedDaisyAI.py
│   │   ├── DistributedDale.py
│   │   ├── DistributedDaleAI.py
│   │   ├── DistributedDonald.py
│   │   ├── DistributedDonaldAI.py
│   │   ├── DistributedDonaldDock.py
│   │   ├── DistributedDonaldDockAI.py
│   │   ├── DistributedFrankenDonald.py
│   │   ├── DistributedFrankenDonaldAI.py
│   │   ├── DistributedGoofy.py
│   │   ├── DistributedGoofyAI.py
│   │   ├── DistributedGoofySpeedway.py
│   │   ├── DistributedGoofySpeedwayAI.py
│   │   ├── DistributedJailbirdDale.py
│   │   ├── DistributedJailbirdDaleAI.py
│   │   ├── DistributedMickey.py
│   │   ├── DistributedMickeyAI.py
│   │   ├── DistributedMinnie.py
│   │   ├── DistributedMinnieAI.py
│   │   ├── DistributedPluto.py
│   │   ├── DistributedPlutoAI.py
│   │   ├── DistributedPoliceChip.py
│   │   ├── DistributedPoliceChipAI.py
│   │   ├── DistributedSockHopDaisy.py
│   │   ├── DistributedSockHopDaisyAI.py
│   │   ├── DistributedSuperGoofy.py
│   │   ├── DistributedSuperGoofyAI.py
│   │   ├── DistributedVampireMickey.py
│   │   ├── DistributedVampireMickeyAI.py
│   │   ├── DistributedWesternPluto.py
│   │   ├── DistributedWesternPlutoAI.py
│   │   ├── DistributedWitchMinnie.py
│   │   ├── DistributedWitchMinnieAI.py
│   │   └── __init__.py
│   ├── coderedemption/
│   │   ├── TTCodeRedemptionConsts.py
│   │   ├── TTCodeRedemptionMgr.py
│   │   ├── TTCodeRedemptionMgrAI.py
│   │   ├── TTCodeRedemptionMgrUD.py
│   │   └── __init__.py
│   ├── cogdominium/
│   │   ├── CogdoBarrelRoom.py
│   │   ├── CogdoBarrelRoomAI.py
│   │   ├── CogdoBarrelRoomConsts.py
│   │   ├── CogdoBarrelRoomRewardPanel.py
│   │   ├── CogdoBoardroomGameBase.py
│   │   ├── CogdoBoardroomGameConsts.py
│   │   ├── CogdoBoardroomGameSpec.py
│   │   ├── CogdoCraneGameBase.py
│   │   ├── CogdoCraneGameConsts.py
│   │   ├── CogdoCraneGameSpec.py
│   │   ├── CogdoElevatorMovie.py
│   │   ├── CogdoEntityCreator.py
│   │   ├── CogdoEntityCreatorAI.py
│   │   ├── CogdoEntityTypes.py
│   │   ├── CogdoExecutiveSuiteMovies.py
│   │   ├── CogdoFlyingCameraManager.py
│   │   ├── CogdoFlyingCollisions.py
│   │   ├── CogdoFlyingGame.py
│   │   ├── CogdoFlyingGameGlobals.py
│   │   ├── CogdoFlyingGameGuis.py
│   │   ├── CogdoFlyingGameMovies.py
│   │   ├── CogdoFlyingGuiManager.py
│   │   ├── CogdoFlyingInputManager.py
│   │   ├── CogdoFlyingLegalEagle.py
│   │   ├── CogdoFlyingLevel.py
│   │   ├── CogdoFlyingLevelQuadrant.py
│   │   ├── CogdoFlyingLocalPlayer.py
│   │   ├── CogdoFlyingObjects.py
│   │   ├── CogdoFlyingObstacles.py
│   │   ├── CogdoFlyingPlayer.py
│   │   ├── CogdoFlyingShadowPlacer.py
│   │   ├── CogdoFlyingUtil.py
│   │   ├── CogdoGameAudioManager.py
│   │   ├── CogdoGameConsts.py
│   │   ├── CogdoGameExit.py
│   │   ├── CogdoGameGatherable.py
│   │   ├── CogdoGameMessageDisplay.py
│   │   ├── CogdoGameRulesPanel.py
│   │   ├── CogdoInterior.py
│   │   ├── CogdoLayout.py
│   │   ├── CogdoLevelGameBase.py
│   │   ├── CogdoLevelMgr.py
│   │   ├── CogdoLevelMgrAI.py
│   │   ├── CogdoMaze.py
│   │   ├── CogdoMazeCameraManager.py
│   │   ├── CogdoMazeData.py
│   │   ├── CogdoMazeGame.py
│   │   ├── CogdoMazeGameGlobals.py
│   │   ├── CogdoMazeGameGuis.py
│   │   ├── CogdoMazeGameMovies.py
│   │   ├── CogdoMazeGameObjects.py
│   │   ├── CogdoMazeGuiManager.py
│   │   ├── CogdoMazeLocalPlayer.py
│   │   ├── CogdoMazePlayer.py
│   │   ├── CogdoMazeSuits.py
│   │   ├── CogdoMemoGui.py
│   │   ├── CogdoUtil.py
│   │   ├── DistCogdoBoardroomGame.py
│   │   ├── DistCogdoBoardroomGameAI.py
│   │   ├── DistCogdoCrane.py
│   │   ├── DistCogdoCraneAI.py
│   │   ├── DistCogdoCraneCog.py
│   │   ├── DistCogdoCraneCogAI.py
│   │   ├── DistCogdoCraneGame.py
│   │   ├── DistCogdoCraneGameAI.py
│   │   ├── DistCogdoCraneMoneyBag.py
│   │   ├── DistCogdoCraneMoneyBagAI.py
│   │   ├── DistCogdoCraneObject.py
│   │   ├── DistCogdoCraneObjectAI.py
│   │   ├── DistCogdoFlyingGame.py
│   │   ├── DistCogdoFlyingGameAI.py
│   │   ├── DistCogdoGame.py
│   │   ├── DistCogdoGameAI.py
│   │   ├── DistCogdoGameBase.py
│   │   ├── DistCogdoLevelGame.py
│   │   ├── DistCogdoLevelGameAI.py
│   │   ├── DistCogdoMazeGame.py
│   │   ├── DistCogdoMazeGameAI.py
│   │   ├── DistCogdoMazeGameBase.py
│   │   ├── DistributedCogdoBarrel.py
│   │   ├── DistributedCogdoBarrelAI.py
│   │   ├── DistributedCogdoBattleBldg.py
│   │   ├── DistributedCogdoBattleBldgAI.py
│   │   ├── DistributedCogdoElevatorExt.py
│   │   ├── DistributedCogdoElevatorExtAI.py
│   │   ├── DistributedCogdoElevatorInt.py
│   │   ├── DistributedCogdoElevatorIntAI.py
│   │   ├── DistributedCogdoInterior.py
│   │   ├── DistributedCogdoInteriorAI.py
│   │   ├── SuitPlannerCogdoInteriorAI.py
│   │   └── __init__.py
│   ├── coghq/
│   │   ├── ActiveCell.py
│   │   ├── ActiveCellAI.py
│   │   ├── BanquetTableBase.py
│   │   ├── BarrelBase.py
│   │   ├── BattleBlocker.py
│   │   ├── BattleBlockerAI.py
│   │   ├── BattleExperienceAggregatorAI.py
│   │   ├── BossbotCogHQLoader.py
│   │   ├── BossbotCountryClubEntrance_Action00.py
│   │   ├── BossbotCountryClubFairwayRoom_Battle00.py
│   │   ├── BossbotCountryClubFairwayRoom_Battle00_Cogs.py
│   │   ├── BossbotCountryClubGreenRoom_Action00.py
│   │   ├── BossbotCountryClubGreenRoom_Action01.py
│   │   ├── BossbotCountryClubGreenRoom_Action02.py
│   │   ├── BossbotCountryClubKartRoom_Battle00.py
│   │   ├── BossbotCountryClubKartRoom_Battle00_Cogs.py
│   │   ├── BossbotCountryClubMazeRoom_Battle00.py
│   │   ├── BossbotCountryClubMazeRoom_Battle00_Cogs.py
│   │   ├── BossbotCountryClubMazeRoom_Battle01.py
│   │   ├── BossbotCountryClubMazeRoom_Battle01_Cogs.py
│   │   ├── BossbotCountryClubMazeRoom_Battle02.py
│   │   ├── BossbotCountryClubMazeRoom_Battle02_Cogs.py
│   │   ├── BossbotCountryClubMazeRoom_Battle03_Cogs.py
│   │   ├── BossbotCountryClubPresidentRoom_Battle00.py
│   │   ├── BossbotCountryClubPresidentRoom_Battle00_Cogs.py
│   │   ├── BossbotCountryClubTeeOffRoom_Action00.py
│   │   ├── BossbotCountryClubTeeOffRoom_Action01.py
│   │   ├── BossbotCountryClubTeeOffRoom_Action02.py
│   │   ├── BossbotHQBossBattle.py
│   │   ├── BossbotHQExterior.py
│   │   ├── BossbotOfficeExterior.py
│   │   ├── CashbotCogHQLoader.py
│   │   ├── CashbotHQBossBattle.py
│   │   ├── CashbotHQExterior.py
│   │   ├── CashbotMintBoilerRoom_Action00.py
│   │   ├── CashbotMintBoilerRoom_Battle00.py
│   │   ├── CashbotMintBoilerRoom_Battle00_Cogs.py
│   │   ├── CashbotMintBoilerRoom_Battle01.py
│   │   ├── CashbotMintBoilerRoom_Battle01_Cogs.py
│   │   ├── CashbotMintControlRoom_Battle00.py
│   │   ├── CashbotMintControlRoom_Battle00_Cogs.py
│   │   ├── CashbotMintDuctRoom_Action00.py
│   │   ├── CashbotMintDuctRoom_Battle00.py
│   │   ├── CashbotMintDuctRoom_Battle00_Cogs.py
│   │   ├── CashbotMintDuctRoom_Battle01.py
│   │   ├── CashbotMintDuctRoom_Battle01_Cogs.py
│   │   ├── CashbotMintEntrance_Action00.py
│   │   ├── CashbotMintGearRoom_Action00.py
│   │   ├── CashbotMintGearRoom_Battle00.py
│   │   ├── CashbotMintGearRoom_Battle00_Cogs.py
│   │   ├── CashbotMintGearRoom_Battle01.py
│   │   ├── CashbotMintGearRoom_Battle01_Cogs.py
│   │   ├── CashbotMintLavaRoomFoyer_Action00.py
│   │   ├── CashbotMintLavaRoomFoyer_Action01.py
│   │   ├── CashbotMintLavaRoomFoyer_Battle00.py
│   │   ├── CashbotMintLavaRoomFoyer_Battle00_Cogs.py
│   │   ├── CashbotMintLavaRoomFoyer_Battle01.py
│   │   ├── CashbotMintLavaRoomFoyer_Battle01_Cogs.py
│   │   ├── CashbotMintLavaRoom_Action00.py
│   │   ├── CashbotMintLobby_Action00.py
│   │   ├── CashbotMintLobby_Battle00.py
│   │   ├── CashbotMintLobby_Battle00_Cogs.py
│   │   ├── CashbotMintLobby_Battle01.py
│   │   ├── CashbotMintLobby_Battle01_Cogs.py
│   │   ├── CashbotMintOilRoom_Battle00.py
│   │   ├── CashbotMintOilRoom_Battle00_Cogs.py
│   │   ├── CashbotMintPaintMixerReward_Battle00.py
│   │   ├── CashbotMintPaintMixerReward_Battle00_Cogs.py
│   │   ├── CashbotMintPaintMixer_Action00.py
│   │   ├── CashbotMintPipeRoom_Action00.py
│   │   ├── CashbotMintPipeRoom_Battle00.py
│   │   ├── CashbotMintPipeRoom_Battle00_Cogs.py
│   │   ├── CashbotMintPipeRoom_Battle01.py
│   │   ├── CashbotMintPipeRoom_Battle01_Cogs.py
│   │   ├── CashbotMintStomperAlley_Action00.py
│   │   ├── CogDisguiseGlobals.py
│   │   ├── CogHQBossBattle.py
│   │   ├── CogHQExterior.py
│   │   ├── CogHQLoader.py
│   │   ├── CogHQLobby.py
│   │   ├── CogSuitManagerAI.py
│   │   ├── ConveyorBelt.py
│   │   ├── CountryClubInterior.py
│   │   ├── CountryClubLayout.py
│   │   ├── CountryClubManagerAI.py
│   │   ├── CountryClubRoom.py
│   │   ├── CountryClubRoomBase.py
│   │   ├── CountryClubRoomSpecs.py
│   │   ├── CrateGlobals.py
│   │   ├── CrusherCell.py
│   │   ├── CrusherCellAI.py
│   │   ├── DinerStatusIndicator.py
│   │   ├── DirectionalCell.py
│   │   ├── DirectionalCellAI.py
│   │   ├── DistributedBanquetTable.py
│   │   ├── DistributedBanquetTableAI.py
│   │   ├── DistributedBarrelBase.py
│   │   ├── DistributedBarrelBaseAI.py
│   │   ├── DistributedBattleFactory.py
│   │   ├── DistributedBattleFactoryAI.py
│   │   ├── DistributedBeanBarrel.py
│   │   ├── DistributedBeanBarrelAI.py
│   │   ├── DistributedButton.py
│   │   ├── DistributedButtonAI.py
│   │   ├── DistributedCashbotBossCrane.py
│   │   ├── DistributedCashbotBossCraneAI.py
│   │   ├── DistributedCashbotBossObject.py
│   │   ├── DistributedCashbotBossObjectAI.py
│   │   ├── DistributedCashbotBossSafe.py
│   │   ├── DistributedCashbotBossSafeAI.py
│   │   ├── DistributedCashbotBossTreasure.py
│   │   ├── DistributedCashbotBossTreasureAI.py
│   │   ├── DistributedCogHQDoor.py
│   │   ├── DistributedCogHQDoorAI.py
│   │   ├── DistributedCogKart.py
│   │   ├── DistributedCogKartAI.py
│   │   ├── DistributedCountryClub.py
│   │   ├── DistributedCountryClubAI.py
│   │   ├── DistributedCountryClubBattle.py
│   │   ├── DistributedCountryClubBattleAI.py
│   │   ├── DistributedCountryClubRoom.py
│   │   ├── DistributedCountryClubRoomAI.py
│   │   ├── DistributedCrate.py
│   │   ├── DistributedCrateAI.py
│   │   ├── DistributedCrushableEntity.py
│   │   ├── DistributedCrushableEntityAI.py
│   │   ├── DistributedCrusherEntity.py
│   │   ├── DistributedCrusherEntityAI.py
│   │   ├── DistributedDoorEntity.py
│   │   ├── DistributedDoorEntityAI.py
│   │   ├── DistributedDoorEntityBase.py
│   │   ├── DistributedElevatorMarker.py
│   │   ├── DistributedElevatorMarkerAI.py
│   │   ├── DistributedFactory.py
│   │   ├── DistributedFactoryAI.py
│   │   ├── DistributedFactoryElevatorExt.py
│   │   ├── DistributedFactoryElevatorExtAI.py
│   │   ├── DistributedFoodBelt.py
│   │   ├── DistributedFoodBeltAI.py
│   │   ├── DistributedGagBarrel.py
│   │   ├── DistributedGagBarrelAI.py
│   │   ├── DistributedGolfGreenGame.py
│   │   ├── DistributedGolfGreenGameAI.py
│   │   ├── DistributedGolfSpot.py
│   │   ├── DistributedGolfSpotAI.py
│   │   ├── DistributedGrid.py
│   │   ├── DistributedGridAI.py
│   │   ├── DistributedHealBarrel.py
│   │   ├── DistributedHealBarrelAI.py
│   │   ├── DistributedInGameEditor.py
│   │   ├── DistributedInGameEditorAI.py
│   │   ├── DistributedLaserField.py
│   │   ├── DistributedLaserFieldAI.py
│   │   ├── DistributedLawOffice.py
│   │   ├── DistributedLawOfficeAI.py
│   │   ├── DistributedLawOfficeElevatorExt.py
│   │   ├── DistributedLawOfficeElevatorExtAI.py
│   │   ├── DistributedLawOfficeElevatorInt.py
│   │   ├── DistributedLawOfficeElevatorIntAI.py
│   │   ├── DistributedLawOfficeFloor.py
│   │   ├── DistributedLawOfficeFloorAI.py
│   │   ├── DistributedLawbotBossGavel.py
│   │   ├── DistributedLawbotBossGavelAI.py
│   │   ├── DistributedLawbotCannon.py
│   │   ├── DistributedLawbotCannonAI.py
│   │   ├── DistributedLawbotChair.py
│   │   ├── DistributedLawbotChairAI.py
│   │   ├── DistributedLevelBattle.py
│   │   ├── DistributedLevelBattleAI.py
│   │   ├── DistributedLift.py
│   │   ├── DistributedLiftAI.py
│   │   ├── DistributedMaze.py
│   │   ├── DistributedMazeAI.py
│   │   ├── DistributedMint.py
│   │   ├── DistributedMintAI.py
│   │   ├── DistributedMintBattle.py
│   │   ├── DistributedMintBattleAI.py
│   │   ├── DistributedMintElevatorExt.py
│   │   ├── DistributedMintElevatorExtAI.py
│   │   ├── DistributedMintRoom.py
│   │   ├── DistributedMintRoomAI.py
│   │   ├── DistributedMoleField.py
│   │   ├── DistributedMoleFieldAI.py
│   │   ├── DistributedMover.py
│   │   ├── DistributedMoverAI.py
│   │   ├── DistributedSecurityCamera.py
│   │   ├── DistributedSecurityCameraAI.py
│   │   ├── DistributedSellbotHQDoor.py
│   │   ├── DistributedSellbotHQDoorAI.py
│   │   ├── DistributedSinkingPlatform.py
│   │   ├── DistributedSinkingPlatformAI.py
│   │   ├── DistributedStage.py
│   │   ├── DistributedStageAI.py
│   │   ├── DistributedStageBattle.py
│   │   ├── DistributedStageBattleAI.py
│   │   ├── DistributedStageRoom.py
│   │   ├── DistributedStageRoomAI.py
│   │   ├── DistributedStomper.py
│   │   ├── DistributedStomperAI.py
│   │   ├── DistributedStomperPair.py
│   │   ├── DistributedStomperPairAI.py
│   │   ├── DistributedSwitch.py
│   │   ├── DistributedSwitchAI.py
│   │   ├── DistributedSwitchBase.py
│   │   ├── DistributedTrigger.py
│   │   ├── DistributedTriggerAI.py
│   │   ├── FactoryBase.py
│   │   ├── FactoryCameraViews.py
│   │   ├── FactoryEntityCreator.py
│   │   ├── FactoryEntityCreatorAI.py
│   │   ├── FactoryEntityTypes.py
│   │   ├── FactoryExterior.py
│   │   ├── FactoryInterior.py
│   │   ├── FactoryLevelMgr.py
│   │   ├── FactoryLevelMgrAI.py
│   │   ├── FactoryManagerAI.py
│   │   ├── FactoryMockupCogs.py
│   │   ├── FactoryMockupSpec.py
│   │   ├── FactorySpecs.py
│   │   ├── FactoryUtil.py
│   │   ├── FoodBeltBase.py
│   │   ├── GameSprite3D.py
│   │   ├── GearEntity.py
│   │   ├── GolfGreenGameGlobals.py
│   │   ├── GoonClipPlane.py
│   │   ├── InGameEditor.py
│   │   ├── InGameEditorDCImports.py
│   │   ├── InGameEditorDCImportsAI.py
│   │   ├── InGameEditorElements.py
│   │   ├── LaserGameAvoid.py
│   │   ├── LaserGameBase.py
│   │   ├── LaserGameDrag.py
│   │   ├── LaserGameMineSweeper.py
│   │   ├── LaserGameRoll.py
│   │   ├── LawOfficeBase.py
│   │   ├── LawOfficeLayout.py
│   │   ├── LawOfficeManagerAI.py
│   │   ├── LawOffice_Spec_Tier0_a.py
│   │   ├── LawOffice_Spec_Tier0_b.py
│   │   ├── LawbotCogHQLoader.py
│   │   ├── LawbotHQBossBattle.py
│   │   ├── LawbotHQExterior.py
│   │   ├── LawbotLegFactoryCogs.py
│   │   ├── LawbotLegFactorySpec.py
│   │   ├── LawbotOfficeBoilerRoom_Action01.py
│   │   ├── LawbotOfficeBoilerRoom_Battle00.py
│   │   ├── LawbotOfficeBoilerRoom_Battle00_Cogs.py
│   │   ├── LawbotOfficeBoilerRoom_Security00.py
│   │   ├── LawbotOfficeBoilerRoom_Trap00.py
│   │   ├── LawbotOfficeBoilerRoom_Trap00_Cogs.py
│   │   ├── LawbotOfficeDiamondRoom_Action00.py
│   │   ├── LawbotOfficeDiamondRoom_Action01.py
│   │   ├── LawbotOfficeDiamondRoom_Battle00.py
│   │   ├── LawbotOfficeDiamondRoom_Battle00_Cogs.py
│   │   ├── LawbotOfficeDiamondRoom_Security00.py
│   │   ├── LawbotOfficeDiamondRoom_Trap00.py
│   │   ├── LawbotOfficeDiamondRoom_Trap00_Cogs.py
│   │   ├── LawbotOfficeEntrance_Action00.py
│   │   ├── LawbotOfficeExterior.py
│   │   ├── LawbotOfficeGearRoom_Action00.py
│   │   ├── LawbotOfficeGearRoom_Battle00.py
│   │   ├── LawbotOfficeGearRoom_Battle00_Cogs.py
│   │   ├── LawbotOfficeGearRoom_Platform00.py
│   │   ├── LawbotOfficeGearRoom_Security00.py
│   │   ├── LawbotOfficeLobby_Action00.py
│   │   ├── LawbotOfficeLobby_Action01.py
│   │   ├── LawbotOfficeLobby_Lights00.py
│   │   ├── LawbotOfficeLobby_Trap00.py
│   │   ├── LawbotOfficeLobby_Trap00_Cogs.py
│   │   ├── LawbotOfficeOilRoom_Battle00.py
│   │   ├── LawbotOfficeOilRoom_Battle00_Cogs.py
│   │   ├── LawbotOfficeOilRoom_Battle01.py
│   │   ├── LawbotOfficeOilRoom_Battle01_Cogs.py
│   │   ├── LevelBattleManagerAI.py
│   │   ├── LevelSuitPlannerAI.py
│   │   ├── LiftConstants.py
│   │   ├── LobbyManager.py
│   │   ├── LobbyManagerAI.py
│   │   ├── MintInterior.py
│   │   ├── MintLayout.py
│   │   ├── MintManagerAI.py
│   │   ├── MintProduct.py
│   │   ├── MintProductPallet.py
│   │   ├── MintRoom.py
│   │   ├── MintRoomBase.py
│   │   ├── MintRoomSpecs.py
│   │   ├── MintShelf.py
│   │   ├── MoleFieldBase.py
│   │   ├── MoleHill.py
│   │   ├── MovingPlatform.py
│   │   ├── NullCogs.py
│   │   ├── PaintMixer.py
│   │   ├── PathMasterEntity.py
│   │   ├── PlatformEntity.py
│   │   ├── PromotionManagerAI.py
│   │   ├── RenderingEntity.py
│   │   ├── SellbotCogHQLoader.py
│   │   ├── SellbotHQBossBattle.py
│   │   ├── SellbotHQExterior.py
│   │   ├── SellbotLegFactoryCogs.py
│   │   ├── SellbotLegFactorySpec.py
│   │   ├── SinkingPlatformGlobals.py
│   │   ├── SpecImports.py
│   │   ├── StageInterior.py
│   │   ├── StageLayout.py
│   │   ├── StageManagerAI.py
│   │   ├── StageRoom.py
│   │   ├── StageRoomBase.py
│   │   ├── StageRoomSpecs.py
│   │   ├── StomperGlobals.py
│   │   └── __init__.py
│   ├── distributed/
│   │   ├── DelayDeletable.py
│   │   ├── DelayDelete.py
│   │   ├── DistributedTimer.py
│   │   ├── DistributedTimerAI.py
│   │   ├── HoodMgr.py
│   │   ├── NonRepeatableRandomSourceAI.py
│   │   ├── NonRepeatableRandomSourceUD.py
│   │   ├── PlayGame.py
│   │   ├── ToontownClientRepository.py
│   │   ├── ToontownDistrict.py
│   │   ├── ToontownDistrictAI.py
│   │   ├── ToontownDistrictStats.py
│   │   ├── ToontownDistrictStatsAI.py
│   │   ├── ToontownInternalRepository.py
│   │   ├── ToontownMsgTypes.py
│   │   └── __init__.py
│   ├── effects/
│   │   ├── BlastEffect.py
│   │   ├── Bubbles.py
│   │   ├── CarSmoke.py
│   │   ├── ChrysanthemumEffect.py
│   │   ├── DistributedFireworkShow.py
│   │   ├── DistributedFireworkShowAI.py
│   │   ├── Drift.py
│   │   ├── DustCloud.py
│   │   ├── EffectController.py
│   │   ├── Firework.py
│   │   ├── FireworkEffect.py
│   │   ├── FireworkGlobals.py
│   │   ├── FireworkShow.py
│   │   ├── FireworkShowMixin.py
│   │   ├── FireworkShows.py
│   │   ├── FireworkSparkles.py
│   │   ├── Fireworks.py
│   │   ├── FlashEffect.py
│   │   ├── Glow.py
│   │   ├── GlowTrail.py
│   │   ├── IceCream.py
│   │   ├── NoiseSparkles.py
│   │   ├── PeonyEffect.py
│   │   ├── PolyTrail.py
│   │   ├── PooledEffect.py
│   │   ├── RayBurst.py
│   │   ├── RingEffect.py
│   │   ├── Ripples.py
│   │   ├── RocketExplosion.py
│   │   ├── ScavengerHuntEffects.py
│   │   ├── SimpleSparkles.py
│   │   ├── SkullBurst.py
│   │   ├── SkullFlash.py
│   │   ├── Sparks.py
│   │   ├── SparksTrail.py
│   │   ├── SparksTrailLong.py
│   │   ├── Splash.py
│   │   ├── StarBurst.py
│   │   ├── TrailExplosion.py
│   │   ├── Wake.py
│   │   └── __init__.py
│   ├── estate/
│   │   ├── BankGUI.py
│   │   ├── BankGlobals.py
│   │   ├── BeanRecipeGui.py
│   │   ├── CannonGlobals.py
│   │   ├── ClosetGUI.py
│   │   ├── ClosetGlobals.py
│   │   ├── DistributedAnimatedStatuary.py
│   │   ├── DistributedAnimatedStatuaryAI.py
│   │   ├── DistributedBank.py
│   │   ├── DistributedBankAI.py
│   │   ├── DistributedBankMgr.py
│   │   ├── DistributedBankMgrAI.py
│   │   ├── DistributedCannon.py
│   │   ├── DistributedCannonAI.py
│   │   ├── DistributedChangingStatuary.py
│   │   ├── DistributedChangingStatuaryAI.py
│   │   ├── DistributedCloset.py
│   │   ├── DistributedClosetAI.py
│   │   ├── DistributedEstate.py
│   │   ├── DistributedEstateAI.py
│   │   ├── DistributedFireworksCannon.py
│   │   ├── DistributedFireworksCannonAI.py
│   │   ├── DistributedFlower.py
│   │   ├── DistributedFlowerAI.py
│   │   ├── DistributedFurnitureItem.py
│   │   ├── DistributedFurnitureItemAI.py
│   │   ├── DistributedFurnitureManager.py
│   │   ├── DistributedFurnitureManagerAI.py
│   │   ├── DistributedGagTree.py
│   │   ├── DistributedGagTreeAI.py
│   │   ├── DistributedGarden.py
│   │   ├── DistributedGardenAI.py
│   │   ├── DistributedGardenBox.py
│   │   ├── DistributedGardenBoxAI.py
│   │   ├── DistributedGardenPlot.py
│   │   ├── DistributedGardenPlotAI.py
│   │   ├── DistributedHouse.py
│   │   ├── DistributedHouseAI.py
│   │   ├── DistributedHouseDoor.py
│   │   ├── DistributedHouseDoorAI.py
│   │   ├── DistributedHouseInterior.py
│   │   ├── DistributedHouseInteriorAI.py
│   │   ├── DistributedHouseItem.py
│   │   ├── DistributedLawnDecor.py
│   │   ├── DistributedLawnDecorAI.py
│   │   ├── DistributedMailbox.py
│   │   ├── DistributedMailboxAI.py
│   │   ├── DistributedPhone.py
│   │   ├── DistributedPhoneAI.py
│   │   ├── DistributedPlantBase.py
│   │   ├── DistributedPlantBaseAI.py
│   │   ├── DistributedStatuary.py
│   │   ├── DistributedStatuaryAI.py
│   │   ├── DistributedTarget.py
│   │   ├── DistributedTargetAI.py
│   │   ├── DistributedToonStatuary.py
│   │   ├── DistributedToonStatuaryAI.py
│   │   ├── DistributedTrunk.py
│   │   ├── DistributedTrunkAI.py
│   │   ├── Estate.py
│   │   ├── EstateLoader.py
│   │   ├── EstateManager.py
│   │   ├── EstateManagerAI.py
│   │   ├── FireworkItemPanel.py
│   │   ├── FireworksGui.py
│   │   ├── FlowerBase.py
│   │   ├── FlowerBasket.py
│   │   ├── FlowerBrowser.py
│   │   ├── FlowerCollection.py
│   │   ├── FlowerPanel.py
│   │   ├── FlowerPhoto.py
│   │   ├── FlowerPicker.py
│   │   ├── FlowerSellGUI.py
│   │   ├── FlowerSpeciesPanel.py
│   │   ├── GameSprite.py
│   │   ├── GardenDropGame.py
│   │   ├── GardenGlobals.py
│   │   ├── GardenProgressMeter.py
│   │   ├── GardenTutorial.py
│   │   ├── House.py
│   │   ├── HouseGlobals.py
│   │   ├── MailboxGlobals.py
│   │   ├── PhoneGlobals.py
│   │   ├── PlantTreeGUI.py
│   │   ├── PlantingGUI.py
│   │   ├── SpecialsPhoto.py
│   │   ├── ToonStatueSelectionGUI.py
│   │   ├── TrunkGUI.py
│   │   ├── __init__.py
│   │   └── houseDesign.py
│   ├── fishing/
│   │   ├── BingoCardBase.py
│   │   ├── BingoCardCell.py
│   │   ├── BingoCardGui.py
│   │   ├── BingoGlobals.py
│   │   ├── BlockoutBingo.py
│   │   ├── DiagonalBingo.py
│   │   ├── DistributedFishingPond.py
│   │   ├── DistributedFishingPondAI.py
│   │   ├── DistributedFishingTarget.py
│   │   ├── DistributedFishingTargetAI.py
│   │   ├── DistributedPondBingoManager.py
│   │   ├── DistributedPondBingoManagerAI.py
│   │   ├── FishBase.py
│   │   ├── FishBrowser.py
│   │   ├── FishCollection.py
│   │   ├── FishGlobals.py
│   │   ├── FishPanel.py
│   │   ├── FishPhoto.py
│   │   ├── FishPicker.py
│   │   ├── FishSellGUI.py
│   │   ├── FishTank.py
│   │   ├── FishingTargetGlobals.py
│   │   ├── FourCornerBingo.py
│   │   ├── GenusPanel.py
│   │   ├── NormalBingo.py
│   │   ├── ThreewayBingo.py
│   │   └── __init__.py
│   ├── friends/
│   │   ├── FriendHandle.py
│   │   ├── FriendInvitee.py
│   │   ├── FriendInviter.py
│   │   ├── FriendNotifier.py
│   │   ├── FriendsListManager.py
│   │   ├── FriendsListPanel.py
│   │   ├── TTPlayerFriendsManager.py
│   │   ├── TTPlayerFriendsManagerUD.py
│   │   ├── ToontownFriendSecret.py
│   │   └── __init__.py
│   ├── golf/
│   │   ├── BuildGeometry.py
│   │   ├── DistributedGolfCourse.py
│   │   ├── DistributedGolfCourseAI.py
│   │   ├── DistributedGolfHole.py
│   │   ├── DistributedGolfHoleAI.py
│   │   ├── DistributedPhysicsWorld.py
│   │   ├── DistributedPhysicsWorldAI.py
│   │   ├── GolfGlobals.py
│   │   ├── GolfHoleBase.py
│   │   ├── GolfManagerAI.py
│   │   ├── GolfRewardDialog.py
│   │   ├── GolfScoreBoard.py
│   │   ├── PhysicsWorldBase.py
│   │   └── __init__.py
│   ├── hood/
│   │   ├── AnimatedProp.py
│   │   ├── BRHood.py
│   │   ├── BRHoodDataAI.py
│   │   ├── BossbotHQ.py
│   │   ├── BossbotHQDataAI.py
│   │   ├── CSHoodDataAI.py
│   │   ├── CashbotHQ.py
│   │   ├── CashbotHQDataAI.py
│   │   ├── CogHood.py
│   │   ├── DDHood.py
│   │   ├── DDHoodDataAI.py
│   │   ├── DGHood.py
│   │   ├── DGHoodDataAI.py
│   │   ├── DLHood.py
│   │   ├── DLHoodDataAI.py
│   │   ├── EstateHood.py
│   │   ├── FishAnimatedProp.py
│   │   ├── GSHood.py
│   │   ├── GSHoodDataAI.py
│   │   ├── GZHood.py
│   │   ├── GZHoodDataAI.py
│   │   ├── GenericAnimatedBuilding.py
│   │   ├── GenericAnimatedProp.py
│   │   ├── HQPeriscopeAnimatedProp.py
│   │   ├── HQTelescopeAnimatedProp.py
│   │   ├── Hood.py
│   │   ├── HoodDataAI.py
│   │   ├── HoodUtil.py
│   │   ├── HydrantInteractiveProp.py
│   │   ├── HydrantOneAnimatedProp.py
│   │   ├── HydrantTwoAnimatedProp.py
│   │   ├── HydrantZeroAnimatedProp.py
│   │   ├── InteractiveAnimatedProp.py
│   │   ├── LawbotHQ.py
│   │   ├── LawbotHQDataAI.py
│   │   ├── MMHood.py
│   │   ├── MMHoodDataAI.py
│   │   ├── MailboxInteractiveProp.py
│   │   ├── MailboxOneAnimatedProp.py
│   │   ├── MailboxTwoAnimatedProp.py
│   │   ├── MailboxZeroAnimatedProp.py
│   │   ├── OZHood.py
│   │   ├── OZHoodDataAI.py
│   │   ├── PartyHood.py
│   │   ├── PetShopFishAnimatedProp.py
│   │   ├── Place.py
│   │   ├── QuietZoneState.py
│   │   ├── SellbotHQ.py
│   │   ├── SkyUtil.py
│   │   ├── SleepingHydrantAnimatedProp.py
│   │   ├── StreetSign.py
│   │   ├── TTHood.py
│   │   ├── TTHoodDataAI.py
│   │   ├── ToonHood.py
│   │   ├── TrashcanInteractiveProp.py
│   │   ├── TrashcanOneAnimatedProp.py
│   │   ├── TrashcanTwoAnimatedProp.py
│   │   ├── TrashcanZeroAnimatedProp.py
│   │   ├── TrialerForceAcknowledge.py
│   │   ├── TutorialHood.py
│   │   ├── ZeroAnimatedProp.py
│   │   ├── ZoneUtil.py
│   │   └── __init__.py
│   ├── launcher/
│   │   ├── DownloadForceAcknowledge.py
│   │   ├── QuickLauncher.py
│   │   ├── QuickStartLauncher.py
│   │   ├── ToontownDownloadWatcher.py
│   │   ├── ToontownDummyLauncher.py
│   │   ├── ToontownLauncher.py
│   │   └── __init__.py
│   ├── login/
│   │   ├── AvatarChoice.py
│   │   ├── AvatarChooser.py
│   │   ├── DateObject.py
│   │   └── __init__.py
│   ├── makeatoon/
│   │   ├── BodyShop.py
│   │   ├── ClothesGUI.py
│   │   ├── ColorShop.py
│   │   ├── GenderShop.py
│   │   ├── MakeAToon.py
│   │   ├── MakeAToonGlobals.py
│   │   ├── MakeClothesGUI.py
│   │   ├── NameGenerator.py
│   │   ├── NameShop.py
│   │   ├── ShuffleButton.py
│   │   ├── TTPickANamePattern.py
│   │   └── __init__.py
│   ├── minigame/
│   │   ├── ArrowKeys.py
│   │   ├── CannonGameGlobals.py
│   │   ├── CatchGameGlobals.py
│   │   ├── CatchGameToonSD.py
│   │   ├── ClerkPurchase.py
│   │   ├── CogThief.py
│   │   ├── CogThiefGameGlobals.py
│   │   ├── CogThiefGameToonSD.py
│   │   ├── CogThiefWalk.py
│   │   ├── DistributedCannonGame.py
│   │   ├── DistributedCannonGameAI.py
│   │   ├── DistributedCatchGame.py
│   │   ├── DistributedCatchGameAI.py
│   │   ├── DistributedCogThiefGame.py
│   │   ├── DistributedCogThiefGameAI.py
│   │   ├── DistributedDivingGame.py
│   │   ├── DistributedDivingGameAI.py
│   │   ├── DistributedIceGame.py
│   │   ├── DistributedIceGameAI.py
│   │   ├── DistributedIceWorld.py
│   │   ├── DistributedMazeGame.py
│   │   ├── DistributedMazeGameAI.py
│   │   ├── DistributedMinigame.py
│   │   ├── DistributedMinigameAI.py
│   │   ├── DistributedMinigamePhysicsWorld.py
│   │   ├── DistributedMinigameTemplate.py
│   │   ├── DistributedMinigameTemplateAI.py
│   │   ├── DistributedPairingGame.py
│   │   ├── DistributedPairingGameAI.py
│   │   ├── DistributedPatternGame.py
│   │   ├── DistributedPatternGameAI.py
│   │   ├── DistributedPhotoGame.py
│   │   ├── DistributedPhotoGameAI.py
│   │   ├── DistributedRaceGame.py
│   │   ├── DistributedRaceGameAI.py
│   │   ├── DistributedRingGame.py
│   │   ├── DistributedRingGameAI.py
│   │   ├── DistributedTagGame.py
│   │   ├── DistributedTagGameAI.py
│   │   ├── DistributedTagTreasure.py
│   │   ├── DistributedTagTreasureAI.py
│   │   ├── DistributedTargetGame.py
│   │   ├── DistributedTargetGameAI.py
│   │   ├── DistributedTravelGame.py
│   │   ├── DistributedTravelGameAI.py
│   │   ├── DistributedTugOfWarGame.py
│   │   ├── DistributedTugOfWarGameAI.py
│   │   ├── DistributedTwoDGame.py
│   │   ├── DistributedTwoDGameAI.py
│   │   ├── DistributedVineGame.py
│   │   ├── DistributedVineGameAI.py
│   │   ├── DivingFishSpawn.py
│   │   ├── DivingGameGlobals.py
│   │   ├── DivingGameToonSD.py
│   │   ├── DivingTreasure.py
│   │   ├── DropPlacer.py
│   │   ├── DropScheduler.py
│   │   ├── FogOverlay.py
│   │   ├── IceGameGlobals.py
│   │   ├── IceTreasure.py
│   │   ├── Maze.py
│   │   ├── MazeBase.py
│   │   ├── MazeData.py
│   │   ├── MazeGameGlobals.py
│   │   ├── MazeMapGui.py
│   │   ├── MazeSuit.py
│   │   ├── MazeTreasure.py
│   │   ├── MinigameAvatarScorePanel.py
│   │   ├── MinigameCreatorAI.py
│   │   ├── MinigameGlobals.py
│   │   ├── MinigamePhysicsWorldBase.py
│   │   ├── MinigamePowerMeter.py
│   │   ├── MinigameRulesPanel.py
│   │   ├── OrthoDrive.py
│   │   ├── OrthoWalk.py
│   │   ├── PairingGameCard.py
│   │   ├── PairingGameGlobals.py
│   │   ├── PatternGameGlobals.py
│   │   ├── PhotoGameBase.py
│   │   ├── PhotoGameGlobals.py
│   │   ├── PlayingCard.py
│   │   ├── PlayingCardDeck.py
│   │   ├── PlayingCardGlobals.py
│   │   ├── Purchase.py
│   │   ├── PurchaseBase.py
│   │   ├── RaceGameGlobals.py
│   │   ├── Ring.py
│   │   ├── RingAction.py
│   │   ├── RingGameGlobals.py
│   │   ├── RingGroup.py
│   │   ├── RingTrack.py
│   │   ├── RingTrackGroup.py
│   │   ├── RingTrackGroups.py
│   │   ├── RingTracks.py
│   │   ├── RubberBand.py
│   │   ├── SwingVine.py
│   │   ├── TagGameGlobals.py
│   │   ├── TagTreasurePlannerAI.py
│   │   ├── TargetGameGlobals.py
│   │   ├── TempMinigameAI.py
│   │   ├── ToonBlitzAssetMgr.py
│   │   ├── ToonBlitzGlobals.py
│   │   ├── Trajectory.py
│   │   ├── TravelGameGlobals.py
│   │   ├── TreasureScorePanel.py
│   │   ├── TrolleyHolidayMgrAI.py
│   │   ├── TrolleyWeekendMgrAI.py
│   │   ├── TugOfWarGameGlobals.py
│   │   ├── TwoDBattleMgr.py
│   │   ├── TwoDBlock.py
│   │   ├── TwoDCamera.py
│   │   ├── TwoDDrive.py
│   │   ├── TwoDEnemy.py
│   │   ├── TwoDEnemyMgr.py
│   │   ├── TwoDGameToonSD.py
│   │   ├── TwoDSection.py
│   │   ├── TwoDSectionMgr.py
│   │   ├── TwoDSpawnPointMgr.py
│   │   ├── TwoDStomper.py
│   │   ├── TwoDStomperMgr.py
│   │   ├── TwoDTreasure.py
│   │   ├── TwoDTreasureMgr.py
│   │   ├── TwoDWalk.py
│   │   ├── VineBat.py
│   │   ├── VineGameGlobals.py
│   │   ├── VineHeadFrame.py
│   │   ├── VineSpider.py
│   │   ├── VineTreasure.py
│   │   ├── VoteResultsPanel.py
│   │   ├── VoteResultsTrolleyPanel.py
│   │   └── __init__.py
│   ├── parties/
│   │   ├── ActivityBase.py
│   │   ├── BaseActivityFSM.py
│   │   ├── CalendarGuiDay.py
│   │   ├── CalendarGuiMonth.py
│   │   ├── Cannon.py
│   │   ├── CannonGui.py
│   │   ├── DecorBase.py
│   │   ├── Decoration.py
│   │   ├── DistributedParty.py
│   │   ├── DistributedPartyAI.py
│   │   ├── DistributedPartyActivity.py
│   │   ├── DistributedPartyActivityAI.py
│   │   ├── DistributedPartyCannon.py
│   │   ├── DistributedPartyCannonAI.py
│   │   ├── DistributedPartyCannonActivity.py
│   │   ├── DistributedPartyCannonActivityAI.py
│   │   ├── DistributedPartyCatchActivity.py
│   │   ├── DistributedPartyCatchActivityAI.py
│   │   ├── DistributedPartyCatchActivityBase.py
│   │   ├── DistributedPartyCogActivity.py
│   │   ├── DistributedPartyCogActivityAI.py
│   │   ├── DistributedPartyDance20Activity.py
│   │   ├── DistributedPartyDance20ActivityAI.py
│   │   ├── DistributedPartyDanceActivity.py
│   │   ├── DistributedPartyDanceActivityAI.py
│   │   ├── DistributedPartyDanceActivityBase.py
│   │   ├── DistributedPartyDanceActivityBaseAI.py
│   │   ├── DistributedPartyFireworksActivity.py
│   │   ├── DistributedPartyFireworksActivityAI.py
│   │   ├── DistributedPartyJukebox40Activity.py
│   │   ├── DistributedPartyJukebox40ActivityAI.py
│   │   ├── DistributedPartyJukeboxActivity.py
│   │   ├── DistributedPartyJukeboxActivityAI.py
│   │   ├── DistributedPartyJukeboxActivityBase.py
│   │   ├── DistributedPartyJukeboxActivityBaseAI.py
│   │   ├── DistributedPartyTeamActivity.py
│   │   ├── DistributedPartyTeamActivityAI.py
│   │   ├── DistributedPartyTrampolineActivity.py
│   │   ├── DistributedPartyTrampolineActivityAI.py
│   │   ├── DistributedPartyTugOfWarActivity.py
│   │   ├── DistributedPartyTugOfWarActivityAI.py
│   │   ├── DistributedPartyValentineDance20Activity.py
│   │   ├── DistributedPartyValentineDance20ActivityAI.py
│   │   ├── DistributedPartyValentineDanceActivity.py
│   │   ├── DistributedPartyValentineDanceActivityAI.py
│   │   ├── DistributedPartyValentineJukebox40Activity.py
│   │   ├── DistributedPartyValentineJukebox40ActivityAI.py
│   │   ├── DistributedPartyValentineJukeboxActivity.py
│   │   ├── DistributedPartyValentineJukeboxActivityAI.py
│   │   ├── DistributedPartyValentineTrampolineActivity.py
│   │   ├── DistributedPartyValentineTrampolineActivityAI.py
│   │   ├── DistributedPartyVictoryTrampolineActivity.py
│   │   ├── DistributedPartyVictoryTrampolineActivityAI.py
│   │   ├── DistributedPartyWinterCatchActivity.py
│   │   ├── DistributedPartyWinterCatchActivityAI.py
│   │   ├── DistributedPartyWinterCogActivity.py
│   │   ├── DistributedPartyWinterCogActivityAI.py
│   │   ├── DistributedPartyWinterTrampolineActivity.py
│   │   ├── DistributedPartyWinterTrampolineActivityAI.py
│   │   ├── InviteInfo.py
│   │   ├── InviteVisual.py
│   │   ├── JellybeanRewardGui.py
│   │   ├── JukeboxGui.py
│   │   ├── KeyCodes.py
│   │   ├── KeyCodesGui.py
│   │   ├── Party.py
│   │   ├── PartyCatchActivityToonSD.py
│   │   ├── PartyCog.py
│   │   ├── PartyCogActivity.py
│   │   ├── PartyCogActivityGui.py
│   │   ├── PartyCogActivityInput.py
│   │   ├── PartyCogActivityPlayer.py
│   │   ├── PartyCogUtils.py
│   │   ├── PartyDanceActivityToonFSM.py
│   │   ├── PartyEditor.py
│   │   ├── PartyEditorGrid.py
│   │   ├── PartyEditorGridElement.py
│   │   ├── PartyEditorGridSquare.py
│   │   ├── PartyEditorListElement.py
│   │   ├── PartyGlobals.py
│   │   ├── PartyInfo.py
│   │   ├── PartyLoader.py
│   │   ├── PartyPlanner.py
│   │   ├── PartyReplyInfo.py
│   │   ├── PartyUtils.py
│   │   ├── PublicPartyGui.py
│   │   ├── ScrolledFriendList.py
│   │   ├── ServerTimeGui.py
│   │   ├── SimpleMailBase.py
│   │   ├── StretchingArrow.py
│   │   ├── TeamActivityGui.py
│   │   ├── ToontownTimeManager.py
│   │   ├── WinterPartyCatchActivityToonSD.py
│   │   ├── __init__.py
│   │   ├── activityFSMMixins.py
│   │   └── activityFSMs.py
│   ├── pets/
│   │   ├── DistributedPet.py
│   │   ├── DistributedPetAI.py
│   │   ├── DistributedPetProxy.py
│   │   ├── DistributedPetProxyAI.py
│   │   ├── Pet.py
│   │   ├── PetActionFSM.py
│   │   ├── PetAvatarPanel.py
│   │   ├── PetBase.py
│   │   ├── PetBrain.py
│   │   ├── PetChase.py
│   │   ├── PetCollider.py
│   │   ├── PetConstants.py
│   │   ├── PetDCImports.py
│   │   ├── PetDCImportsAI.py
│   │   ├── PetDNA.py
│   │   ├── PetDetail.py
│   │   ├── PetDetailPanel.py
│   │   ├── PetFlee.py
│   │   ├── PetGoal.py
│   │   ├── PetGoalMgr.py
│   │   ├── PetHandle.py
│   │   ├── PetLeash.py
│   │   ├── PetLookerAI.py
│   │   ├── PetManager.py
│   │   ├── PetManagerAI.py
│   │   ├── PetMood.py
│   │   ├── PetNameGenerator.py
│   │   ├── PetObserve.py
│   │   ├── PetSphere.py
│   │   ├── PetTraits.py
│   │   ├── PetTricks.py
│   │   ├── PetTutorial.py
│   │   ├── PetUtil.py
│   │   ├── PetWander.py
│   │   ├── PetshopGUI.py
│   │   └── __init__.py
│   ├── quest/
│   │   ├── BlinkingArrows.py
│   │   ├── QuestBookPoster.py
│   │   ├── QuestChoiceGui.py
│   │   ├── QuestManagerAI.py
│   │   ├── QuestMap.py
│   │   ├── QuestMapGlobals.py
│   │   ├── QuestParser.py
│   │   ├── QuestPoster.py
│   │   ├── QuestRewardCounter.py
│   │   ├── Quests.py
│   │   ├── TrackChoiceGui.py
│   │   └── __init__.py
│   ├── racing/
│   │   ├── DistributedGag.py
│   │   ├── DistributedGagAI.py
│   │   ├── DistributedKartPad.py
│   │   ├── DistributedKartPadAI.py
│   │   ├── DistributedLeaderBoard.py
│   │   ├── DistributedLeaderBoardAI.py
│   │   ├── DistributedProjectile.py
│   │   ├── DistributedProjectileAI.py
│   │   ├── DistributedRace.py
│   │   ├── DistributedRaceAI.py
│   │   ├── DistributedRacePad.py
│   │   ├── DistributedRacePadAI.py
│   │   ├── DistributedStartingBlock.py
│   │   ├── DistributedStartingBlockAI.py
│   │   ├── DistributedVehicle.py
│   │   ├── DistributedVehicleAI.py
│   │   ├── DistributedViewPad.py
│   │   ├── DistributedViewPadAI.py
│   │   ├── DroppedGag.py
│   │   ├── EffectManager.py
│   │   ├── FlyingGag.py
│   │   ├── Kart.py
│   │   ├── KartDNA.py
│   │   ├── KartShopGlobals.py
│   │   ├── KartShopGui.py
│   │   ├── Piejectile.py
│   │   ├── PiejectileManager.py
│   │   ├── RaceEndPanels.py
│   │   ├── RaceGUI.py
│   │   ├── RaceGag.py
│   │   ├── RaceGlobals.py
│   │   ├── RaceHeadFrame.py
│   │   ├── RaceManagerAI.py
│   │   ├── Racer.py
│   │   └── __init__.py
│   ├── rpc/
│   │   ├── AwardManager.py
│   │   ├── AwardManagerConsts.py
│   │   ├── AwardManagerUD.py
│   │   ├── RATManager.py
│   │   ├── RATManagerUD.py
│   │   └── __init__.py
│   ├── safezone/
│   │   ├── BRPlayground.py
│   │   ├── BRSafeZoneLoader.py
│   │   ├── BRTreasurePlannerAI.py
│   │   ├── ButterflyGlobals.py
│   │   ├── CheckersBoard.py
│   │   ├── ChineseCheckersBoard.py
│   │   ├── DDPlayground.py
│   │   ├── DDSafeZoneLoader.py
│   │   ├── DDTreasurePlannerAI.py
│   │   ├── DGPlayground.py
│   │   ├── DGSafeZoneLoader.py
│   │   ├── DGTreasurePlannerAI.py
│   │   ├── DLPlayground.py
│   │   ├── DLSafeZoneLoader.py
│   │   ├── DLTreasurePlannerAI.py
│   │   ├── DistributedBRTreasure.py
│   │   ├── DistributedBRTreasureAI.py
│   │   ├── DistributedBoat.py
│   │   ├── DistributedBoatAI.py
│   │   ├── DistributedButterfly.py
│   │   ├── DistributedButterflyAI.py
│   │   ├── DistributedCheckers.py
│   │   ├── DistributedCheckersAI.py
│   │   ├── DistributedChineseCheckers.py
│   │   ├── DistributedChineseCheckersAI.py
│   │   ├── DistributedDDTreasure.py
│   │   ├── DistributedDDTreasureAI.py
│   │   ├── DistributedDGFlower.py
│   │   ├── DistributedDGFlowerAI.py
│   │   ├── DistributedDGTreasure.py
│   │   ├── DistributedDGTreasureAI.py
│   │   ├── DistributedDLTreasure.py
│   │   ├── DistributedDLTreasureAI.py
│   │   ├── DistributedEFlyingTreasure.py
│   │   ├── DistributedEFlyingTreasureAI.py
│   │   ├── DistributedETreasure.py
│   │   ├── DistributedETreasureAI.py
│   │   ├── DistributedFindFour.py
│   │   ├── DistributedFindFourAI.py
│   │   ├── DistributedFishingSpot.py
│   │   ├── DistributedFishingSpotAI.py
│   │   ├── DistributedGolfKart.py
│   │   ├── DistributedGolfKartAI.py
│   │   ├── DistributedMMPiano.py
│   │   ├── DistributedMMPianoAI.py
│   │   ├── DistributedMMTreasure.py
│   │   ├── DistributedMMTreasureAI.py
│   │   ├── DistributedOZTreasure.py
│   │   ├── DistributedOZTreasureAI.py
│   │   ├── DistributedPartyGate.py
│   │   ├── DistributedPartyGateAI.py
│   │   ├── DistributedPicnicBasket.py
│   │   ├── DistributedPicnicBasketAI.py
│   │   ├── DistributedPicnicTable.py
│   │   ├── DistributedPicnicTableAI.py
│   │   ├── DistributedSZTreasure.py
│   │   ├── DistributedSZTreasureAI.py
│   │   ├── DistributedTTTreasure.py
│   │   ├── DistributedTTTreasureAI.py
│   │   ├── DistributedTreasure.py
│   │   ├── DistributedTreasureAI.py
│   │   ├── DistributedTrolley.py
│   │   ├── DistributedTrolleyAI.py
│   │   ├── GSPlayground.py
│   │   ├── GSSafeZoneLoader.py
│   │   ├── GZPlayground.py
│   │   ├── GZSafeZoneLoader.py
│   │   ├── GameMenu.py
│   │   ├── GameTutorials.py
│   │   ├── GolfKart.py
│   │   ├── MMPlayground.py
│   │   ├── MMSafeZoneLoader.py
│   │   ├── MMTreasurePlannerAI.py
│   │   ├── OZPlayground.py
│   │   ├── OZSafeZoneLoader.py
│   │   ├── OZTreasurePlannerAI.py
│   │   ├── PicnicBasket.py
│   │   ├── Playground.py
│   │   ├── PublicWalk.py
│   │   ├── RegenTreasurePlannerAI.py
│   │   ├── SafeZoneLoader.py
│   │   ├── SafeZoneManager.py
│   │   ├── SafeZoneManagerAI.py
│   │   ├── TTPlayground.py
│   │   ├── TTSafeZoneLoader.py
│   │   ├── TTTreasurePlannerAI.py
│   │   ├── Train.py
│   │   ├── TreasurePlannerAI.py
│   │   ├── TrolleyConstants.py
│   │   ├── Walk.py
│   │   └── __init__.py
│   ├── shtiker/
│   │   ├── CogPageGlobals.py
│   │   ├── CogPageManagerAI.py
│   │   ├── DeleteManager.py
│   │   ├── DeleteManagerAI.py
│   │   ├── DirectNewsFrame.py
│   │   ├── DisguisePage.py
│   │   ├── DisplaySettingsDialog.py
│   │   ├── EventsPage.py
│   │   ├── FishPage.py
│   │   ├── GardenPage.py
│   │   ├── GolfPage.py
│   │   ├── HtmlView.py
│   │   ├── InGameNewsFrame.py
│   │   ├── InventoryPage.py
│   │   ├── IssueFrame.py
│   │   ├── IssueFrameV2.py
│   │   ├── KartPage.py
│   │   ├── MapPage.py
│   │   ├── NPCFriendPage.py
│   │   ├── NewbiePurchaseManager.py
│   │   ├── NewbiePurchaseManagerAI.py
│   │   ├── NewsPage.py
│   │   ├── OptionsPage.py
│   │   ├── PhotoAlbumPage.py
│   │   ├── PurchaseManager.py
│   │   ├── PurchaseManagerAI.py
│   │   ├── PurchaseManagerConstants.py
│   │   ├── QuestPage.py
│   │   ├── ShardPage.py
│   │   ├── ShtikerBook.py
│   │   ├── ShtikerPage.py
│   │   ├── SuitPage.py
│   │   ├── SummonCogDialog.py
│   │   ├── TIPPage.py
│   │   ├── TrackPage.py
│   │   └── __init__.py
│   ├── speedchat/
│   │   ├── TTSCAprilToonsMenu.py
│   │   ├── TTSCBoardingMenu.py
│   │   ├── TTSCCogMenu.py
│   │   ├── TTSCDecoders.py
│   │   ├── TTSCFactoryMenu.py
│   │   ├── TTSCGolfMenu.py
│   │   ├── TTSCHalloweenMenu.py
│   │   ├── TTSCIdesOfMarchMenu.py
│   │   ├── TTSCIndexedTerminal.py
│   │   ├── TTSCJellybeanJamMenu.py
│   │   ├── TTSCKartRacingMenu.py
│   │   ├── TTSCPetTrickMenu.py
│   │   ├── TTSCPromotionalMenu.py
│   │   ├── TTSCResistanceMenu.py
│   │   ├── TTSCResistanceTerminal.py
│   │   ├── TTSCSellbotFieldOfficeMenu.py
│   │   ├── TTSCSellbotInvasionMenu.py
│   │   ├── TTSCSellbotNerfMenu.py
│   │   ├── TTSCSillyPhaseFiveMenu.py
│   │   ├── TTSCSillyPhaseFourMenu.py
│   │   ├── TTSCSillyPhaseOneMenu.py
│   │   ├── TTSCSillyPhaseThreeMenu.py
│   │   ├── TTSCSillyPhaseTwoMenu.py
│   │   ├── TTSCSingingMenu.py
│   │   ├── TTSCSingingTerminal.py
│   │   ├── TTSCToontaskMenu.py
│   │   ├── TTSCToontaskTerminal.py
│   │   ├── TTSCVictoryPartiesMenu.py
│   │   ├── TTSCWinterMenu.py
│   │   ├── TTSpeedChatGlobals.py
│   │   ├── TTSpeedChatTypes.py
│   │   └── __init__.py
│   ├── spellbook/
│   │   ├── MagicWordConfig.py
│   │   ├── MagicWordIndex.py
│   │   ├── ToontownMagicWordManager.py
│   │   ├── ToontownMagicWordManagerAI.py
│   │   └── __init__.py
│   ├── suit/
│   │   ├── BossCog.py
│   │   ├── DistributedBossCog.py
│   │   ├── DistributedBossCogAI.py
│   │   ├── DistributedBossbotBoss.py
│   │   ├── DistributedBossbotBossAI.py
│   │   ├── DistributedCashbotBoss.py
│   │   ├── DistributedCashbotBossAI.py
│   │   ├── DistributedCashbotBossGoon.py
│   │   ├── DistributedCashbotBossGoonAI.py
│   │   ├── DistributedFactorySuit.py
│   │   ├── DistributedFactorySuitAI.py
│   │   ├── DistributedGoon.py
│   │   ├── DistributedGoonAI.py
│   │   ├── DistributedGridGoon.py
│   │   ├── DistributedGridGoonAI.py
│   │   ├── DistributedLawbotBoss.py
│   │   ├── DistributedLawbotBossAI.py
│   │   ├── DistributedLawbotBossSuit.py
│   │   ├── DistributedLawbotBossSuitAI.py
│   │   ├── DistributedMintSuit.py
│   │   ├── DistributedMintSuitAI.py
│   │   ├── DistributedSellbotBoss.py
│   │   ├── DistributedSellbotBossAI.py
│   │   ├── DistributedStageSuit.py
│   │   ├── DistributedStageSuitAI.py
│   │   ├── DistributedSuit.py
│   │   ├── DistributedSuitAI.py
│   │   ├── DistributedSuitBase.py
│   │   ├── DistributedSuitBaseAI.py
│   │   ├── DistributedSuitPlanner.py
│   │   ├── DistributedSuitPlannerAI.py
│   │   ├── DistributedTutorialSuit.py
│   │   ├── DistributedTutorialSuitAI.py
│   │   ├── Goon.py
│   │   ├── GoonDeath.py
│   │   ├── GoonGlobals.py
│   │   ├── GoonPathData.py
│   │   ├── RoguesGallery.py
│   │   ├── SellbotBossGlobals.py
│   │   ├── Suit.py
│   │   ├── SuitAvatarPanel.py
│   │   ├── SuitBase.py
│   │   ├── SuitDNA.py
│   │   ├── SuitDialog.py
│   │   ├── SuitInvasionManagerAI.py
│   │   ├── SuitPlannerBase.py
│   │   ├── SuitTimings.py
│   │   └── __init__.py
│   ├── toon/
│   │   ├── AccessoryGlobals.py
│   │   ├── AvatarPanelBase.py
│   │   ├── BoardingGroupInviterPanels.py
│   │   ├── DeathForceAcknowledge.py
│   │   ├── DistributedNPCBlocker.py
│   │   ├── DistributedNPCBlockerAI.py
│   │   ├── DistributedNPCClerk.py
│   │   ├── DistributedNPCClerkAI.py
│   │   ├── DistributedNPCFisherman.py
│   │   ├── DistributedNPCFishermanAI.py
│   │   ├── DistributedNPCFlippyInToonHall.py
│   │   ├── DistributedNPCFlippyInToonHallAI.py
│   │   ├── DistributedNPCKartClerk.py
│   │   ├── DistributedNPCKartClerkAI.py
│   │   ├── DistributedNPCPartyPerson.py
│   │   ├── DistributedNPCPartyPersonAI.py
│   │   ├── DistributedNPCPetclerk.py
│   │   ├── DistributedNPCPetclerkAI.py
│   │   ├── DistributedNPCScientist.py
│   │   ├── DistributedNPCScientistAI.py
│   │   ├── DistributedNPCSpecialQuestGiver.py
│   │   ├── DistributedNPCSpecialQuestGiverAI.py
│   │   ├── DistributedNPCTailor.py
│   │   ├── DistributedNPCTailorAI.py
│   │   ├── DistributedNPCToon.py
│   │   ├── DistributedNPCToonAI.py
│   │   ├── DistributedNPCToonBase.py
│   │   ├── DistributedNPCToonBaseAI.py
│   │   ├── DistributedToon.py
│   │   ├── DistributedToonAI.py
│   │   ├── DistributedToonUD.py
│   │   ├── ElevatorNotifier.py
│   │   ├── Experience.py
│   │   ├── GroupInvitee.py
│   │   ├── GroupPanel.py
│   │   ├── HealthForceAcknowledge.py
│   │   ├── InventoryBase.py
│   │   ├── InventoryNew.py
│   │   ├── LaffMeter.py
│   │   ├── LocalToon.py
│   │   ├── Motion.py
│   │   ├── NPCForceAcknowledge.py
│   │   ├── NPCFriendPanel.py
│   │   ├── NPCToons.py
│   │   ├── PlayerDetailPanel.py
│   │   ├── PlayerInfoPanel.py
│   │   ├── TTEmote.py
│   │   ├── TailorClothesGUI.py
│   │   ├── Toon.py
│   │   ├── ToonAvatarDetailPanel.py
│   │   ├── ToonAvatarPanel.py
│   │   ├── ToonDNA.py
│   │   ├── ToonDetail.py
│   │   ├── ToonHead.py
│   │   ├── ToonHeadFrame.py
│   │   ├── ToonTeleportPanel.py
│   │   └── __init__.py
│   ├── toonbase/
│   │   ├── DisplayOptions.py
│   │   ├── TTLocalizer.py
│   │   ├── TTLocalizerEnglish.py
│   │   ├── TTLocalizerEnglishProperty.py
│   │   ├── ToonBase.py
│   │   ├── ToonBaseGlobal.py
│   │   ├── ToontownAccess.py
│   │   ├── ToontownAccessAI.py
│   │   ├── ToontownBattleGlobals.py
│   │   ├── ToontownGlobals.py
│   │   ├── ToontownIntervals.py
│   │   ├── ToontownLoader.py
│   │   ├── ToontownStart.py
│   │   ├── ToontownTimer.py
│   │   └── __init__.py
│   ├── toontowngui/
│   │   ├── NewsPageButtonManager.py
│   │   ├── TTDialog.py
│   │   ├── TeaserPanel.py
│   │   ├── ToonHeadDialog.py
│   │   ├── ToontownLoadingBlocker.py
│   │   ├── ToontownLoadingScreen.py
│   │   └── __init__.py
│   ├── town/
│   │   ├── BRStreet.py
│   │   ├── BRTownLoader.py
│   │   ├── DDStreet.py
│   │   ├── DDTownLoader.py
│   │   ├── DGStreet.py
│   │   ├── DGTownLoader.py
│   │   ├── DLStreet.py
│   │   ├── DLTownLoader.py
│   │   ├── MMStreet.py
│   │   ├── MMTownLoader.py
│   │   ├── Street.py
│   │   ├── TTStreet.py
│   │   ├── TTTownLoader.py
│   │   ├── TownBattle.py
│   │   ├── TownBattleAttackPanel.py
│   │   ├── TownBattleChooseAvatarPanel.py
│   │   ├── TownBattleSOSPanel.py
│   │   ├── TownBattleSOSPetInfoPanel.py
│   │   ├── TownBattleSOSPetSearchPanel.py
│   │   ├── TownBattleToonPanel.py
│   │   ├── TownBattleWaitPanel.py
│   │   ├── TownLoader.py
│   │   ├── TutorialStreet.py
│   │   ├── TutorialTownLoader.py
│   │   └── __init__.py
│   ├── trolley/
│   │   ├── Trolley.py
│   │   └── __init__.py
│   ├── tutorial/
│   │   ├── DistributedBattleTutorial.py
│   │   ├── DistributedBattleTutorialAI.py
│   │   ├── SuitPlannerTutorialAI.py
│   │   ├── TutorialBattleManagerAI.py
│   │   ├── TutorialForceAcknowledge.py
│   │   ├── TutorialManager.py
│   │   ├── TutorialManagerAI.py
│   │   └── __init__.py
│   └── uberdog/
│       ├── DataStore.py
│       ├── DataStoreGlobals.py
│       ├── DistributedCpuInfoMgr.py
│       ├── DistributedCpuInfoMgrAI.py
│       ├── DistributedCpuInfoMgrUD.py
│       ├── DistributedDataStoreManager.py
│       ├── DistributedDataStoreManagerAI.py
│       ├── DistributedDataStoreManagerUD.py
│       ├── DistributedDeliveryManager.py
│       ├── DistributedDeliveryManagerAI.py
│       ├── DistributedDeliveryManagerUD.py
│       ├── DistributedInGameNewsMgr.py
│       ├── DistributedInGameNewsMgrAI.py
│       ├── DistributedInGameNewsMgrUD.py
│       ├── DistributedMailManager.py
│       ├── DistributedMailManagerAI.py
│       ├── DistributedMailManagerUD.py
│       ├── DistributedPartyManager.py
│       ├── DistributedPartyManagerAI.py
│       ├── DistributedPartyManagerUD.py
│       ├── DistributedSecurityMgr.py
│       ├── DistributedSecurityMgrAI.py
│       ├── DistributedSecurityMgrUD.py
│       ├── DistributedWhitelistMgr.py
│       ├── DistributedWhitelistMgrAI.py
│       ├── DistributedWhitelistMgrUD.py
│       ├── InGameNewsResponses.py
│       ├── ScavengerHuntDataStore.py
│       ├── TTSpeedchatRelay.py
│       ├── TTSpeedchatRelayUD.py
│       ├── ToontownUDRepository.py
│       ├── UDStart.py
│       └── __init__.py
├── vscode.code-workspace
└── win32/
    ├── .vscode/
    │   └── tasks.json
    ├── start_ai_server.bat
    ├── start_astron_server.bat
    ├── start_game.bat
    └── start_uberdog_server.bat
Download .txt
Showing preview only (2,124K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (28769 symbols across 1605 files)

FILE: otp/ai/AIBase.py
  class AIBase (line 20) | class AIBase:
    method __init__ (line 23) | def __init__(self):
    method setupCpuAffinities (line 97) | def setupCpuAffinities(self, minChannel):
    method taskManagerDoYield (line 123) | def taskManagerDoYield(self, frameStartTime, nextScheuledTaksTime):
    method createStats (line 132) | def createStats(self, hostname = None, port = None):
    method __sleepCycleTask (line 144) | def __sleepCycleTask(self, task):
    method __resetPrevTransform (line 148) | def __resetPrevTransform(self, state):
    method __ivalLoop (line 152) | def __ivalLoop(self, state):
    method __igLoop (line 156) | def __igLoop(self, state):
    method shutdown (line 160) | def shutdown(self):
    method restart (line 166) | def restart(self):
    method getRepository (line 175) | def getRepository(self):
    method run (line 178) | def run(self):

FILE: otp/ai/AIBaseGlobal.py
  function inspect (line 17) | def inspect(anObject):

FILE: otp/ai/AIZoneData.py
  class AIZoneData (line 9) | class AIZoneData:
    method __init__ (line 12) | def __init__(self, air, parentId, zoneId):
    method destroy (line 18) | def destroy(self):
    method __getattr__ (line 25) | def __getattr__(self, attr):
  class AIZoneDataObj (line 29) | class AIZoneDataObj:
    method __init__ (line 33) | def __init__(self, parentId, zoneId):
    method __str__ (line 40) | def __str__(self):
    method _incRefCount (line 52) | def _incRefCount(self):
    method _decRefCount (line 55) | def _decRefCount(self):
    method _getRefCount (line 58) | def _getRefCount(self):
    method destroy (line 61) | def destroy(self):
    method getLocation (line 82) | def getLocation(self):
    method getRender (line 85) | def getRender(self):
    method getNonCollidableParent (line 92) | def getNonCollidableParent(self):
    method getParentMgr (line 100) | def getParentMgr(self):
    method hasCollTrav (line 107) | def hasCollTrav(self, name = None):
    method getCollTrav (line 112) | def getCollTrav(self, name = None):
    method removeCollTrav (line 119) | def removeCollTrav(self, name):
    method _getCTravTaskName (line 123) | def _getCTravTaskName(self, name = None):
    method _doCollisions (line 128) | def _doCollisions(self, task = None, topNode = None, cTravName = None):
    method doCollTrav (line 145) | def doCollTrav(self, topNode = None, cTravName = None):
    method startCollTrav (line 149) | def startCollTrav(self, respectPrevTransform = 1, cTravName = None):
    method stopCollTrav (line 159) | def stopCollTrav(self, cTravName = None):
    method setRespectPrevTransform (line 169) | def setRespectPrevTransform(self, flag, cTravName = None):
    method getRespectPrevTransform (line 175) | def getRespectPrevTransform(self, cTravName = None):
  class AIZoneDataStore (line 181) | class AIZoneDataStore:
    method __init__ (line 184) | def __init__(self):
    method destroy (line 187) | def destroy(self):
    method hasDataForZone (line 193) | def hasDataForZone(self, parentId, zoneId):
    method getDataForZone (line 197) | def getDataForZone(self, parentId, zoneId):
    method releaseDataForZone (line 206) | def releaseDataForZone(self, parentId, zoneId):
    method printStats (line 216) | def printStats(self):

FILE: otp/ai/BanManagerAI.py
  class BanManagerAI (line 6) | class BanManagerAI:
    method __init__ (line 13) | def __init__(self):
    method ban (line 18) | def ban(self, avatarId, dislid, comment):
    method cleanupBanReq (line 50) | def cleanupBanReq(self, banReq):
    method doBanUrlTask (line 58) | def doBanUrlTask(self, task):

FILE: otp/ai/Barrier.py
  class Barrier (line 6) | class Barrier(DirectObject.DirectObject):
    method __init__ (line 9) | def __init__(self, name, uniqueName, avIdList, timeout, clearedFunc = ...
    method cleanup (line 39) | def cleanup(self):
    method clear (line 45) | def clear(self, avId):
    method isActive (line 59) | def isActive(self):
    method getPendingAvatars (line 62) | def getPendingAvatars(self):
    method __timerExpired (line 65) | def __timerExpired(self, task):
    method __handleUnexpectedExit (line 78) | def __handleUnexpectedExit(self, avId):

FILE: otp/ai/GarbageLeakServerEventAggregator.py
  class GarbageLeakServerEventAggregator (line 4) | class GarbageLeakServerEventAggregator(DirectObject):
    method __init__ (line 6) | def __init__(self, cr):
    method destroy (line 14) | def destroy(self):
    method _handleCycleCounts (line 19) | def _handleCycleCounts(self, desc2num):
    method _startSending (line 23) | def _startSending(self):
    method _stopSending (line 29) | def _stopSending(self):
    method _sendLeaks (line 35) | def _sendLeaks(self, task = None):

FILE: otp/ai/TimeManager.py
  class TimeManager (line 17) | class TimeManager(DistributedObject.DistributedObject):
    method __init__ (line 21) | def __init__(self, cr):
    method generate (line 40) | def generate(self):
    method announceGenerate (line 54) | def announceGenerate(self):
    method gotInitialTimeSync (line 58) | def gotInitialTimeSync(self):
    method disable (line 61) | def disable(self):
    method delete (line 74) | def delete(self):
    method startTask (line 85) | def startTask(self):
    method stopTask (line 89) | def stopTask(self):
    method doUpdate (line 92) | def doUpdate(self, task):
    method handleHotkey (line 97) | def handleHotkey(self):
    method handleClockError (line 104) | def handleClockError(self):
    method synchronize (line 107) | def synchronize(self, description):
    method serverTime (line 122) | def serverTime(self, context, timestamp, timeOfDay):
    method setDisconnectReason (line 148) | def setDisconnectReason(self, disconnectCode):
    method setExceptionInfo (line 152) | def setExceptionInfo(self):
    method setStackDump (line 158) | def setStackDump(self, dump):
    method d_setSignature (line 176) | def d_setSignature(self, signature, hash, pyc):
    method sendCpuInfo (line 179) | def sendCpuInfo(self):
    method setFrameRateInterval (line 205) | def setFrameRateInterval(self, frameRateInterval):
    method frameRateMonitor (line 214) | def frameRateMonitor(self, task):
    method d_setFrameRate (line 256) | def d_setFrameRate(self, fps, deviation, numAvs, locationCode, timeInL...
    method handleDetectGarbageHotkey (line 296) | def handleDetectGarbageHotkey(self):
    method d_checkForGarbageLeaks (line 304) | def d_checkForGarbageLeaks(self, wantReply):
    method setNumAIGarbageLeaks (line 307) | def setNumAIGarbageLeaks(self, numLeaks):
    method d_setClientGarbageLeak (line 316) | def d_setClientGarbageLeak(self, num, description):
    method getMacOsInfo (line 319) | def getMacOsInfo(self, defaultOsInfo):

FILE: otp/ai/TimeManagerAI.py
  class TimeManagerAI (line 10) | class TimeManagerAI(DistributedObjectAI):
    method __init__ (line 13) | def __init__(self, air):
    method requestServerTime (line 17) | def requestServerTime(self, context):
    method setDisconnectReason (line 25) | def setDisconnectReason(self, disconnectCode):

FILE: otp/avatar/Avatar.py
  function reconsiderAllUnderstandable (line 18) | def reconsiderAllUnderstandable():
  class Avatar (line 23) | class Avatar(Actor, ShadowCaster):
    method __init__ (line 28) | def __init__(self, other = None):
    method delete (line 81) | def delete(self):
    method acceptNametagAmbientLightChange (line 98) | def acceptNametagAmbientLightChange(self):
    method ignoreNametagAmbientLightChange (line 101) | def ignoreNametagAmbientLightChange(self):
    method isLocal (line 104) | def isLocal(self):
    method isPet (line 107) | def isPet(self):
    method isProxy (line 110) | def isProxy(self):
    method setPlayerType (line 113) | def setPlayerType(self, playerType):
    method setCommonChatFlags (line 123) | def setCommonChatFlags(self, commonChatFlags):
    method setWhitelistChatFlags (line 129) | def setWhitelistChatFlags(self, whitelistChatFlags):
    method considerUnderstandable (line 135) | def considerUnderstandable(self):
    method isUnderstandable (line 180) | def isUnderstandable(self):
    method setDNAString (line 183) | def setDNAString(self, dnaString):
    method setDNA (line 186) | def setDNA(self, dna):
    method getAvatarScale (line 189) | def getAvatarScale(self):
    method setAvatarScale (line 192) | def setAvatarScale(self, scale):
    method getNametagScale (line 198) | def getNametagScale(self):
    method setNametagScale (line 201) | def setNametagScale(self, scale):
    method adjustNametag3d (line 205) | def adjustNametag3d(self, parentScale = 1.0):
    method getHeight (line 208) | def getHeight(self):
    method setHeight (line 211) | def setHeight(self, height):
    method getRadius (line 221) | def getRadius(self):
    method getName (line 224) | def getName(self):
    method getType (line 227) | def getType(self):
    method setName (line 230) | def setName(self, name):
    method setDisplayName (line 238) | def setDisplayName(self, str):
    method getFont (line 244) | def getFont(self):
    method setFont (line 247) | def setFont(self, font):
    method getStyle (line 251) | def getStyle(self):
    method setStyle (line 254) | def setStyle(self, style):
    method getDialogueArray (line 257) | def getDialogueArray(self):
    method playCurrentDialogue (line 260) | def playCurrentDialogue(self, dialogue, chatFlags, interrupt = 1):
    method playDialogueForString (line 272) | def playDialogueForString(self, chatString):
    method playDialogue (line 295) | def playDialogue(self, type, length):
    method getDialogueSfx (line 319) | def getDialogueSfx(self, type, length):
    method setChatAbsolute (line 344) | def setChatAbsolute(self, chatString, chatFlags, dialogue = None, inte...
    method setChatMuted (line 348) | def setChatMuted(self, chatString, chatFlags, dialogue = None, interru...
    method displayTalk (line 351) | def displayTalk(self, chatString):
    method clearChat (line 358) | def clearChat(self):
    method isInView (line 361) | def isInView(self):
    method getNameVisible (line 366) | def getNameVisible(self):
    method setNameVisible (line 369) | def setNameVisible(self, bool):
    method hideName (line 376) | def hideName(self):
    method showName (line 379) | def showName(self):
    method hideNametag2d (line 383) | def hideNametag2d(self):
    method showNametag2d (line 387) | def showNametag2d(self):
    method hideNametag3d (line 393) | def hideNametag3d(self):
    method showNametag3d (line 396) | def showNametag3d(self):
    method setPickable (line 402) | def setPickable(self, flag):
    method clickedNametag (line 405) | def clickedNametag(self):
    method setPageChat (line 411) | def setPageChat(self, addressee, paragraph, message, quitButton, extra...
    method setLocalPageChat (line 434) | def setLocalPageChat(self, message, quitButton, extraChatFlags = None,...
    method setPageNumber (line 460) | def setPageNumber(self, paragraph, pageNumber, timestamp = None):
    method advancePageNumber (line 478) | def advancePageNumber(self):
    method __updatePageChat (line 491) | def __updatePageChat(self):
    method getAirborneHeight (line 516) | def getAirborneHeight(self):
    method initializeNametag3d (line 520) | def initializeNametag3d(self):
    method nametagAmbientLightChanged (line 529) | def nametagAmbientLightChanged(self, newlight):
    method deleteNametag3d (line 534) | def deleteNametag3d(self):
    method initializeBodyCollisions (line 540) | def initializeBodyCollisions(self, collIdStr):
    method stashBodyCollisions (line 550) | def stashBodyCollisions(self):
    method unstashBodyCollisions (line 554) | def unstashBodyCollisions(self):
    method disableBodyCollisions (line 558) | def disableBodyCollisions(self):
    method addActive (line 565) | def addActive(self):
    method removeActive (line 576) | def removeActive(self):
    method loop (line 586) | def loop(self, animName, restart = 1, partName = None, fromFrame = Non...

FILE: otp/avatar/AvatarDNA.py
  class AvatarDNA (line 8) | class AvatarDNA:
    method __str__ (line 10) | def __str__(self):
    method makeNetString (line 13) | def makeNetString(self):
    method printNetString (line 16) | def printNetString(self):
    method makeFromNetString (line 21) | def makeFromNetString(self, string):
    method getType (line 24) | def getType(self):

FILE: otp/avatar/AvatarDetail.py
  class AvatarDetail (line 4) | class AvatarDetail:
    method __init__ (line 7) | def __init__(self, doId, callWhenDone):
    method isReady (line 12) | def isReady(self):
    method getId (line 15) | def getId(self):
    method enterQuery (line 18) | def enterQuery(self):
    method exitQuery (line 32) | def exitQuery(self):
    method createHolder (line 35) | def createHolder(self):
    method getDClass (line 38) | def getDClass(self):
    method __handleResponse (line 41) | def __handleResponse(self, gotData, avatar, dclass):

FILE: otp/avatar/AvatarHandle.py
  class AvatarHandle (line 3) | class AvatarHandle:
    method getName (line 6) | def getName(self):
    method isOnline (line 11) | def isOnline(self):
    method isUnderstandable (line 16) | def isUnderstandable(self):
    method setTalkWhisper (line 21) | def setTalkWhisper(self, fromAV, fromAC, avatarName, chat, mods, flags):

FILE: otp/avatar/AvatarPanel.py
  class AvatarPanel (line 7) | class AvatarPanel(DirectObject.DirectObject):
    method __init__ (line 10) | def __init__(self, avatar, FriendsListPanel = None):
    method cleanup (line 41) | def cleanup(self):
    method __handleClose (line 53) | def __handleClose(self):
    method __handleDisableAvatar (line 60) | def __handleDisableAvatar(self):
    method handleDisableAvatar (line 66) | def handleDisableAvatar(self):
    method isHidden (line 71) | def isHidden(self):
    method getType (line 74) | def getType(self):

FILE: otp/avatar/DistributedAvatar.py
  class DistributedAvatar (line 19) | class DistributedAvatar(DistributedActor, Avatar):
    method __init__ (line 24) | def __init__(self, cr):
    method disable (line 39) | def disable(self):
    method delete (line 55) | def delete(self):
    method generate (line 63) | def generate(self):
    method announceGenerate (line 73) | def announceGenerate(self):
    method __setTags (line 84) | def __setTags(self, extra = None):
    method do_setParent (line 91) | def do_setParent(self, parentToken):
    method toonUp (line 101) | def toonUp(self, hpGained):
    method takeDamage (line 115) | def takeDamage(self, hpLost, bonus = 0):
    method setHp (line 128) | def setHp(self, hitPoints):
    method hpChange (line 136) | def hpChange(self, quietly = 0):
    method died (line 144) | def died(self):
    method getHp (line 147) | def getHp(self):
    method setMaxHp (line 150) | def setMaxHp(self, hitPoints):
    method getMaxHp (line 154) | def getMaxHp(self):
    method getName (line 157) | def getName(self):
    method setName (line 160) | def setName(self, name):
    method showHpText (line 169) | def showHpText(self, number, bonus = 0, scale = 1):
    method showHpString (line 211) | def showHpString(self, text, duration = 0.85, scale = 0.7):
    method hideHpText (line 231) | def hideHpText(self):
    method getStareAtNodeAndOffset (line 240) | def getStareAtNodeAndOffset(self):
    method getAvIdName (line 243) | def getAvIdName(self):
    method __nameTagShowAvId (line 246) | def __nameTagShowAvId(self, extra = None):
    method __nameTagShowName (line 249) | def __nameTagShowName(self, extra = None):
    method askAvOnShard (line 252) | def askAvOnShard(self, avId):
    method confirmAvOnShard (line 258) | def confirmAvOnShard(self, avId, onShard = True):
    method getDialogueArray (line 261) | def getDialogueArray(self):

FILE: otp/avatar/DistributedAvatarAI.py
  class DistributedAvatarAI (line 8) | class DistributedAvatarAI(DistributedNodeAI.DistributedNodeAI):
    method __init__ (line 10) | def __init__(self, air):
    method b_setName (line 15) | def b_setName(self, name):
    method d_setName (line 19) | def d_setName(self, name):
    method setName (line 22) | def setName(self, name):
    method getName (line 25) | def getName(self):
    method b_setMaxHp (line 28) | def b_setMaxHp(self, maxHp):
    method d_setMaxHp (line 32) | def d_setMaxHp(self, maxHp):
    method setMaxHp (line 35) | def setMaxHp(self, maxHp):
    method getMaxHp (line 38) | def getMaxHp(self):
    method b_setHp (line 41) | def b_setHp(self, hp):
    method d_setHp (line 45) | def d_setHp(self, hp):
    method setHp (line 48) | def setHp(self, hp):
    method getHp (line 51) | def getHp(self):
    method b_setLocationName (line 54) | def b_setLocationName(self, locationName):
    method d_setLocationName (line 58) | def d_setLocationName(self, locationName):
    method setLocationName (line 61) | def setLocationName(self, locationName):
    method getLocationName (line 64) | def getLocationName(self):
    method b_setActivity (line 67) | def b_setActivity(self, activity):
    method d_setActivity (line 71) | def d_setActivity(self, activity):
    method setActivity (line 74) | def setActivity(self, activity):
    method getActivity (line 77) | def getActivity(self):
    method toonUp (line 80) | def toonUp(self, num):
    method getRadius (line 86) | def getRadius(self):
    method checkAvOnShard (line 89) | def checkAvOnShard(self, avId):
    method setParentStr (line 96) | def setParentStr(self, parentToken):

FILE: otp/avatar/DistributedAvatarUD.py
  class DistributedAvatarUD (line 4) | class DistributedAvatarUD(DistributedObjectUD):

FILE: otp/avatar/DistributedPlayer.py
  class DistributedPlayer (line 18) | class DistributedPlayer(DistributedAvatar.DistributedAvatar, PlayerBase....
    method __init__ (line 22) | def __init__(self, cr):
    method GetPlayerGenerateEvent (line 48) | def GetPlayerGenerateEvent():
    method GetPlayerNetworkDeleteEvent (line 52) | def GetPlayerNetworkDeleteEvent():
    method GetPlayerDeleteEvent (line 56) | def GetPlayerDeleteEvent():
    method networkDelete (line 59) | def networkDelete(self):
    method disable (line 63) | def disable(self):
    method delete (line 67) | def delete(self):
    method generate (line 78) | def generate(self):
    method announceGenerate (line 81) | def announceGenerate(self):
    method setLocation (line 85) | def setLocation(self, parentId, zoneId):
    method isGeneratedOnDistrict (line 93) | def isGeneratedOnDistrict(self, districtId = None):
    method getArrivedOnDistrictEvent (line 100) | def getArrivedOnDistrictEvent(self, districtId = None):
    method arrivedOnDistrict (line 107) | def arrivedOnDistrict(self, districtId):
    method setLeftDistrict (line 118) | def setLeftDistrict(self):
    method hasParentingRules (line 122) | def hasParentingRules(self):
    method setAccountName (line 126) | def setAccountName(self, accountName):
    method setSystemMessage (line 129) | def setSystemMessage(self, aboutId, chatString, whisperType = WhisperP...
    method displayWhisper (line 132) | def displayWhisper(self, fromId, chatString, whisperType):
    method displayWhisperPlayer (line 135) | def displayWhisperPlayer(self, playerId, chatString, whisperType):
    method whisperSCTo (line 138) | def whisperSCTo(self, msgIndex, sendToId, toPlayer):
    method setWhisperSCFrom (line 145) | def setWhisperSCFrom(self, fromId, msgIndex):
    method whisperSCCustomTo (line 161) | def whisperSCCustomTo(self, msgIndex, sendToId, toPlayer):
    method _isValidWhisperSource (line 168) | def _isValidWhisperSource(self, source):
    method setWhisperSCCustomFrom (line 171) | def setWhisperSCCustomFrom(self, fromId, msgIndex):
    method whisperSCEmoteTo (line 190) | def whisperSCEmoteTo(self, emoteId, sendToId, toPlayer):
    method setWhisperSCEmoteFrom (line 198) | def setWhisperSCEmoteFrom(self, fromId, emoteId):
    method d_setWhisperIgnored (line 211) | def d_setWhisperIgnored(self, sendToId):
    method setChatAbsolute (line 214) | def setChatAbsolute(self, chatString, chatFlags, dialogue = None, inte...
    method b_setChat (line 219) | def b_setChat(self, chatString, chatFlags):
    method d_setChat (line 233) | def d_setChat(self, chatString, chatFlags):
    method setTalk (line 236) | def setTalk(self, fromAV, fromAC, avatarName, chat, mods, flags):
    method setTalkWhisper (line 246) | def setTalkWhisper(self, fromAV, fromAC, avatarName, chat, mods, flags):
    method displayTalkWhisper (line 252) | def displayTalkWhisper(self, fromId, avatarName, chatString, mods):
    method scrubTalk (line 255) | def scrubTalk(self, chat, mods):
    method setChat (line 258) | def setChat(self, chatString, chatFlags, DISLid):
    method b_setSC (line 272) | def b_setSC(self, msgIndex):
    method d_setSC (line 276) | def d_setSC(self, msgIndex):
    method setSC (line 280) | def setSC(self, msgIndex):
    method b_setSCCustom (line 290) | def b_setSCCustom(self, msgIndex):
    method d_setSCCustom (line 294) | def d_setSCCustom(self, msgIndex):
    method setSCCustom (line 298) | def setSCCustom(self, msgIndex):
    method b_setSCEmote (line 308) | def b_setSCEmote(self, emoteId):
    method d_friendsNotify (line 311) | def d_friendsNotify(self, avId, status):
    method friendsNotify (line 314) | def friendsNotify(self, avId, status):
    method d_teleportQuery (line 323) | def d_teleportQuery(self, requesterId, sendToId = None):
    method teleportQuery (line 327) | def teleportQuery(self, requesterId):
    method failedTeleportMessageOk (line 362) | def failedTeleportMessageOk(self, fromId):
    method d_teleportResponse (line 372) | def d_teleportResponse(self, avId, available, shardId, hoodId, zoneId,...
    method teleportResponse (line 385) | def teleportResponse(self, avId, available, shardId, hoodId, zoneId):
    method d_teleportGiveup (line 397) | def d_teleportGiveup(self, requesterId, sendToId = None):
    method teleportGiveup (line 401) | def teleportGiveup(self, requesterId):
    method b_teleportGreeting (line 411) | def b_teleportGreeting(self, avId):
    method d_teleportGreeting (line 415) | def d_teleportGreeting(self, avId):
    method teleportGreeting (line 418) | def teleportGreeting(self, avId):
    method setTeleportAvailable (line 426) | def setTeleportAvailable(self, available):
    method getTeleportAvailable (line 429) | def getTeleportAvailable(self):
    method getFriendsList (line 432) | def getFriendsList(self):
    method setFriendsList (line 435) | def setFriendsList(self, friendsList):
    method setDISLname (line 442) | def setDISLname(self, name):
    method setDISLid (line 445) | def setDISLid(self, id):
    method setAutoRun (line 448) | def setAutoRun(self, value):
    method getAutoRun (line 451) | def getAutoRun(self):
    method setAccessLevel (line 454) | def setAccessLevel(self, accessLevel):
    method getAccessLevel (line 459) | def getAccessLevel(self):

FILE: otp/avatar/DistributedPlayerAI.py
  class DistributedPlayerAI (line 8) | class DistributedPlayerAI(DistributedAvatarAI.DistributedAvatarAI, Playe...
    method __init__ (line 10) | def __init__(self, air):
    method generate (line 21) | def generate(self):
    method announceGenerate (line 25) | def announceGenerate(self):
    method _announceArrival (line 30) | def _announceArrival(self):
    method _announceExit (line 33) | def _announceExit(self):
    method _sendExitServerEvent (line 36) | def _sendExitServerEvent(self):
    method delete (line 41) | def delete(self):
    method isPlayerControlled (line 50) | def isPlayerControlled(self):
    method setLocation (line 53) | def setLocation(self, parentId, zoneId):
    method _doPlayerEnter (line 61) | def _doPlayerEnter(self):
    method _doPlayerExit (line 65) | def _doPlayerExit(self):
    method incrementPopulation (line 69) | def incrementPopulation(self):
    method decrementPopulation (line 72) | def decrementPopulation(self):
    method b_setChat (line 75) | def b_setChat(self, chatString, chatFlags):
    method d_setChat (line 79) | def d_setChat(self, chatString, chatFlags):
    method setChat (line 82) | def setChat(self, chatString, chatFlags):
    method d_setMaxHp (line 85) | def d_setMaxHp(self, maxHp):
    method d_setSystemMessage (line 89) | def d_setSystemMessage(self, aboutId, chatString):
    method d_setCommonChatFlags (line 92) | def d_setCommonChatFlags(self, flags):
    method setCommonChatFlags (line 95) | def setCommonChatFlags(self, flags):
    method d_friendsNotify (line 98) | def d_friendsNotify(self, avId, status):
    method friendsNotify (line 101) | def friendsNotify(self, avId, status):
    method setAccountName (line 104) | def setAccountName(self, accountName):
    method getAccountName (line 107) | def getAccountName(self):
    method setDISLid (line 110) | def setDISLid(self, id):
    method setAccessLevel (line 113) | def setAccessLevel(self, accessLevel):
    method getAccessLevel (line 116) | def getAccessLevel(self):
    method d_setFriendsList (line 119) | def d_setFriendsList(self, friendsList):
    method setFriendsList (line 122) | def setFriendsList(self, friendsList):
    method getFriendsList (line 126) | def getFriendsList(self):
    method extendFriendsList (line 129) | def extendFriendsList(self, friendId, friendCode):

FILE: otp/avatar/Emote.py
  class Emote (line 3) | class Emote:
    method __init__ (line 7) | def __init__(self):
    method isEnabled (line 11) | def isEnabled(self, index):

FILE: otp/avatar/LocalAvatar.py
  class LocalAvatar (line 22) | class LocalAvatar(DistributedAvatar.DistributedAvatar, DistributedSmooth...
    method __init__ (line 32) | def __init__(self, cr, chatMgr, talkAssistant = None, passMessagesThro...
    method useSwimControls (line 85) | def useSwimControls(self):
    method useGhostControls (line 88) | def useGhostControls(self):
    method useWalkControls (line 91) | def useWalkControls(self):
    method useTwoDControls (line 94) | def useTwoDControls(self):
    method isLockedDown (line 97) | def isLockedDown(self):
    method lock (line 100) | def lock(self):
    method unlock (line 105) | def unlock(self):
    method isInWater (line 110) | def isInWater(self):
    method isTeleportAllowed (line 113) | def isTeleportAllowed(self):
    method setTeleportAllowed (line 116) | def setTeleportAllowed(self, flag):
    method sendFriendsListEvent (line 120) | def sendFriendsListEvent(self):
    method delete (line 124) | def delete(self):
    method shadowReach (line 158) | def shadowReach(self, state):
    method wantLegacyLifter (line 163) | def wantLegacyLifter(self):
    method setupControls (line 166) | def setupControls(self, avatarRadius = 1.4, floorOffset = OTPGlobals.F...
    method initializeCollisions (line 201) | def initializeCollisions(self):
    method deleteCollisions (line 204) | def deleteCollisions(self):
    method initializeSmartCameraCollisions (line 209) | def initializeSmartCameraCollisions(self):
    method deleteSmartCameraCollisions (line 265) | def deleteSmartCameraCollisions(self):
    method collisionsOff (line 298) | def collisionsOff(self):
    method collisionsOn (line 301) | def collisionsOn(self):
    method recalcCameraSphere (line 304) | def recalcCameraSphere(self):
    method putCameraFloorRayOnAvatar (line 331) | def putCameraFloorRayOnAvatar(self):
    method putCameraFloorRayOnCamera (line 334) | def putCameraFloorRayOnCamera(self):
    method attachCamera (line 337) | def attachCamera(self):
    method detachCamera (line 344) | def detachCamera(self):
    method stopJumpLandTask (line 347) | def stopJumpLandTask(self):
    method jumpStart (line 353) | def jumpStart(self):
    method returnToWalk (line 358) | def returnToWalk(self, task):
    method jumpLandAnimFix (line 369) | def jumpLandAnimFix(self, jumpTime):
    method jumpHardLand (line 373) | def jumpHardLand(self):
    method jumpLand (line 381) | def jumpLand(self):
    method setupAnimationEvents (line 386) | def setupAnimationEvents(self):
    method ignoreAnimationEvents (line 391) | def ignoreAnimationEvents(self):
    method allowHardLand (line 396) | def allowHardLand(self):
    method enableSmartCameraViews (line 399) | def enableSmartCameraViews(self):
    method disableSmartCameraViews (line 405) | def disableSmartCameraViews(self):
    method enableAvatarControls (line 412) | def enableAvatarControls(self):
    method disableAvatarControls (line 419) | def disableAvatarControls(self):
    method setWalkSpeedNormal (line 427) | def setWalkSpeedNormal(self):
    method setWalkSpeedSlow (line 430) | def setWalkSpeedSlow(self):
    method pageUp (line 433) | def pageUp(self):
    method pageDown (line 445) | def pageDown(self):
    method clearPageUpDown (line 457) | def clearPageUpDown(self):
    method nextCameraPos (line 464) | def nextCameraPos(self, forward):
    method initCameraPositions (line 479) | def initCameraPositions(self):
    method addCameraPosition (line 542) | def addCameraPosition(self, camPos = None):
    method resetCameraPosition (line 558) | def resetCameraPosition(self):
    method removeCameraPosition (line 562) | def removeCameraPosition(self):
    method printCameraPositions (line 571) | def printCameraPositions(self):
    method printCameraPosition (line 579) | def printCameraPosition(self, index):
    method posCamera (line 588) | def posCamera(self, lerp, time):
    method getClampedAvatarHeight (line 611) | def getClampedAvatarHeight(self):
    method getVisibilityPoint (line 614) | def getVisibilityPoint(self):
    method setLookAtPoint (line 617) | def setLookAtPoint(self, la):
    method getLookAtPoint (line 620) | def getLookAtPoint(self):
    method setIdealCameraPos (line 623) | def setIdealCameraPos(self, pos):
    method getIdealCameraPos (line 627) | def getIdealCameraPos(self):
    method setCameraPositionByIndex (line 630) | def setCameraPositionByIndex(self, index):
    method setCameraPosForPetInteraction (line 634) | def setCameraPosForPetInteraction(self):
    method unsetCameraPosForPetInteraction (line 641) | def unsetCameraPosForPetInteraction(self):
    method setCameraSettings (line 646) | def setCameraSettings(self, camSettings):
    method getCompromiseCameraPos (line 664) | def getCompromiseCameraPos(self):
    method updateSmartCameraCollisionLineSegment (line 678) | def updateSmartCameraCollisionLineSegment(self):
    method initializeSmartCamera (line 687) | def initializeSmartCamera(self):
    method shutdownSmartCamera (line 700) | def shutdownSmartCamera(self):
    method setOnLevelGround (line 703) | def setOnLevelGround(self, flag):
    method setCameraCollisionsCanMove (line 706) | def setCameraCollisionsCanMove(self, flag):
    method setGeom (line 709) | def setGeom(self, geom):
    method startUpdateSmartCamera (line 712) | def startUpdateSmartCamera(self, push = 1):
    method stopUpdateSmartCamera (line 737) | def stopUpdateSmartCamera(self):
    method updateSmartCamera (line 750) | def updateSmartCamera(self, task):
    method positionCameraWithPusher (line 774) | def positionCameraWithPusher(self, pos, lookAt):
    method nudgeCamera (line 779) | def nudgeCamera(self):
    method popCameraToDest (line 807) | def popCameraToDest(self):
    method handleCameraObstruction (line 813) | def handleCameraObstruction(self, camObstrCollisionEntry):
    method handleCameraFloorInteraction (line 821) | def handleCameraFloorInteraction(self):
    method lerpCameraFov (line 838) | def lerpCameraFov(self, fov, time):
    method setCameraFov (line 849) | def setCameraFov(self, fov):
    method gotoNode (line 854) | def gotoNode(self, node, eyeHeight = 3):
    method setCustomMessages (line 892) | def setCustomMessages(self, customMessages):
    method displayWhisper (line 896) | def displayWhisper(self, fromId, chatString, whisperType):
    method displayWhisperPlayer (line 910) | def displayWhisperPlayer(self, fromId, chatString, whisperType):
    method setAnimMultiplier (line 927) | def setAnimMultiplier(self, value):
    method getAnimMultiplier (line 930) | def getAnimMultiplier(self):
    method enableRun (line 933) | def enableRun(self):
    method disableRun (line 943) | def disableRun(self):
    method startRunWatch (line 953) | def startRunWatch(self):
    method stopRunWatch (line 961) | def stopRunWatch(self):
    method runSound (line 966) | def runSound(self):
    method walkSound (line 970) | def walkSound(self):
    method stopSound (line 974) | def stopSound(self):
    method wakeUp (line 978) | def wakeUp(self):
    method gotoSleep (line 987) | def gotoSleep(self):
    method forceGotoSleep (line 992) | def forceGotoSleep(self):
    method startSleepWatch (line 997) | def startSleepWatch(self, callback):
    method stopSleepWatch (line 1001) | def stopSleepWatch(self):
    method startSleepSwimTest (line 1006) | def startSleepSwimTest(self):
    method stopSleepSwimTest (line 1017) | def stopSleepSwimTest(self):
    method sleepSwimTest (line 1022) | def sleepSwimTest(self, task):
    method swimTimeoutAction (line 1039) | def swimTimeoutAction(self):
    method trackAnimToSpeed (line 1042) | def trackAnimToSpeed(self, task):
    method hasTrackAnimToSpeed (line 1100) | def hasTrackAnimToSpeed(self):
    method startTrackAnimToSpeed (line 1104) | def startTrackAnimToSpeed(self):
    method stopTrackAnimToSpeed (line 1115) | def stopTrackAnimToSpeed(self):
    method startChat (line 1120) | def startChat(self):
    method stopChat (line 1128) | def stopChat(self):
    method printCamPos (line 1136) | def printCamPos(self):
    method d_broadcastPositionNow (line 1142) | def d_broadcastPositionNow(self):
    method travCollisionsLOS (line 1146) | def travCollisionsLOS(self, n = None):
    method travCollisionsFloor (line 1152) | def travCollisionsFloor(self, n = None):
    method travCollisionsPusher (line 1158) | def travCollisionsPusher(self, n = None):
    method __friendOnline (line 1164) | def __friendOnline(self, doId, commonChatFlags = 0, whitelistChatFlags...
    method __friendOffline (line 1178) | def __friendOffline(self, doId):
    method __playerOnline (line 1184) | def __playerOnline(self, playerId):
    method __playerOffline (line 1189) | def __playerOffline(self, playerId):
    method clickedWhisper (line 1194) | def clickedWhisper(self, doId, isPlayer = None):
    method d_setParent (line 1207) | def d_setParent(self, parentToken):
    method handlePlayerFriendWhisper (line 1210) | def handlePlayerFriendWhisper(self, playerId, charMessage):
    method canChat (line 1214) | def canChat(self):

FILE: otp/avatar/PlayerBase.py
  class PlayerBase (line 3) | class PlayerBase:
    method __init__ (line 5) | def __init__(self):
    method atLocation (line 8) | def atLocation(self, locationId):
    method getLocation (line 11) | def getLocation(self):
    method setAsGM (line 14) | def setAsGM(self, state):
    method isGM (line 17) | def isGM(self):

FILE: otp/avatar/PositionExaminer.py
  class PositionExaminer (line 5) | class PositionExaminer(DirectObject, NodePath):
    method __init__ (line 7) | def __init__(self):
    method delete (line 52) | def delete(self):
    method consider (line 72) | def consider(self, node, pos, eyeHeight):

FILE: otp/avatar/ShadowCaster.py
  function setGlobalDropShadowFlag (line 8) | def setGlobalDropShadowFlag(flag):
  function setGlobalDropShadowGrayLevel (line 17) | def setGlobalDropShadowGrayLevel(grayLevel):
  class ShadowCaster (line 24) | class ShadowCaster:
    method __init__ (line 27) | def __init__(self, squareShadow = False):
    method delete (line 42) | def delete(self):
    method initializeDropShadow (line 50) | def initializeDropShadow(self, hasGeomNode = True):
    method update (line 71) | def update(self):
    method deleteDropShadow (line 74) | def deleteDropShadow(self):
    method setActiveShadow (line 83) | def setActiveShadow(self, isActive = 1):
    method setShadowHeight (line 97) | def setShadowHeight(self, shadowHeight):
    method getShadowJoint (line 101) | def getShadowJoint(self):
    method hideShadow (line 111) | def hideShadow(self):
    method showShadow (line 114) | def showShadow(self):
    method __globalDropShadowFlagChanged (line 120) | def __globalDropShadowFlagChanged(self):
    method __globalDropShadowGrayLevelChanged (line 131) | def __globalDropShadowGrayLevelChanged(self):

FILE: otp/avatar/SpeedMonitor.py
  class SpeedMonitor (line 4) | class SpeedMonitor:
    method __init__ (line 9) | def __init__(self, name):
    method destroy (line 17) | def destroy(self):
    method _allocToken (line 20) | def _allocToken(self):
    method addNodepath (line 23) | def addNodepath(self, nodepath):
    method setSpeedLimit (line 29) | def setSpeedLimit(self, token, limit, callback):
    method removeNodepath (line 32) | def removeNodepath(self, token):
    method getMaxSpeed (line 39) | def getMaxSpeed(self, token):
    method resetMaxSpeed (line 42) | def resetMaxSpeed(self, token):
    method _trackSpeedsTask (line 48) | def _trackSpeedsTask(self, task = None):

FILE: otp/chat/ChatGarbler.py
  class ChatGarbler (line 5) | class ChatGarbler:
    method garble (line 7) | def garble(self, avatar, message):
    method garbleSingle (line 19) | def garbleSingle(self, avatar, message):

FILE: otp/chat/ChatGlobals.py
  function isThought (line 40) | def isThought(message):
  function removeThoughtPrefix (line 49) | def removeThoughtPrefix(message):

FILE: otp/chat/ChatInputNormal.py
  class ChatInputNormal (line 8) | class ChatInputNormal(DirectObject.DirectObject):
    method __init__ (line 11) | def __init__(self, chatMgr):
    method typeCallback (line 27) | def typeCallback(self, extraArgs):
    method delete (line 30) | def delete(self):
    method activateByData (line 41) | def activateByData(self, whisperAvatarId = None, toPlayer = 0):
    method deactivate (line 58) | def deactivate(self):
    method checkForOverRide (line 67) | def checkForOverRide(self):
    method sendChat (line 70) | def sendChat(self, text):
    method chatOverflow (line 97) | def chatOverflow(self, overflowText):
    method __execMessage (line 100) | def __execMessage(self, message):
    method cancelButtonPressed (line 133) | def cancelButtonPressed(self):
    method chatButtonPressed (line 137) | def chatButtonPressed(self):
    method importExecNamespace (line 140) | def importExecNamespace(self):
    method addToHistory (line 143) | def addToHistory(self, text):
    method getPrevHistory (line 147) | def getPrevHistory(self):
    method getNextHistory (line 152) | def getNextHistory(self):
    method setPos (line 157) | def setPos(self, posX, posY = None, posZ = None):

FILE: otp/chat/ChatInputTyped.py
  class ChatInputTyped (line 8) | class ChatInputTyped(DirectObject.DirectObject):
    method __init__ (line 11) | def __init__(self, mainEntry = 0):
    method typeCallback (line 25) | def typeCallback(self, extraArgs):
    method delete (line 28) | def delete(self):
    method show (line 39) | def show(self, whisperId = None, toPlayer = 0):
    method hide (line 65) | def hide(self):
    method activate (line 76) | def activate(self):
    method deactivate (line 97) | def deactivate(self):
    method sendChat (line 106) | def sendChat(self, text):
    method chatOverflow (line 124) | def chatOverflow(self, overflowText):
    method __execMessage (line 127) | def __execMessage(self, message):
    method cancelButtonPressed (line 160) | def cancelButtonPressed(self):
    method chatButtonPressed (line 164) | def chatButtonPressed(self):
    method importExecNamespace (line 167) | def importExecNamespace(self):
    method addToHistory (line 170) | def addToHistory(self, text):
    method getPrevHistory (line 174) | def getPrevHistory(self):
    method getNextHistory (line 179) | def getNextHistory(self):

FILE: otp/chat/ChatInputWhiteListFrame.py
  class ChatInputWhiteListFrame (line 12) | class ChatInputWhiteListFrame(FSM.FSM, DirectFrame):
    method __init__ (line 16) | def __init__(self, entryOptions, parent = None, **kw):
    method destroy (line 72) | def destroy(self):
    method delete (line 80) | def delete(self):
    method requestMode (line 84) | def requestMode(self, mode, *args):
    method defaultFilter (line 87) | def defaultFilter(self, request, *args):
    method enterOff (line 105) | def enterOff(self):
    method exitOff (line 109) | def exitOff(self):
    method enterAllChat (line 112) | def enterAllChat(self):
    method exitAllChat (line 116) | def exitAllChat(self):
    method enterGuildChat (line 119) | def enterGuildChat(self):
    method exitGuildChat (line 123) | def exitGuildChat(self):
    method enterCrewChat (line 126) | def enterCrewChat(self):
    method exitCrewChat (line 130) | def exitCrewChat(self):
    method enterPlayerWhisper (line 133) | def enterPlayerWhisper(self):
    method exitPlayerWhisper (line 137) | def exitPlayerWhisper(self):
    method enterAvatarWhisper (line 142) | def enterAvatarWhisper(self):
    method exitAvatarWhisper (line 146) | def exitAvatarWhisper(self):
    method activateByData (line 151) | def activateByData(self, receiverId = None, toPlayer = 0):
    method activate (line 165) | def activate(self):
    method deactivate (line 171) | def deactivate(self):
    method isActive (line 177) | def isActive(self):
    method sendChat (line 180) | def sendChat(self, text, overflow = False):
    method sendChatBySwitch (line 215) | def sendChatBySwitch(self, text):
    method sendChatByData (line 225) | def sendChatByData(self, text):
    method sendChatByMode (line 233) | def sendChatByMode(self, text):
    method sendFailed (line 249) | def sendFailed(self, text):
    method chatOverflow (line 265) | def chatOverflow(self, overflowText):
    method addToHistory (line 269) | def addToHistory(self, text):
    method getPrevHistory (line 273) | def getPrevHistory(self):
    method getNextHistory (line 278) | def getNextHistory(self):
    method importExecNamespace (line 283) | def importExecNamespace(self):
    method __execMessage (line 286) | def __execMessage(self, message):
    method applyFilter (line 319) | def applyFilter(self, keyArgs, strict = False):

FILE: otp/chat/ChatManager.py
  function isThought (line 22) | def isThought(message):
  function removeThoughtPrefix (line 31) | def removeThoughtPrefix(message):
  class ChatManager (line 38) | class ChatManager(DirectObject.DirectObject):
    method __init__ (line 42) | def __init__(self, cr, localAvatar):
    method delete (line 90) | def delete(self):
    method obscure (line 138) | def obscure(self, normal, sc):
    method isObscured (line 146) | def isObscured(self):
    method stop (line 149) | def stop(self):
    method start (line 153) | def start(self):
    method announceChat (line 156) | def announceChat(self):
    method announceSCChat (line 159) | def announceSCChat(self):
    method sendChatString (line 163) | def sendChatString(self, message):
    method sendWhisperString (line 175) | def sendWhisperString(self, message, whisperAvatarId):
    method sendSCChatMessage (line 178) | def sendSCChatMessage(self, msgIndex):
    method sendSCWhisperMessage (line 181) | def sendSCWhisperMessage(self, msgIndex, whisperAvatarId, toPlayer):
    method sendSCCustomChatMessage (line 187) | def sendSCCustomChatMessage(self, msgIndex):
    method sendSCCustomWhisperMessage (line 190) | def sendSCCustomWhisperMessage(self, msgIndex, whisperAvatarId, toPlay...
    method sendSCEmoteChatMessage (line 196) | def sendSCEmoteChatMessage(self, emoteId):
    method sendSCEmoteWhisperMessage (line 199) | def sendSCEmoteWhisperMessage(self, emoteId, whisperAvatarId, toPlayer):
    method enterOff (line 205) | def enterOff(self):
    method exitOff (line 210) | def exitOff(self):
    method enterMainMenu (line 213) | def enterMainMenu(self):
    method checkObscurred (line 220) | def checkObscurred(self):
    method exitMainMenu (line 226) | def exitMainMenu(self):
    method whisperTo (line 233) | def whisperTo(self, avatarName, avatarId, playerId = None):
    method noWhisper (line 236) | def noWhisper(self):
    method handleWhiteListSelect (line 239) | def handleWhiteListSelect(self):
    method enterWhiteListOpenChat (line 242) | def enterWhiteListOpenChat(self):
    method exitWhiteListOpenChat (line 248) | def exitWhiteListOpenChat(self):
    method enterWhiteListAvatarChat (line 251) | def enterWhiteListAvatarChat(self, receiverId):
    method exitWhiteListAvatarChat (line 256) | def exitWhiteListAvatarChat(self):
    method enterWhiteListPlayerChat (line 259) | def enterWhiteListPlayerChat(self, receiverId):
    method exitWhiteListPlayerChat (line 264) | def exitWhiteListPlayerChat(self):
    method enterWhisper (line 267) | def enterWhisper(self, avatarName, avatarId, playerId = None):
    method disablewhisperButton (line 329) | def disablewhisperButton(self):
    method enablewhisperButton (line 332) | def enablewhisperButton(self):
    method refreshWhisperFrame (line 335) | def refreshWhisperFrame(self):
    method changeFrameText (line 338) | def changeFrameText(self, newText):
    method exitWhisper (line 341) | def exitWhisper(self):
    method enterWhisperSpeedChat (line 346) | def enterWhisperSpeedChat(self, avatarId):
    method exitWhisperSpeedChat (line 352) | def exitWhisperSpeedChat(self):
    method enterWhisperSpeedChatPlayer (line 356) | def enterWhisperSpeedChatPlayer(self, playerId):
    method exitWhisperSpeedChatPlayer (line 362) | def exitWhisperSpeedChatPlayer(self):
    method enterWhisperChat (line 366) | def enterWhisperChat(self, avatarName, avatarId):
    method exitWhisperChat (line 370) | def exitWhisperChat(self):
    method enterWhisperChatPlayer (line 373) | def enterWhisperChatPlayer(self, avatarName, playerId):
    method exitWhisperChatPlayer (line 380) | def exitWhisperChatPlayer(self):
    method enterSpeedChat (line 383) | def enterSpeedChat(self):
    method exitSpeedChat (line 393) | def exitSpeedChat(self):
    method enterNormalChat (line 398) | def enterNormalChat(self):
    method exitNormalChat (line 402) | def exitNormalChat(self):
    method enterOpenChatWarning (line 405) | def enterOpenChatWarning(self):
    method exitOpenChatWarning (line 408) | def exitOpenChatWarning(self):
    method enterLeaveToPayDialog (line 411) | def enterLeaveToPayDialog(self):
    method exitLeaveToPayDialog (line 418) | def exitLeaveToPayDialog(self):
    method enterUnpaidChatWarning (line 424) | def enterUnpaidChatWarning(self):
    method exitUnpaidChatWarning (line 427) | def exitUnpaidChatWarning(self):
    method enterNoSecretChatAtAll (line 430) | def enterNoSecretChatAtAll(self):
    method exitNoSecretChatAtAll (line 433) | def exitNoSecretChatAtAll(self):
    method enterNoSecretChatAtAllAndNoWhitelist (line 436) | def enterNoSecretChatAtAllAndNoWhitelist(self):
    method exitNoSecretChatAtAllAndNoWhitelist (line 439) | def exitNoSecretChatAtAllAndNoWhitelist(self):
    method enterNoSecretChatWarning (line 442) | def enterNoSecretChatWarning(self):
    method exitNoSecretChatWarning (line 445) | def exitNoSecretChatWarning(self):
    method enterNoFriendsWarning (line 448) | def enterNoFriendsWarning(self):
    method exitNoFriendsWarning (line 451) | def exitNoFriendsWarning(self):
    method enterActivateChat (line 454) | def enterActivateChat(self):
    method exitActivateChat (line 457) | def exitActivateChat(self):
    method enterOtherDialog (line 460) | def enterOtherDialog(self):
    method exitOtherDialog (line 463) | def exitOtherDialog(self):
    method enterChatMoreInfo (line 466) | def enterChatMoreInfo(self):
    method exitChatMoreInfo (line 473) | def exitChatMoreInfo(self):
    method enterChatPrivacyPolicy (line 477) | def enterChatPrivacyPolicy(self):
    method exitChatPrivacyPolicy (line 484) | def exitChatPrivacyPolicy(self):
    method enterSecretChatActivated (line 490) | def enterSecretChatActivated(self):
    method exitSecretChatActivated (line 493) | def exitSecretChatActivated(self):
    method enterProblemActivatingChat (line 496) | def enterProblemActivatingChat(self):
    method exitProblemActivatingChat (line 499) | def exitProblemActivatingChat(self):
    method enterTrueFriendTeaserPanel (line 502) | def enterTrueFriendTeaserPanel(self):
    method exitTrueFriendTeaserPanel (line 505) | def exitTrueFriendTeaserPanel(self):
    method __handleLeaveToPayCancel (line 508) | def __handleLeaveToPayCancel(self):
    method __secretFriendsInfoDone (line 511) | def __secretFriendsInfoDone(self):
    method __privacyPolicyDone (line 514) | def __privacyPolicyDone(self):

FILE: otp/chat/TalkAssistant.py
  class TalkAssistant (line 16) | class TalkAssistant(DirectObject.DirectObject):
    method __init__ (line 21) | def __init__(self):
    method clearHistory (line 35) | def clearHistory(self):
    method delete (line 49) | def delete(self):
    method start (line 53) | def start(self):
    method stop (line 56) | def stop(self):
    method countMessage (line 59) | def countMessage(self):
    method getOpenText (line 63) | def getOpenText(self, numLines, startPoint = 0):
    method getSizeOpenText (line 66) | def getSizeOpenText(self):
    method getCompleteText (line 69) | def getCompleteText(self, numLines, startPoint = 0):
    method getCompleteTextFromRecent (line 72) | def getCompleteTextFromRecent(self, numLines, startPoint = 0):
    method getAllCompleteText (line 81) | def getAllCompleteText(self):
    method getAllHistory (line 84) | def getAllHistory(self):
    method getSizeCompleteText (line 87) | def getSizeCompleteText(self):
    method getHandle (line 90) | def getHandle(self, doId):
    method doWhiteListWarning (line 93) | def doWhiteListWarning(self):
    method addToHistoryDoId (line 96) | def addToHistoryDoId(self, message, doId, scrubbed = 0):
    method addToHistoryDISLId (line 129) | def addToHistoryDISLId(self, message, dISLId, scrubbed = 0):
    method addHandle (line 137) | def addHandle(self, doId, message):
    method stampTime (line 147) | def stampTime(self):
    method findName (line 150) | def findName(self, id, isPlayer = 0):
    method findAvatarName (line 156) | def findAvatarName(self, id):
    method findPlayerName (line 163) | def findPlayerName(self, id):
    method whiteListFilterMessage (line 170) | def whiteListFilterMessage(self, text):
    method colorMessageByWhiteListFilter (line 186) | def colorMessageByWhiteListFilter(self, text):
    method executeSlashCommand (line 200) | def executeSlashCommand(self, text):
    method executeGMCommand (line 203) | def executeGMCommand(self, text):
    method isThought (line 206) | def isThought(self, message):
    method removeThoughtPrefix (line 216) | def removeThoughtPrefix(self, message):
    method fillWithTestText (line 222) | def fillWithTestText(self):
    method printHistoryComplete (line 237) | def printHistoryComplete(self):
    method importExecNamespace (line 245) | def importExecNamespace(self):
    method execMessage (line 248) | def execMessage(self, message):
    method checkOpenTypedChat (line 282) | def checkOpenTypedChat(self):
    method checkAnyTypedChat (line 287) | def checkAnyTypedChat(self):
    method checkOpenSpeedChat (line 294) | def checkOpenSpeedChat(self):
    method checkWhisperTypedChatAvatar (line 297) | def checkWhisperTypedChatAvatar(self, avatarId):
    method checkWhisperSpeedChatAvatar (line 320) | def checkWhisperSpeedChatAvatar(self, avatarId):
    method checkWhisperTypedChatPlayer (line 323) | def checkWhisperTypedChatPlayer(self, playerId):
    method checkWhisperSpeedChatPlayer (line 330) | def checkWhisperSpeedChatPlayer(self, playerId):
    method checkOpenSpeedChat (line 335) | def checkOpenSpeedChat(self):
    method checkWhisperSpeedChatAvatar (line 338) | def checkWhisperSpeedChatAvatar(self, avatarId):
    method checkWhisperSpeedChatPlayer (line 341) | def checkWhisperSpeedChatPlayer(self, playerId):
    method checkGuildTypedChat (line 346) | def checkGuildTypedChat(self):
    method checkGuildSpeedChat (line 351) | def checkGuildSpeedChat(self):
    method receiveOpenTalk (line 356) | def receiveOpenTalk(self, senderAvId, avatarName, accountId, accountNa...
    method receiveWhisperTalk (line 385) | def receiveWhisperTalk(self, avatarId, avatarName, accountId, accountN...
    method receiveAccountTalk (line 409) | def receiveAccountTalk(self, avatarId, avatarName, accountId, accountN...
    method receiveGuildTalk (line 426) | def receiveGuildTalk(self, senderAvId, fromAC, avatarName, message, sc...
    method receiveGMTalk (line 446) | def receiveGMTalk(self, avatarId, avatarName, accountId, accountName, ...
    method receiveThought (line 462) | def receiveThought(self, avatarId, avatarName, accountId, accountName,...
    method receiveGameMessage (line 484) | def receiveGameMessage(self, message):
    method receiveSystemMessage (line 493) | def receiveSystemMessage(self, message):
    method receiveDeveloperMessage (line 502) | def receiveDeveloperMessage(self, message):
    method receiveGuildMessage (line 510) | def receiveGuildMessage(self, message, senderAvId, senderName):
    method receiveGuildUpdateMessage (line 519) | def receiveGuildUpdateMessage(self, message, senderId, senderName, rec...
    method receiveFriendUpdate (line 528) | def receiveFriendUpdate(self, friendId, friendName, isOnline):
    method receiveFriendAccountUpdate (line 540) | def receiveFriendAccountUpdate(self, friendId, friendName, isOnline):
    method receiveGuildUpdate (line 551) | def receiveGuildUpdate(self, memberId, memberName, isOnline):
    method receiveOpenSpeedChat (line 565) | def receiveOpenSpeedChat(self, type, messageIndex, senderAvId, name = ...
    method receiveAvatarWhisperSpeedChat (line 584) | def receiveAvatarWhisperSpeedChat(self, type, messageIndex, senderAvId...
    method receivePlayerWhisperSpeedChat (line 601) | def receivePlayerWhisperSpeedChat(self, type, messageIndex, senderAvId...
    method sendOpenTalk (line 618) | def sendOpenTalk(self, message):
    method sendWhisperTalk (line 636) | def sendWhisperTalk(self, message, receiverAvId):
    method sendAccountTalk (line 657) | def sendAccountTalk(self, message, receiverAccount):
    method sendGuildTalk (line 667) | def sendGuildTalk(self, message):
    method sendOpenSpeedChat (line 676) | def sendOpenSpeedChat(self, type, messageIndex):
    method sendAvatarWhisperSpeedChat (line 692) | def sendAvatarWhisperSpeedChat(self, type, messageIndex, receiverId):
    method sendPlayerWhisperSpeedChat (line 716) | def sendPlayerWhisperSpeedChat(self, type, messageIndex, receiverId):
    method sendGuildSpeedChat (line 737) | def sendGuildSpeedChat(self, type, msgIndex):
    method getWhisperReplyId (line 746) | def getWhisperReplyId(self):

FILE: otp/chat/TalkHandle.py
  class TalkHandle (line 3) | class TalkHandle(AvatarHandle):
    method __init__ (line 5) | def __init__(self, doId, message):
    method getName (line 13) | def getName(self):
    method isUnderstandable (line 16) | def isUnderstandable(self):
    method isOnline (line 19) | def isOnline(self):
    method addMessageInfo (line 22) | def addMessageInfo(self, message):
    method setTalkWhisper (line 38) | def setTalkWhisper(self, fromAV, fromAC, avatarName, chat, mods, flags):

FILE: otp/chat/TalkMessage.py
  class TalkMessage (line 3) | class TalkMessage:
    method __init__ (line 5) | def __init__(self, messageId, timeStamp, body, senderAvatarId, senderA...
    method getMessageId (line 20) | def getMessageId(self):
    method setMessageId (line 23) | def setMessageId(self, id):
    method getTimeStamp (line 26) | def getTimeStamp(self):
    method setTimeStamp (line 29) | def setTimeStamp(self, timeStamp):
    method getBody (line 32) | def getBody(self):
    method setBody (line 35) | def setBody(self, body):
    method getSenderAvatarId (line 38) | def getSenderAvatarId(self):
    method setSenderAvatarId (line 41) | def setSenderAvatarId(self, senderAvatarId):
    method getSenderAvatarName (line 44) | def getSenderAvatarName(self):
    method setSenderAvatarName (line 47) | def setSenderAvatarName(self, senderAvatarName):
    method getSenderAccountId (line 50) | def getSenderAccountId(self):
    method setSenderAccountId (line 53) | def setSenderAccountId(self, senderAccountId):
    method getSenderAccountName (line 56) | def getSenderAccountName(self):
    method setSenderAccountName (line 59) | def setSenderAccountName(self, senderAccountName):
    method getReceiverAvatarId (line 62) | def getReceiverAvatarId(self):
    method setReceiverAvatarId (line 65) | def setReceiverAvatarId(self, receiverAvatarId):
    method getReceiverAvatarName (line 68) | def getReceiverAvatarName(self):
    method setReceiverAvatarName (line 71) | def setReceiverAvatarName(self, receiverAvatarName):
    method getReceiverAccountId (line 74) | def getReceiverAccountId(self):
    method setReceiverAccountId (line 77) | def setReceiverAccountId(self, receiverAccountId):
    method getReceiverAccountName (line 80) | def getReceiverAccountName(self):
    method setReceiverAccountName (line 83) | def setReceiverAccountName(self, receiverAccountName):
    method getTalkType (line 86) | def getTalkType(self):
    method setTalkType (line 89) | def setTalkType(self, talkType):
    method getExtraInfo (line 92) | def getExtraInfo(self):
    method setExtraInfo (line 95) | def setExtraInfo(self, extraInfo):

FILE: otp/chat/WhiteList.py
  class WhiteList (line 3) | class WhiteList:
    method __init__ (line 5) | def __init__(self, wordlist):
    method cleanText (line 13) | def cleanText(self, text):
    method isWord (line 18) | def isWord(self, text):
    method isPrefix (line 25) | def isPrefix(self, text):
    method prefixCount (line 32) | def prefixCount(self, text):
    method prefixList (line 41) | def prefixList(self, text):

FILE: otp/distributed/Account.py
  class Account (line 3) | class Account(DistributedObject.DistributedObject):
    method __init__ (line 5) | def __init__(self, cr):

FILE: otp/distributed/AccountAI.py
  class AccountAI (line 5) | class AccountAI(DistributedObjectAI):

FILE: otp/distributed/AccountUD.py
  class AccountUD (line 5) | class AccountUD(DistributedObjectUD):

FILE: otp/distributed/AstronAccount.py
  class AstronAccount (line 4) | class AstronAccount(DistributedObject.DistributedObject):
    method __init__ (line 6) | def __init__(self, cr):

FILE: otp/distributed/AstronAccountAI.py
  class AstronAccountAI (line 5) | class AstronAccountAI(DistributedObjectAI):

FILE: otp/distributed/AstronAccountUD.py
  class AstronAccountUD (line 5) | class AstronAccountUD(DistributedObjectUD):

FILE: otp/distributed/CentralLogger.py
  class CentralLogger (line 9) | class CentralLogger(DistributedObjectGlobal):
    method hasReportedPlayer (line 12) | def hasReportedPlayer(self, targetDISLId, targetAvId):
    method reportPlayer (line 15) | def reportPlayer(self, category, targetDISLId, targetAvId, description...
    method writeClientEvent (line 25) | def writeClientEvent(self, eventString):

FILE: otp/distributed/CentralLoggerAI.py
  class CentralLoggerAI (line 5) | class CentralLoggerAI(DistributedObjectAI):

FILE: otp/distributed/CentralLoggerUD.py
  class CentralLoggerUD (line 5) | class CentralLoggerUD(DistributedObjectUD):

FILE: otp/distributed/ClsendTracker.py
  class ClsendTracker (line 5) | class ClsendTracker:
    method __init__ (line 10) | def __init__(self):
    method announceGenerate (line 23) | def announceGenerate(self):
    method destroy (line 27) | def destroy(self):
    method trackClientSendMsg (line 31) | def trackClientSendMsg(self, dataStr):
    method _trimClsend (line 36) | def _trimClsend(self):
    method _logClsend (line 43) | def _logClsend(self, senderId, dataStr):
    method dumpClientSentMsgs (line 55) | def dumpClientSentMsgs(self):

FILE: otp/distributed/DistributedDirectory.py
  class DistributedDirectory (line 3) | class DistributedDirectory(DistributedObject):

FILE: otp/distributed/DistributedDirectoryAI.py
  class DistributedDirectoryAI (line 5) | class DistributedDirectoryAI(DistributedObjectAI):

FILE: otp/distributed/DistributedDistrict.py
  class DistributedDistrict (line 4) | class DistributedDistrict(DistributedObject):
    method __init__ (line 8) | def __init__(self, cr):
    method announceGenerate (line 15) | def announceGenerate(self):
    method delete (line 20) | def delete(self):
    method setAvailable (line 29) | def setAvailable(self, available):
    method setName (line 33) | def setName(self, name):

FILE: otp/distributed/DistributedDistrictAI.py
  class DistributedDistrictAI (line 5) | class DistributedDistrictAI(DistributedObjectAI):
    method __init__ (line 8) | def __init__(self, air):
    method setName (line 13) | def setName(self, name):
    method d_setName (line 16) | def d_setName(self, name):
    method b_setName (line 19) | def b_setName(self, name):
    method getName (line 23) | def getName(self):
    method setAvailable (line 26) | def setAvailable(self, available):
    method d_setAvailable (line 29) | def d_setAvailable(self, available):
    method b_setAvailable (line 32) | def b_setAvailable(self, available):
    method getAvailable (line 36) | def getAvailable(self):

FILE: otp/distributed/DistributedDistrictUD.py
  class DistributedDistrictUD (line 5) | class DistributedDistrictUD(DistributedObjectUD):

FILE: otp/distributed/DistributedTestObject.py
  class DistributedTestObject (line 3) | class DistributedTestObject(DistributedObject.DistributedObject):
    method setRequiredField (line 5) | def setRequiredField(self, r):
    method setB (line 8) | def setB(self, B):
    method setBA (line 11) | def setBA(self, BA):
    method setBO (line 14) | def setBO(self, BO):
    method setBR (line 17) | def setBR(self, BR):
    method setBRA (line 20) | def setBRA(self, BRA):
    method setBRO (line 23) | def setBRO(self, BRO):
    method setBROA (line 26) | def setBROA(self, BROA):
    method gotNonReqThatWasntSet (line 29) | def gotNonReqThatWasntSet(self):

FILE: otp/distributed/DistributedTestObjectAI.py
  class DistributedTestObjectAI (line 5) | class DistributedTestObjectAI(DistributedObjectAI):

FILE: otp/distributed/GameServerTestSuite.py
  class GameServerTestSuite (line 4) | class GameServerTestSuite(DirectObject.DirectObject, TaskThreaded.TaskTh...
    method __init__ (line 7) | def __init__(self, cr):

FILE: otp/distributed/OTPClientRepository.py
  class OTPClientRepository (line 44) | class OTPClientRepository(ClientRepositoryBase):
    method __init__ (line 52) | def __init__(self, serverVersion, launcher = None, playGame = None):
    method startLeakDetector (line 422) | def startLeakDetector(self):
    method getGameDoId (line 436) | def getGameDoId(self):
    method enterLoginOff (line 440) | def enterLoginOff(self):
    method exitLoginOff (line 446) | def exitLoginOff(self):
    method getServerVersion (line 450) | def getServerVersion(self):
    method enterConnect (line 454) | def enterConnect(self, serverList):
    method failedToConnect (line 464) | def failedToConnect(self, statusCode, statusString):
    method exitConnect (line 468) | def exitConnect(self):
    method handleSystemMessage (line 472) | def handleSystemMessage(self, di):
    method getConnectedEvent (line 481) | def getConnectedEvent(self):
    method _handleConnected (line 485) | def _handleConnected(self):
    method gotoFirstScreen (line 490) | def gotoFirstScreen(self):
    method enterLogin (line 497) | def enterLogin(self):
    method __handleLoginDone (line 506) | def __handleLoginDone(self, doneStatus):
    method exitLogin (line 527) | def exitLogin(self):
    method enterCreateAccount (line 539) | def enterCreateAccount(self, createAccountDoneData = {'back': 'login',
    method __handleCreateAccountDone (line 551) | def __handleCreateAccountDone(self, doneStatus):
    method exitCreateAccount (line 567) | def exitCreateAccount(self):
    method enterFailedToConnect (line 579) | def enterFailedToConnect(self, statusCode, statusString):
    method __handleFailedToConnectAck (line 597) | def __handleFailedToConnectAck(self):
    method exitFailedToConnect (line 608) | def exitFailedToConnect(self):
    method enterFailedToGetServerConstants (line 616) | def enterFailedToGetServerConstants(self, e):
    method __handleFailedToGetConstantsAck (line 642) | def __handleFailedToGetConstantsAck(self):
    method exitFailedToGetServerConstants (line 653) | def exitFailedToGetServerConstants(self):
    method enterShutdown (line 661) | def enterShutdown(self, errorCode = None):
    method exitShutdown (line 668) | def exitShutdown(self):
    method enterWaitForGameList (line 676) | def enterWaitForGameList(self):
    method waitForGetGameListResponse (line 681) | def waitForGetGameListResponse(self):
    method isGameListCorrect (line 691) | def isGameListCorrect(self):
    method exitWaitForGameList (line 695) | def exitWaitForGameList(self):
    method enterMissingGameRootObject (line 700) | def enterMissingGameRootObject(self):
    method __handleMissingGameRootObjectAck (line 709) | def __handleMissingGameRootObjectAck(self):
    method exitMissingGameRootObject (line 719) | def exitMissingGameRootObject(self):
    method enterWaitForShardList (line 727) | def enterWaitForShardList(self):
    method _wantShardListComplete (line 735) | def _wantShardListComplete(self):
    method _shardsAreReady (line 742) | def _shardsAreReady(self):
    method exitWaitForShardList (line 750) | def exitWaitForShardList(self):
    method enterNoShards (line 756) | def enterNoShards(self):
    method __handleNoShardsAck (line 765) | def __handleNoShardsAck(self):
    method exitNoShards (line 776) | def exitNoShards(self):
    method enterNoShardsWait (line 784) | def enterNoShardsWait(self):
    method exitNoShardsWait (line 801) | def exitNoShardsWait(self):
    method enterReject (line 808) | def enterReject(self):
    method exitReject (line 815) | def exitReject(self):
    method enterNoConnection (line 820) | def enterNoConnection(self):
    method __handleLostConnectionAck (line 851) | def __handleLostConnectionAck(self):
    method exitNoConnection (line 858) | def exitNoConnection(self):
    method enterAfkTimeout (line 866) | def enterAfkTimeout(self):
    method __handleAfkOk (line 874) | def __handleAfkOk(self, value):
    method exitAfkTimeout (line 878) | def exitAfkTimeout(self):
    method enterPeriodTimeout (line 886) | def enterPeriodTimeout(self):
    method __handlePeriodOk (line 895) | def __handlePeriodOk(self, value):
    method exitPeriodTimeout (line 899) | def exitPeriodTimeout(self):
    method enterWaitForAvatarList (line 907) | def enterWaitForAvatarList(self):
    method _requestAvatarList (line 913) | def _requestAvatarList(self):
    method sendGetAvatarsMsg (line 919) | def sendGetAvatarsMsg(self):
    method exitWaitForAvatarList (line 928) | def exitWaitForAvatarList(self):
    method handleWaitForAvatarList (line 935) | def handleWaitForAvatarList(self, msgType, di):
    method handleGetAvatarsRespMsg (line 944) | def handleGetAvatarsRespMsg(self, di):
    method handleGetAvatarsResp2Msg (line 972) | def handleGetAvatarsResp2Msg(self, di):
    method handleAvatarListResponse (line 999) | def handleAvatarListResponse(self, avatarList):
    method enterChooseAvatar (line 1022) | def enterChooseAvatar(self, avList):
    method exitChooseAvatar (line 1026) | def exitChooseAvatar(self):
    method enterCreateAvatar (line 1030) | def enterCreateAvatar(self, avList, index, newDNA = None):
    method exitCreateAvatar (line 1034) | def exitCreateAvatar(self):
    method sendCreateAvatarMsg (line 1038) | def sendCreateAvatarMsg(self, avDNA, avName, avPosition):
    method sendCreateAvatar2Msg (line 1053) | def sendCreateAvatar2Msg(self, avClass, avDNA, avName, avPosition):
    method enterWaitForDeleteAvatarResponse (line 1067) | def enterWaitForDeleteAvatarResponse(self, potAv):
    method sendDeleteAvatarMsg (line 1074) | def sendDeleteAvatarMsg(self, avId):
    method exitWaitForDeleteAvatarResponse (line 1084) | def exitWaitForDeleteAvatarResponse(self):
    method handleWaitForDeleteAvatarResponse (line 1090) | def handleWaitForDeleteAvatarResponse(self, msgType, di):
    method enterRejectRemoveAvatar (line 1097) | def enterRejectRemoveAvatar(self, reasonCode):
    method __handleRejectRemoveAvatar (line 1106) | def __handleRejectRemoveAvatar(self):
    method exitRejectRemoveAvatar (line 1110) | def exitRejectRemoveAvatar(self):
    method enterWaitForSetAvatarResponse (line 1118) | def enterWaitForSetAvatarResponse(self, potAv):
    method exitWaitForSetAvatarResponse (line 1125) | def exitWaitForSetAvatarResponse(self):
    method sendSetAvatarMsg (line 1131) | def sendSetAvatarMsg(self, potAv):
    method sendSetAvatarIdMsg (line 1136) | def sendSetAvatarIdMsg(self, avId):
    method handleAvatarResponseMsg (line 1153) | def handleAvatarResponseMsg(self, di):
    method handleAvatarResponseMsg (line 1157) | def handleAvatarResponseMsg(self, avatarId, di):
    method handleWaitForSetAvatarResponse (line 1161) | def handleWaitForSetAvatarResponse(self, msgType, di):
    method enterPlayingGame (line 1178) | def enterPlayingGame(self):
    method exitPlayingGame (line 1182) | def exitPlayingGame(self):
    method detectLeaks (line 1187) | def detectLeaks(self, okTasks = None, okEvents = None):
    method detectLeakedGarbage (line 1222) | def detectLeakedGarbage(self, callback = None):
    method detectLeakedTasks (line 1236) | def detectLeakedTasks(self, extraTasks = None):
    method detectLeakedEvents (line 1293) | def detectLeakedEvents(self, extraHooks = None):
    method detectLeakedIntervals (line 1355) | def detectLeakedIntervals(self):
    method _abandonShard (line 1379) | def _abandonShard(self):
    method enterGameOff (line 1383) | def enterGameOff(self):
    method exitGameOff (line 1401) | def exitGameOff(self):
    method enterWaitOnEnterResponses (line 1406) | def enterWaitOnEnterResponses(self, shardId, hoodId, zoneId, avId):
    method handleWaitOnEnterResponses (line 1433) | def handleWaitOnEnterResponses(self, msgType, di):
    method handleSetShardComplete (line 1448) | def handleSetShardComplete(self):
    method uberZoneInterestComplete (line 1457) | def uberZoneInterestComplete(self):
    method exitWaitOnEnterResponses (line 1482) | def exitWaitOnEnterResponses(self):
    method enterCloseShard (line 1490) | def enterCloseShard(self, loginState = None):
    method _removeLocalAvFromStateServer (line 1498) | def _removeLocalAvFromStateServer(self):
    method _removeAllOV (line 1508) | def _removeAllOV(self):
    method isShardInterestOpen (line 1514) | def isShardInterestOpen(self):
    method removeShardInterest (line 1518) | def removeShardInterest(self, callback, task = None):
    method _removeShardInterestComplete (line 1522) | def _removeShardInterestComplete(self, callback):
    method _callRemoveShardInterestCallback (line 1533) | def _callRemoveShardInterestCallback(self, callback, task):
    method _removeCurrentShardInterest (line 1538) | def _removeCurrentShardInterest(self, callback):
    method exitCloseShard (line 1542) | def exitCloseShard(self):
    method enterTutorialQuestion (line 1547) | def enterTutorialQuestion(self, hoodId, zoneId, avId):
    method exitTutorialQuestion (line 1551) | def exitTutorialQuestion(self):
    method enterPlayGame (line 1555) | def enterPlayGame(self, hoodId, zoneId, avId):
    method handleGameDone (line 1577) | def handleGameDone(self):
    method exitPlayGame (line 1595) | def exitPlayGame(self):
    method gotTimeSync (line 1606) | def gotTimeSync(self):
    method moveOnFromUberZone (line 1613) | def moveOnFromUberZone(self):
    method handlePlayGame (line 1632) | def handlePlayGame(self, msgType, di):
    method handlePlayGame (line 1660) | def handlePlayGame(self, msgType, di):
    method enterSwitchShards (line 1677) | def enterSwitchShards(self, shardId, hoodId, zoneId, avId):
    method _handleOldShardGone (line 1686) | def _handleOldShardGone(self):
    method exitSwitchShards (line 1690) | def exitSwitchShards(self):
    method isFreeTimeExpired (line 1693) | def isFreeTimeExpired(self):
    method freeTimeLeft (line 1711) | def freeTimeLeft(self):
    method isWebPlayToken (line 1717) | def isWebPlayToken(self):
    method isBlue (line 1720) | def isBlue(self):
    method isPaid (line 1723) | def isPaid(self):
    method setIsPaid (line 1738) | def setIsPaid(self, isPaid):
    method allowFreeNames (line 1741) | def allowFreeNames(self):
    method allowSecretChat (line 1744) | def allowSecretChat(self):
    method allowWhiteListChat (line 1747) | def allowWhiteListChat(self):
    method allowAnyTypedChat (line 1753) | def allowAnyTypedChat(self):
    method allowOpenChat (line 1759) | def allowOpenChat(self):
    method isParentPasswordSet (line 1762) | def isParentPasswordSet(self):
    method needParentPasswordForSecretChat (line 1765) | def needParentPasswordForSecretChat(self):
    method logAccountInfo (line 1768) | def logAccountInfo(self):
    method getStartingDistrict (line 1786) | def getStartingDistrict(self):
    method getShardName (line 1814) | def getShardName(self, shardId):
    method isShardAvailable (line 1822) | def isShardAvailable(self, shardId):
    method listActiveShards (line 1828) | def listActiveShards(self):
    method getPlayerAvatars (line 1839) | def getPlayerAvatars(self):
    method queryObjectField (line 1842) | def queryObjectField(self, dclassName, fieldName, doId, context = 0):
    method lostConnection (line 1849) | def lostConnection(self):
    method waitForDatabaseTimeout (line 1853) | def waitForDatabaseTimeout(self, extraTimeout = 0, requestName = 'unkn...
    method cleanupWaitingForDatabase (line 1859) | def cleanupWaitingForDatabase(self):
    method __showWaitingForDatabase (line 1867) | def __showWaitingForDatabase(self, requestName):
    method __giveUpWaitingForDatabase (line 1877) | def __giveUpWaitingForDatabase(self, requestName):
    method __handleCancelWaiting (line 1883) | def __handleCancelWaiting(self, value):
    method renderFrame (line 1886) | def renderFrame(self):
    method resetPeriodTimer (line 1892) | def resetPeriodTimer(self, secondsRemaining):
    method recordPeriodTimer (line 1896) | def recordPeriodTimer(self, task):
    method startPeriodTimer (line 1905) | def startPeriodTimer(self):
    method stopPeriodTimer (line 1917) | def stopPeriodTimer(self):
    method __periodTimerWarning (line 1926) | def __periodTimerWarning(self, task):
    method __periodTimerExpired (line 1930) | def __periodTimerExpired(self, task):
    method handleMessageType (line 1940) | def handleMessageType(self, msgType, di):
    method handleMessageType (line 1983) | def handleMessageType(self, msgType, di):
    method gotInterestDoneMessage (line 2018) | def gotInterestDoneMessage(self, di):
    method gotObjectLocationMessage (line 2043) | def gotObjectLocationMessage(self, di):
    method sendWishName (line 2056) | def sendWishName(self, avId, name):
    method sendWishNameAnonymous (line 2063) | def sendWishNameAnonymous(self, name):
    method getWishNameResultMsg (line 2066) | def getWishNameResultMsg(self):
    method gotWishnameResponse (line 2069) | def gotWishnameResponse(self, di):
    method replayDeferredGenerate (line 2098) | def replayDeferredGenerate(self, msgType, extra):
    method handleDatagram (line 2109) | def handleDatagram(self, di):
    method askAvatarKnown (line 2124) | def askAvatarKnown(self, avId):
    method hashFiles (line 2127) | def hashFiles(self, pyc):
    method queueRequestAvatarInfo (line 2139) | def queueRequestAvatarInfo(self, avId):
    method identifyFriend (line 2142) | def identifyFriend(self, doId):
    method identifyPlayer (line 2145) | def identifyPlayer(self, playerId):
    method identifyAvatar (line 2148) | def identifyAvatar(self, doId):
    method sendDisconnect (line 2156) | def sendDisconnect(self):
    method _isPlayerDclass (line 2165) | def _isPlayerDclass(self, dclass):
    method _isValidPlayerLocation (line 2168) | def _isValidPlayerLocation(self, parentId, zoneId):
    method _isInvalidPlayerAvatarGenerate (line 2171) | def _isInvalidPlayerAvatarGenerate(self, doId, dclass, parentId, zoneId):
    method handleGenerateWithRequired (line 2179) | def handleGenerateWithRequired(self, di):
    method handleGenerateWithRequiredOther (line 2191) | def handleGenerateWithRequiredOther(self, di):
    method handleGenerateWithRequiredOtherOwner (line 2225) | def handleGenerateWithRequiredOtherOwner(self, di):
    method handleQuietZoneGenerateWithRequired (line 2235) | def handleQuietZoneGenerateWithRequired(self, di):
    method handleQuietZoneGenerateWithRequiredOther (line 2245) | def handleQuietZoneGenerateWithRequiredOther(self, di):
    method handleGenerateWithRequired (line 2255) | def handleGenerateWithRequired(self, di, other=False):
    method __playBackGenerates (line 2288) | def __playBackGenerates(self, handle):
    method __playBackMessages (line 2323) | def __playBackMessages(self, handle):
    method __recordObjectMessage (line 2348) | def __recordObjectMessage(self, msgType, di):
    method __generateObject (line 2361) | def __generateObject(self, doId, parentId, zoneId, classId, di, other):
    method handleGenerateWithRequiredOtherOwner (line 2384) | def handleGenerateWithRequiredOtherOwner(self, di):
    method handleQuietZoneGenerateWithRequired (line 2394) | def handleQuietZoneGenerateWithRequired(self, di):
    method handleQuietZoneGenerateWithRequiredOther (line 2404) | def handleQuietZoneGenerateWithRequiredOther(self, di):
    method handleDisable (line 2414) | def handleDisable(self, di, ownerView = False):
    method sendSetLocation (line 2419) | def sendSetLocation(self, doId, parentId, zoneId):
    method sendHeartbeat (line 2427) | def sendHeartbeat(self):
    method isLocalId (line 2434) | def isLocalId(self, id):
    method addTaggedInterest (line 2447) | def addTaggedInterest(self, parentId, zoneId, mainTag, desc, otherTags...

FILE: otp/distributed/OTPInternalRepository.py
  class OTPInternalRepository (line 10) | class OTPInternalRepository(AstronInternalRepository):
    method __init__ (line 14) | def __init__(self, baseChannel, serverId, dcFileNames, dcSuffix, conne...
    method handleConnected (line 18) | def handleConnected(self):
    method getAccountIdFromSender (line 21) | def getAccountIdFromSender(self):
    method getAvatarIdFromSender (line 24) | def getAvatarIdFromSender(self):
    method sendSetZone (line 27) | def sendSetZone(self, distObj, zoneId):
    method setAllowClientSend (line 31) | def setAllowClientSend(self, avId, distObj, fieldNameList=[]):
    method _getMsgName (line 47) | def _getMsgName(self, msgId):

FILE: otp/distributed/ObjectServer.py
  class ObjectServer (line 4) | class ObjectServer(DistributedObject.DistributedObject):
    method __init__ (line 7) | def __init__(self, cr):
    method setName (line 10) | def setName(self, name):

FILE: otp/distributed/ObjectServerAI.py
  class ObjectServerAI (line 5) | class ObjectServerAI(DistributedObjectAI):

FILE: otp/distributed/ObjectServerUD.py
  class ObjectServerUD (line 5) | class ObjectServerUD(DistributedObjectUD):

FILE: otp/distributed/PotentialAvatar.py
  class PotentialAvatar (line 3) | class PotentialAvatar:
    method __init__ (line 5) | def __init__(self, id, names, dna, position, allowedName, creator = 1,...

FILE: otp/distributed/PotentialShard.py
  class PotentialShard (line 3) | class PotentialShard:
    method __init__ (line 5) | def __init__(self, id):

FILE: otp/distributed/TelemetryLimited.py
  class TelemetryLimited (line 3) | class TelemetryLimited:
    method __init__ (line 6) | def __init__(self):
    method getTelemetryLimiterId (line 10) | def getTelemetryLimiterId(self):
    method addTelemetryLimit (line 13) | def addTelemetryLimit(self, limit):
    method removeTelemetryLimit (line 16) | def removeTelemetryLimit(self, limit):
    method enforceTelemetryLimits (line 20) | def enforceTelemetryLimits(self):

FILE: otp/distributed/TelemetryLimiter.py
  class TelemetryLimiter (line 5) | class TelemetryLimiter(DirectObject):
    method __init__ (line 9) | def __init__(self):
    method destroy (line 13) | def destroy(self):
    method getNumObjs (line 17) | def getNumObjs(self):
    method addObj (line 20) | def addObj(self, obj):
    method hasObj (line 26) | def hasObj(self, obj):
    method _getDummyEventName (line 30) | def _getDummyEventName(self, obj):
    method _dummyEventHandler (line 36) | def _dummyEventHandler(self, *args, **kargs):
    method removeObj (line 39) | def removeObj(self, obj):
    method _enforceLimits (line 44) | def _enforceLimits(self, task = None):
  class TelemetryLimit (line 51) | class TelemetryLimit:
    method __call__ (line 53) | def __call__(self, obj):
  class RotationLimitToH (line 57) | class RotationLimitToH(TelemetryLimit):
    method __init__ (line 59) | def __init__(self, pConst = 0.0, rConst = 0.0):
    method __call__ (line 63) | def __call__(self, obj):
  class TLNull (line 67) | class TLNull:
    method __init__ (line 69) | def __init__(self, *limits):
    method destroy (line 72) | def destroy(self):
  class TLGatherAllAvs (line 76) | class TLGatherAllAvs(DirectObject):
    method __init__ (line 78) | def __init__(self, name, *limits):
    method _handlePlayerArrive (line 93) | def _handlePlayerArrive(self, av):
    method _handlePlayerLeave (line 106) | def _handlePlayerLeave(self, av):
    method _handlePlayerLeave (line 116) | def _handlePlayerLeave(self, av):
    method destroy (line 125) | def destroy(self):

FILE: otp/friends/AvatarFriendInfo.py
  class AvatarFriendInfo (line 3) | class AvatarFriendInfo(AvatarHandle):
    method __init__ (line 5) | def __init__(self, avatarName = '', playerName = '', playerId = 0, onl...
    method calcUnderstandableYesNo (line 15) | def calcUnderstandableYesNo(self):
    method getName (line 18) | def getName(self):
    method isUnderstandable (line 26) | def isUnderstandable(self):
    method isOnline (line 40) | def isOnline(self):

FILE: otp/friends/AvatarFriendsManager.py
  class AvatarFriendsManager (line 7) | class AvatarFriendsManager(DistributedObjectGlobal):
    method __init__ (line 10) | def __init__(self, cr):
    method reset (line 14) | def reset(self):
    method addIgnore (line 20) | def addIgnore(self, avId):
    method removeIgnore (line 26) | def removeIgnore(self, avId):
    method checkIgnored (line 32) | def checkIgnored(self, avId):
    method sendRequestInvite (line 35) | def sendRequestInvite(self, avId):
    method sendRequestRemove (line 40) | def sendRequestRemove(self, avId):
    method friendConsidering (line 46) | def friendConsidering(self, avId):
    method invitationFrom (line 50) | def invitationFrom(self, avId, avatarName):
    method retractInvite (line 54) | def retractInvite(self, avId):
    method rejectInvite (line 60) | def rejectInvite(self, avId, reason):
    method rejectRemove (line 66) | def rejectRemove(self, avId, reason):
    method updateAvatarFriend (line 70) | def updateAvatarFriend(self, avId, info):
    method removeAvatarFriend (line 85) | def removeAvatarFriend(self, avId):
    method setFriends (line 91) | def setFriends(self, avatarIds):
    method isFriend (line 94) | def isFriend(self, avId):
    method isAvatarFriend (line 97) | def isAvatarFriend(self, avId):
    method getFriendInfo (line 100) | def getFriendInfo(self, avId):
    method countTrueFriends (line 103) | def countTrueFriends(self):

FILE: otp/friends/AvatarFriendsManagerUD.py
  class AvatarFriendsManagerUD (line 4) | class AvatarFriendsManagerUD(DistributedObjectUD):

FILE: otp/friends/FriendInfo.py
  class FriendInfo (line 3) | class FriendInfo(AvatarHandle):
    method __init__ (line 5) | def __init__(self, avatarName = '', playerName = '', onlineYesNo = 0, ...
    method calcUnderstandableYesNo (line 20) | def calcUnderstandableYesNo(self):
    method getName (line 23) | def getName(self):
    method isUnderstandable (line 31) | def isUnderstandable(self):
    method isOnline (line 45) | def isOnline(self):

FILE: otp/friends/FriendManager.py
  class FriendManager (line 6) | class FriendManager(DistributedObject.DistributedObject):
    method __init__ (line 10) | def __init__(self, cr):
    method setAvailable (line 16) | def setAvailable(self, available):
    method getAvailable (line 21) | def getAvailable(self):
    method setGameSpecificFunction (line 24) | def setGameSpecificFunction(self, function):
    method executeGameSpecificFunction (line 27) | def executeGameSpecificFunction(self):
    method generate (line 31) | def generate(self):
    method disable (line 38) | def disable(self):
    method delete (line 43) | def delete(self):
    method up_friendQuery (line 49) | def up_friendQuery(self, inviteeId):
    method up_cancelFriendQuery (line 53) | def up_cancelFriendQuery(self, context):
    method up_inviteeFriendConsidering (line 57) | def up_inviteeFriendConsidering(self, yesNo, context):
    method up_inviteeFriendResponse (line 61) | def up_inviteeFriendResponse(self, yesNoMaybe, context):
    method up_inviteeAcknowledgeCancel (line 65) | def up_inviteeAcknowledgeCancel(self, context):
    method friendConsidering (line 69) | def friendConsidering(self, yesNoAlready, context):
    method friendResponse (line 73) | def friendResponse(self, yesNoMaybe, context):
    method inviteeFriendQuery (line 77) | def inviteeFriendQuery(self, inviterId, inviterName, inviterDna, conte...
    method inviteeCancelFriendQuery (line 95) | def inviteeCancelFriendQuery(self, context):
    method up_requestSecret (line 100) | def up_requestSecret(self):
    method requestSecretResponse (line 104) | def requestSecretResponse(self, result, secret):
    method up_submitSecret (line 107) | def up_submitSecret(self, secret):
    method submitSecretResponse (line 110) | def submitSecretResponse(self, result, avId):

FILE: otp/friends/FriendManagerAI.py
  class FriendManagerAI (line 4) | class FriendManagerAI(DistributedObjectAI):

FILE: otp/friends/FriendSecret.py
  function showFriendSecret (line 14) | def showFriendSecret(secretType = AvatarSecret):
  function openFriendSecret (line 60) | def openFriendSecret(secretType):
  function hideFriendSecret (line 69) | def hideFriendSecret():
  function unloadFriendSecret (line 75) | def unloadFriendSecret():
  class FriendSecretNeedsParentLogin (line 83) | class FriendSecretNeedsParentLogin(StateData.StateData):
    method __init__ (line 86) | def __init__(self, secretType):
    method enter (line 92) | def enter(self):
    method exit (line 153) | def exit(self):
    method __handleUsername (line 163) | def __handleUsername(self, *args):
    method __handleOKWithParentAccount (line 168) | def __handleOKWithParentAccount(self, *args):
    method __oldHandleOK (line 186) | def __oldHandleOK(self, *args):
    method __handleOK (line 204) | def __handleOK(self, *args):
    method __handleParentLogin (line 211) | def __handleParentLogin(self, reason):
    method __handleCancel (line 227) | def __handleCancel(self):
  class FriendSecret (line 231) | class FriendSecret(DirectFrame, StateData.StateData):
    method __init__ (line 234) | def __init__(self, secretType):
    method unload (line 245) | def unload(self):
    method load (line 264) | def load(self):
    method __handleStop (line 310) | def __handleStop(self, message):
    method __handleCleanup (line 313) | def __handleCleanup(self):
    method makeFriendTypeButtons (line 316) | def makeFriendTypeButtons(self):
    method enter (line 329) | def enter(self):
    method exit (line 349) | def exit(self):
    method __determineSecret (line 359) | def __determineSecret(self):
    method __handleAvatar (line 372) | def __handleAvatar(self):
    method __handleAccount (line 376) | def __handleAccount(self):
    method __handleCancel (line 380) | def __handleCancel(self):
    method __getSecret (line 383) | def __getSecret(self):
    method __gotAvatarSecret (line 409) | def __gotAvatarSecret(self, result, secret):
    method __gotAccountSecret (line 426) | def __gotAccountSecret(self, secret):
    method __rejectAccountSecret (line 438) | def __rejectAccountSecret(self, reason):
    method __enterSecret (line 449) | def __enterSecret(self, secret):
    method __enteredSecret (line 481) | def __enteredSecret(self, result, avId):
    method __useAccountSecret (line 511) | def __useAccountSecret(self, avId, friendInfo):
    method __rejectUseAccountSecret (line 516) | def __rejectUseAccountSecret(self, reason):
    method __nowFriends (line 527) | def __nowFriends(self, avId):
    method __ok1 (line 540) | def __ok1(self):
    method __ok2 (line 544) | def __ok2(self):
    method __cancel (line 547) | def __cancel(self):
    method __cleanupFirstPage (line 550) | def __cleanupFirstPage(self):

FILE: otp/friends/GuildManager.py
  class GuildMemberInfo (line 14) | class GuildMemberInfo(AvatarHandle):
    method __init__ (line 16) | def __init__(self, name, isOnline, rank, bandId):
    method getName (line 22) | def getName(self):
    method getRank (line 25) | def getRank(self):
    method getBandId (line 28) | def getBandId(self):
    method isOnline (line 31) | def isOnline(self):
    method isUnderstandable (line 34) | def isUnderstandable(self):
    method sendTeleportQuery (line 38) | def sendTeleportQuery(self, sendToId, localBandMgrId, localBandId, loc...
    method sendTeleportResponse (line 42) | def sendTeleportResponse(self, available, shardId, instanceDoId, areaD...
  class GuildManager (line 46) | class GuildManager(DistributedObjectGlobal):
    method __init__ (line 49) | def __init__(self, cr):
    method _allowMemberList (line 63) | def _allowMemberList(self, task):
    method memberList (line 67) | def memberList(self):
    method createGuild (line 73) | def createGuild(self):
    method setWantName (line 77) | def setWantName(self, newName):
    method removeMember (line 80) | def removeMember(self, avatarId):
    method changeRank (line 83) | def changeRank(self, avatarId, rank):
    method changeRankAvocate (line 86) | def changeRankAvocate(self, avatarId):
    method statusRequest (line 89) | def statusRequest(self):
    method requestLeaderboardTopTen (line 92) | def requestLeaderboardTopTen(self):
    method sendRequestInvite (line 95) | def sendRequestInvite(self, avatarId):
    method sendAcceptInvite (line 98) | def sendAcceptInvite(self):
    method sendDeclineInvite (line 101) | def sendDeclineInvite(self):
    method sendTalk (line 104) | def sendTalk(self, msgText, chatFlags = 0):
    method setTalkGroup (line 112) | def setTalkGroup(self, fromAv, fromAC, avatarName, chat, mods, flags):
    method sendSC (line 117) | def sendSC(self, msgIndex):
    method sendSCQuest (line 120) | def sendSCQuest(self, questInt, msgType, taskNum):
    method sendTokenRequest (line 123) | def sendTokenRequest(self):
    method sendTokenForJoinRequest (line 126) | def sendTokenForJoinRequest(self, token):
    method isInGuild (line 130) | def isInGuild(self, avId):
    method getRank (line 133) | def getRank(self, avId):
    method getBandId (line 136) | def getBandId(self, avId):
    method getMemberInfo (line 139) | def getMemberInfo(self, avId):
    method getOptionsFor (line 144) | def getOptionsFor(self, avId):
    method updateTokenRValue (line 162) | def updateTokenRValue(self, tokenString, rValue):
    method requestPermToken (line 168) | def requestPermToken(self):
    method requestNonPermTokenCount (line 171) | def requestNonPermTokenCount(self):
    method requestClearTokens (line 174) | def requestClearTokens(self, type):
    method receiveMember (line 177) | def receiveMember(self, member):
    method clearMembers (line 183) | def clearMembers(self):
    method receiveMembersDone (line 187) | def receiveMembersDone(self):
    method guildStatusUpdate (line 216) | def guildStatusUpdate(self, guildId, guildName, guildRank):
    method guildNameReject (line 221) | def guildNameReject(self, guildId):
    method guildNameChange (line 225) | def guildNameChange(self, guildName, changeStatus):
    method guildNameUpdate (line 229) | def guildNameUpdate(self, avatarId, guildName):
    method invitationFrom (line 232) | def invitationFrom(self, avatarId, avatarName, guildId, guildName):
    method retractInvite (line 237) | def retractInvite(self, avatarId):
    method guildAcceptInvite (line 240) | def guildAcceptInvite(self, avatarId):
    method leaderboardTopTen (line 244) | def leaderboardTopTen(self, stuff):
    method guildRejectInvite (line 247) | def guildRejectInvite(self, avatarId, reason):
    method rejectInvite (line 250) | def rejectInvite(self, avatarId, reason):
    method recvSC (line 253) | def recvSC(self, senderId, msgIndex):
    method recvSCQuest (line 265) | def recvSCQuest(self, senderId, questInt, msgType, taskNum):
    method recvAvatarOnline (line 277) | def recvAvatarOnline(self, avatarId, avatarName, bandManagerId, bandId):
    method recvAvatarOffline (line 286) | def recvAvatarOffline(self, avatarId, avatarName):
    method recvMemberAdded (line 294) | def recvMemberAdded(self, memberInfo, inviterId, inviterName):
    method recvMemberRemoved (line 304) | def recvMemberRemoved(self, avatarId, senderId, avatarName, senderName):
    method recvMemberUpdateRank (line 317) | def recvMemberUpdateRank(self, avatarId, senderId, avatarName, senderN...
    method recvMemberUpdateBandId (line 323) | def recvMemberUpdateBandId(self, avatarId, bandManagerId, bandId):
    method recvTokenInviteValue (line 327) | def recvTokenInviteValue(self, tokenValue, preExistPerm):
    method recvTokenRedeemMessage (line 331) | def recvTokenRedeemMessage(self, guildName):
    method recvTokenRedeemedByPlayerMessage (line 340) | def recvTokenRedeemedByPlayerMessage(self, redeemerName):
    method recvPermToken (line 344) | def recvPermToken(self, token):
    method requestEmailNotificationPref (line 352) | def requestEmailNotificationPref(self):
    method respondEmailNotificationPref (line 355) | def respondEmailNotificationPref(self, notify, emailAddress):
    method getEmailNotificationPref (line 363) | def getEmailNotificationPref(self):
    method requestEmailNotificationPrefUpdate (line 366) | def requestEmailNotificationPrefUpdate(self, notify, emailAddress):
    method recvNonPermTokenCount (line 375) | def recvNonPermTokenCount(self, tCount):
    method d_reflectTeleportQuery (line 380) | def d_reflectTeleportQuery(self, sendToId, localBandMgrId, localBandId...
    method teleportQuery (line 388) | def teleportQuery(self, requesterId, requesterBandMgrId, requesterBand...
    method d_reflectTeleportResponse (line 393) | def d_reflectTeleportResponse(self, available, shardId, instanceDoId, ...
    method teleportResponse (line 401) | def teleportResponse(self, responderId, available, shardId, instanceDo...
    method handleLogout (line 406) | def handleLogout(self, *args, **kw):

FILE: otp/friends/GuildManagerAI.py
  class GuildManagerAI (line 4) | class GuildManagerAI(DistributedObjectAI):

FILE: otp/friends/GuildManagerUD.py
  class GuildManagerUD (line 4) | class GuildManagerUD(DistributedObjectUD):

FILE: otp/friends/PlayerFriendsManager.py
  class PlayerFriendsManager (line 7) | class PlayerFriendsManager(DistributedObjectGlobal):
    method __init__ (line 10) | def __init__(self, cr):
    method delete (line 17) | def delete(self):
    method sendRequestInvite (line 20) | def sendRequestInvite(self, playerId):
    method sendRequestDecline (line 24) | def sendRequestDecline(self, playerId):
    method sendRequestRemove (line 27) | def sendRequestRemove(self, playerId):
    method sendRequestUnlimitedSecret (line 30) | def sendRequestUnlimitedSecret(self):
    method sendRequestLimitedSecret (line 33) | def sendRequestLimitedSecret(self, username, password):
    method sendRequestUseUnlimitedSecret (line 36) | def sendRequestUseUnlimitedSecret(self, secret):
    method sendRequestUseLimitedSecret (line 39) | def sendRequestUseLimitedSecret(self, secret, username, password):
    method sendSCWhisper (line 42) | def sendSCWhisper(self, recipientId, msgId):
    method sendSCCustomWhisper (line 45) | def sendSCCustomWhisper(self, recipientId, msgId):
    method sendSCEmoteWhisper (line 48) | def sendSCEmoteWhisper(self, recipientId, msgId):
    method setTalkAccount (line 51) | def setTalkAccount(self, toAc, fromAc, fromName, message, mods, flags):
    method invitationFrom (line 62) | def invitationFrom(self, playerId, avatarName):
    method retractInvite (line 65) | def retractInvite(self, playerId):
    method rejectInvite (line 68) | def rejectInvite(self, playerId, reason):
    method rejectRemove (line 71) | def rejectRemove(self, playerId, reason):
    method secretResponse (line 74) | def secretResponse(self, secret):
    method rejectSecret (line 78) | def rejectSecret(self, reason):
    method rejectUseSecret (line 82) | def rejectUseSecret(self, reason):
    method invitationResponse (line 86) | def invitationResponse(self, playerId, respCode, context):
    method updatePlayerFriend (line 92) | def updatePlayerFriend(self, id, info, isNewFriend):
    method removePlayerFriend (line 119) | def removePlayerFriend(self, id):
    method whisperSCFrom (line 131) | def whisperSCFrom(self, playerId, msg):
    method isFriend (line 134) | def isFriend(self, pId):
    method isPlayerFriend (line 137) | def isPlayerFriend(self, pId):
    method isAvatarOwnerPlayerFriend (line 142) | def isAvatarOwnerPlayerFriend(self, avId):
    method getFriendInfo (line 149) | def getFriendInfo(self, pId):
    method findPlayerIdFromAvId (line 152) | def findPlayerIdFromAvId(self, avId):
    method findAvIdFromPlayerId (line 160) | def findAvIdFromPlayerId(self, pId):
    method findPlayerInfoFromAvId (line 168) | def findPlayerInfoFromAvId(self, avId):
    method askAvatarOnline (line 176) | def askAvatarOnline(self, avId):
    method countTrueFriends (line 188) | def countTrueFriends(self):
    method askTransientFriend (line 196) | def askTransientFriend(self, avId):
    method askAvatarKnown (line 202) | def askAvatarKnown(self, avId):
    method askAvatarKnownElseWhere (line 208) | def askAvatarKnownElseWhere(self, avId):
    method askAvatarKnownHere (line 214) | def askAvatarKnownHere(self, avId):
    method requestAvatarInfo (line 220) | def requestAvatarInfo(self, avId):
    method __handleFriendHandles (line 224) | def __handleFriendHandles(self, handleList):
    method getAvHandleFromId (line 230) | def getAvHandleFromId(self, avId):
    method identifyFriend (line 237) | def identifyFriend(self, avId):
    method getAllOnlinePlayerAvatars (line 246) | def getAllOnlinePlayerAvatars(self):
    method identifyAvatar (line 256) | def identifyAvatar(self, doId):
    method friendsListFull (line 262) | def friendsListFull(self):

FILE: otp/friends/PlayerFriendsManagerUD.py
  class PlayerFriendsManagerUD (line 4) | class PlayerFriendsManagerUD(DistributedObjectUD):

FILE: otp/launcher/DownloadWatcher.py
  class DownloadWatcher (line 7) | class DownloadWatcher(DirectObject):
    method __init__ (line 9) | def __init__(self, phaseNames):
    method update (line 19) | def update(self, phase, percent, reqByteRate, actualByteRate):
    method cleanup (line 25) | def cleanup(self):

FILE: otp/launcher/DummyLauncherBase.py
  class DummyLauncherBase (line 6) | class DummyLauncherBase:
    method __init__ (line 8) | def __init__(self):
    method isDummy (line 18) | def isDummy(self):
    method startFakeDownload (line 21) | def startFakeDownload(self):
    method isTestServer (line 32) | def isTestServer(self):
    method setPhaseComplete (line 35) | def setPhaseComplete(self, phase, percent):
    method getPhaseComplete (line 38) | def getPhaseComplete(self, phase):
    method setPandaWindowOpen (line 41) | def setPandaWindowOpen(self):
    method setPandaErrorCode (line 44) | def setPandaErrorCode(self, code):
    method getPandaErrorCode (line 47) | def getPandaErrorCode(self):
    method setDisconnectDetailsNormal (line 50) | def setDisconnectDetailsNormal(self):
    method setDisconnectDetails (line 54) | def setDisconnectDetails(self, newCode, newMsg):
    method getLastLogin (line 58) | def getLastLogin(self):
    method setLastLogin (line 63) | def setLastLogin(self, login):
    method setUserLoggedIn (line 66) | def setUserLoggedIn(self):
    method setPaidUserLoggedIn (line 69) | def setPaidUserLoggedIn(self):
    method getGameServer (line 72) | def getGameServer(self):
    method getDeployment (line 75) | def getDeployment(self):
    method getBlue (line 78) | def getBlue(self):
    method getPlayToken (line 81) | def getPlayToken(self):
    method getDISLToken (line 84) | def getDISLToken(self):
    method fakeDownloadPhaseTask (line 87) | def fakeDownloadPhaseTask(self, task):
    method downloadDoneTask (line 100) | def downloadDoneTask(self, task):
    method fakeDownload (line 105) | def fakeDownload(self, timePerPhase):

FILE: otp/launcher/LauncherBase.py
  class LogAndOutput (line 11) | class LogAndOutput:
    method __init__ (line 13) | def __init__(self, orig, log):
    method write (line 18) | def write(self, str):
    method flush (line 25) | def flush(self):
  class LauncherBase (line 30) | class LauncherBase(DirectObject):
    method __init__ (line 42) | def __init__(self):
    method isDummy (line 98) | def isDummy(self):
    method background (line 101) | def background(self):
    method foreground (line 105) | def foreground(self):
    method setRegistry (line 109) | def setRegistry(self, key, value):
    method getRegistry (line 112) | def getRegistry(self, key):
    method maybeStartGame (line 116) | def maybeStartGame(self):
    method _runTaskManager (line 126) | def _runTaskManager(self):
    method _stepMiniTaskManager (line 132) | def _stepMiniTaskManager(self, task):
    method newTaskManager (line 140) | def newTaskManager(self):
    method mainLoop (line 148) | def mainLoop(self):
    method isDownloadComplete (line 172) | def isDownloadComplete(self):
    method launcherMessage (line 175) | def launcherMessage(self, msg):
    method isTestServer (line 180) | def isTestServer(self):
    method recordPeriodTimeRemaining (line 183) | def recordPeriodTimeRemaining(self, secondsRemaining):
    method getGoUserName (line 186) | def getGoUserName(self):
    method setGoUserName (line 189) | def setGoUserName(self, userName):
    method setPandaWindowOpen (line 192) | def setPandaWindowOpen(self):
    method setPandaErrorCode (line 195) | def setPandaErrorCode(self, code):
    method getPandaErrorCode (line 203) | def getPandaErrorCode(self):
    method setDisconnectDetailsNormal (line 206) | def setDisconnectDetailsNormal(self):
    method setDisconnectDetails (line 211) | def setDisconnectDetails(self, newCode, newMsg):
    method getLastLogin (line 216) | def getLastLogin(self):
    method setLastLogin (line 219) | def setLastLogin(self, login):
    method setUserLoggedIn (line 222) | def setUserLoggedIn(self):
    method setPaidUserLoggedIn (line 225) | def setPaidUserLoggedIn(self):
    method getReferrerCode (line 228) | def getReferrerCode(self):
    method getPhaseComplete (line 231) | def getPhaseComplete(self, phase):
    method getPercentPhaseComplete (line 234) | def getPercentPhaseComplete(self, phase):
    method cleanup (line 237) | def cleanup(self):
    method getBlue (line 242) | def getBlue(self):
    method getPlayToken (line 245) | def getPlayToken(self):
    method getDISLToken (line 248) | def getDISLToken(self):

FILE: otp/level/AmbientSound.py
  class AmbientSound (line 5) | class AmbientSound(BasicEntities.NodePathEntity):
    method __init__ (line 7) | def __init__(self, level, entId):
    method destroy (line 11) | def destroy(self):
    method initSound (line 15) | def initSound(self):
    method destroySound (line 28) | def destroySound(self):
    method attribChanged (line 37) | def attribChanged(self, *args):

FILE: otp/level/AttribDesc.py
  class AttribDesc (line 3) | class AttribDesc:
    method __init__ (line 5) | def __init__(self, name, default, datatype = 'string', params = {}):
    method getName (line 11) | def getName(self):
    method getDefaultValue (line 14) | def getDefaultValue(self):
    method getDatatype (line 17) | def getDatatype(self):
    method getParams (line 20) | def getParams(self):
    method __str__ (line 23) | def __str__(self):
    method __repr__ (line 26) | def __repr__(self):

FILE: otp/level/BasicEntities.py
  class NodePathEntityBase (line 5) | class NodePathEntityBase:
    method initNodePathAttribs (line 7) | def initNodePathAttribs(self, doReparent = 1):
    method setParentEntId (line 15) | def setParentEntId(self, parentEntId):
    method destroy (line 19) | def destroy(self):
  class NodePathAttribs (line 24) | class NodePathAttribs(NodePathEntityBase):
    method initNodePathAttribs (line 26) | def initNodePathAttribs(self, doReparent = 1):
    method destroy (line 29) | def destroy(self):
    method getNodePath (line 32) | def getNodePath(self):
  class NodePathAndAttribs (line 36) | class NodePathAndAttribs(NodePathEntityBase, NodePath):
    method __init__ (line 38) | def __init__(self):
    method initNodePathAttribs (line 42) | def initNodePathAttribs(self, doReparent = 1):
    method destroy (line 45) | def destroy(self):
    method getNodePath (line 49) | def getNodePath(self):
  class NodePathAttribsProxy (line 53) | class NodePathAttribsProxy(NodePathEntityBase):
    method initNodePathAttribs (line 55) | def initNodePathAttribs(self, doReparent = 1):
    method destroy (line 58) | def destroy(self):
    method setPos (line 61) | def setPos(self, *args):
    method setX (line 64) | def setX(self, *args):
    method setY (line 67) | def setY(self, *args):
    method setZ (line 70) | def setZ(self, *args):
    method setHpr (line 73) | def setHpr(self, *args):
    method setH (line 76) | def setH(self, *args):
    method setP (line 79) | def setP(self, *args):
    method setR (line 82) | def setR(self, *args):
    method setScale (line 85) | def setScale(self, *args):
    method setSx (line 88) | def setSx(self, *args):
    method setSy (line 91) | def setSy(self, *args):
    method setSz (line 94) | def setSz(self, *args):
    method reparentTo (line 97) | def reparentTo(self, *args):
  class NodePathEntity (line 101) | class NodePathEntity(Entity.Entity, NodePath, NodePathAttribs):
    method __init__ (line 103) | def __init__(self, level, entId):
    method destroy (line 109) | def destroy(self):
  class DistributedNodePathEntity (line 115) | class DistributedNodePathEntity(DistributedEntity.DistributedEntity, Nod...
    method __init__ (line 117) | def __init__(self, cr):
    method generateInit (line 120) | def generateInit(self):
    method announceGenerate (line 125) | def announceGenerate(self):
    method delete (line 129) | def delete(self):

FILE: otp/level/CollisionSolidEntity.py
  class CollisionSolidEntity (line 6) | class CollisionSolidEntity(BasicEntities.NodePathEntity):
    method __init__ (line 9) | def __init__(self, level, entId):
    method destroy (line 15) | def destroy(self):
    method initSolid (line 19) | def initSolid(self):
    method destroySolid (line 35) | def destroySolid(self):
    method attribChanged (line 43) | def attribChanged(self, attrib, value):

FILE: otp/level/CutScene.py
  function nothing (line 12) | def nothing(self, track, subjectNodePath, duration):
  function irisInOut (line 16) | def irisInOut(self, track, subjectNodePath, duration):
  function letterBox (line 21) | def letterBox(self, track, subjectNodePath, duration):
  function foo1 (line 26) | def foo1(self, track, subjectNodePath, duration):
  function doorUnlock (line 31) | def doorUnlock(self, track, subjectNodePath, duration):
  class CutScene (line 36) | class CutScene(BasicEntities.NodePathEntity, DirectObject.DirectObject):
    method __init__ (line 44) | def __init__(self, level, entId):
    method destroy (line 56) | def destroy(self):
    method setEffect (line 62) | def setEffect(self, effect):
    method setMotion (line 66) | def setMotion(self, motion):
    method setSubjectNodePath (line 70) | def setSubjectNodePath(self, subjectNodePath):
    method startOrStop (line 73) | def startOrStop(self, start):
    method setStartStop (line 91) | def setStartStop(self, event):
    method getName (line 98) | def getName(self):

FILE: otp/level/DistributedEntity.py
  class DistributedEntity (line 5) | class DistributedEntity(DistributedObject.DistributedObject, Entity.Enti...
    method __init__ (line 8) | def __init__(self, cr):
    method generateInit (line 16) | def generateInit(self):
    method generate (line 20) | def generate(self):
    method setLevelDoId (line 24) | def setLevelDoId(self, levelDoId):
    method setEntId (line 28) | def setEntId(self, entId):
    method announceGenerate (line 32) | def announceGenerate(self):
    method disable (line 43) | def disable(self):
    method delete (line 48) | def delete(self):

FILE: otp/level/DistributedEntityAI.py
  class DistributedEntityAI (line 5) | class DistributedEntityAI(DistributedObjectAI.DistributedObjectAI, Entit...
    method __init__ (line 8) | def __init__(self, level, entId):
    method generate (line 20) | def generate(self):
    method destroy (line 24) | def destroy(self):
    method delete (line 29) | def delete(self):
    method getLevelDoId (line 33) | def getLevelDoId(self):
    method getEntId (line 36) | def getEntId(self):
    method setParentEntId (line 41) | def setParentEntId(self, parentEntId):

FILE: otp/level/DistributedInteractiveEntity.py
  class DistributedInteractiveEntity (line 7) | class DistributedInteractiveEntity(DistributedEntity.DistributedEntity):
    method __init__ (line 10) | def __init__(self, cr):
    method generate (line 15) | def generate(self):
    method disable (line 18) | def disable(self):
    method delete (line 22) | def delete(self):
    method setAvatarInteract (line 26) | def setAvatarInteract(self, avatarId):
    method setOwnerDoId (line 29) | def setOwnerDoId(self, ownerDoId):
    method setState (line 32) | def setState(self, state, timestamp):
    method enterTrigger (line 39) | def enterTrigger(self, args = None):
    method exitTrigger (line 43) | def exitTrigger(self, args = None):
    method rejectInteract (line 47) | def rejectInteract(self):
    method avatarExit (line 50) | def avatarExit(self, avatarId):
    method enterOff (line 53) | def enterOff(self):
    method exitOff (line 56) | def exitOff(self):
    method enterAttract (line 59) | def enterAttract(self, ts):
    method exitAttract (line 62) | def exitAttract(self):
    method enterPlaying (line 65) | def enterPlaying(self, ts):
    method exitPlaying (line 68) | def exitPlaying(self):

FILE: otp/level/DistributedInteractiveEntityAI.py
  class DistributedInteractiveEntityAI (line 4) | class DistributedInteractiveEntityAI(DistributedObjectAI):

FILE: otp/level/DistributedLevel.py
  class DistributedLevel (line 18) | class DistributedLevel(DistributedObject.DistributedObject, Level.Level):
    method __init__ (line 27) | def __init__(self, cr):
    method generate (line 41) | def generate(self):
    method setLevelZoneId (line 52) | def setLevelZoneId(self, zoneId):
    method setPlayerIds (line 55) | def setPlayerIds(self, avIdList):
    method setEntranceId (line 58) | def setEntranceId(self, entranceId):
    method getEntranceId (line 61) | def getEntranceId(self):
    method setZoneIds (line 64) | def setZoneIds(self, zoneIds):
    method setStartTimestamp (line 68) | def setStartTimestamp(self, timestamp):
    method privGotAllRequired (line 73) | def privGotAllRequired(self):
    method levelAnnounceGenerate (line 76) | def levelAnnounceGenerate(self):
    method initializeLevel (line 79) | def initializeLevel(self, levelSpec):
    method reportModelSpecSyncError (line 88) | def reportModelSpecSyncError(self, msg):
    method setSpecDeny (line 91) | def setSpecDeny(self, reason):
    method setSpecSenderDoId (line 94) | def setSpecSenderDoId(self, doId):
    method privGotSpec (line 115) | def privGotSpec(self, levelSpec):
    method announceLeaving (line 124) | def announceLeaving(self):
    method placeLocalToon (line 128) | def placeLocalToon(self, moveLocalAvatar = True):
    method createEntityCreator (line 157) | def createEntityCreator(self):
    method onEntityTypePostCreate (line 160) | def onEntityTypePostCreate(self, entType):
    method __handleLevelMgrCreated (line 165) | def __handleLevelMgrCreated(self):
    method fixupLevelModel (line 175) | def fixupLevelModel(self):
    method getFloorOuchLevel (line 211) | def getFloorOuchLevel(self):
    method announceGenerate (line 214) | def announceGenerate(self):
    method disable (line 218) | def disable(self):
    method delete (line 238) | def delete(self):
    method requestReparent (line 243) | def requestReparent(self, entity, parentId, wrt = False):
    method getZoneNode (line 272) | def getZoneNode(self, zoneEntId):
    method warpToZone (line 275) | def warpToZone(self, zoneNum):
    method showZone (line 284) | def showZone(self, zoneNum):
    method setColorZones (line 289) | def setColorZones(self, fColorZones):
    method getColorZones (line 293) | def getColorZones(self):
    method hideZone (line 296) | def hideZone(self, zoneNum):
    method setTransparency (line 304) | def setTransparency(self, alpha, zone = None):
    method initVisibility (line 313) | def initVisibility(self):
    method shutdownVisibility (line 341) | def shutdownVisibility(self):
    method toonEnterZone (line 344) | def toonEnterZone(self, zoneNum, ouchLevel = None):
    method camEnterZone (line 351) | def camEnterZone(self, zoneNum):
    method lockVisibility (line 359) | def lockVisibility(self, zoneNum = None, zoneId = None):
    method unlockVisibility (line 367) | def unlockVisibility(self):
    method enterZone (line 375) | def enterZone(self, zoneNum):
    method updateVisibility (line 385) | def updateVisibility(self, zoneNum = None):
    method setVisibility (line 438) | def setVisibility(self, vizList):
    method resetVisibility (line 451) | def resetVisibility(self):
    method handleVisChange (line 459) | def handleVisChange(self):
    method forceSetZoneThisFrame (line 463) | def forceSetZoneThisFrame(self):
    method visChangeTask (line 466) | def visChangeTask(self, task):
    method setAttribChange (line 474) | def setAttribChange(self, entId, attribName, valueStr, username):
    method spawnTitleText (line 478) | def spawnTitleText(self):
    method showInfoText (line 507) | def showInfoText(self, text = 'hello world'):
    method showTitleText (line 524) | def showTitleText(self):
    method hideTitleText (line 527) | def hideTitleText(self):
    method showSmallTitle (line 531) | def showSmallTitle(self):
    method hideSmallTitleText (line 536) | def hideSmallTitleText(self):
    method startOuch (line 540) | def startOuch(self, ouchLevel, period = 2):
    method stopOuch (line 562) | def stopOuch(self):
    method b_setOuch (line 567) | def b_setOuch(self, penalty, anim = None):
    method d_setOuch (line 574) | def d_setOuch(self, penalty):
    method setOuch (line 577) | def setOuch(self, penalty, anim = None):
    method complexVis (line 588) | def complexVis(self):

FILE: otp/level/DistributedLevelAI.py
  class DistributedLevelAI (line 10) | class DistributedLevelAI(DistributedObjectAI.DistributedObjectAI, Level....
    method __init__ (line 13) | def __init__(self, air, zoneId, entranceId, avIds):
    method setLevelSpec (line 27) | def setLevelSpec(self, levelSpec):
    method generate (line 30) | def generate(self, levelSpec=None):
    method getLevelZoneId (line 42) | def getLevelZoneId(self):
    method getPlayerIds (line 45) | def getPlayerIds(self):
    method getEntranceId (line 48) | def getEntranceId(self):
    method getBattleCreditMultiplier (line 51) | def getBattleCreditMultiplier(self):
    method delete (line 54) | def delete(self, deAllocZone=True):
    method initializeLevel (line 64) | def initializeLevel(self, levelSpec):
    method handleAvatarDisconnect (line 77) | def handleAvatarDisconnect(self, avId):
    method _levelControlsRequestDelete (line 87) | def _levelControlsRequestDelete(self):
    method allToonsGone (line 90) | def allToonsGone(self, toonsThatCleared):
    method createEntityCreator (line 101) | def createEntityCreator(self):
    method setOuch (line 104) | def setOuch(self, penalty):
    method requestCurrentLevelSpec (line 114) | def requestCurrentLevelSpec(self, specHash, entTypeRegHash):
    method setAttribChange (line 144) | def setAttribChange(self, entId, attribName, value, username='SYSTEM'):
    method scheduleAutosave (line 154) | def scheduleAutosave(self):
    method removeAutosaveTask (line 160) | def removeAutosaveTask(self):
    method autosaveSpec (line 165) | def autosaveSpec(self, task=None):
    method saveSpec (line 173) | def saveSpec(self, task=None):

FILE: otp/level/EditMgr.py
  class EditMgr (line 3) | class EditMgr(EditMgrBase.EditMgrBase):

FILE: otp/level/EditMgrAI.py
  class EditMgrAI (line 6) | class EditMgrAI(EditMgrBase.EditMgrBase):
    method setRequestNewEntity (line 9) | def setRequestNewEntity(self, data):
    method getSpecSaveEvent (line 35) | def getSpecSaveEvent(self):
    method setRequestSave (line 38) | def setRequestSave(self, data):

FILE: otp/level/EditMgrBase.py
  class EditMgrBase (line 4) | class EditMgrBase(Entity.Entity):
    method __init__ (line 7) | def __init__(self, level, entId):
    method destroy (line 10) | def destroy(self):
    method setInsertEntity (line 16) | def setInsertEntity(self, data):
    method setRemoveEntity (line 22) | def setRemoveEntity(self, data):

FILE: otp/level/EditorGlobals.py
  function checkNotReadyToEdit (line 19) | def checkNotReadyToEdit():
  function assertReadyToEdit (line 27) | def assertReadyToEdit():
  function getEditUsername (line 34) | def getEditUsername():
  function getEntIdAllocRange (line 38) | def getEntIdAllocRange():

FILE: otp/level/Entity.py
  class Entity (line 5) | class Entity(DirectObject):
    method __init__ (line 8) | def __init__(self, level = None, entId = None):
    method initializeEntity (line 11) | def initializeEntity(self, level, entId):
    method __str__ (line 18) | def __str__(self):
    method destroy (line 28) | def destroy(self):
    method getUniqueName (line 39) | def getUniqueName(self, name, entId = None):
    method getParentToken (line 44) | def getParentToken(self):
    method getOutputEventName (line 47) | def getOutputEventName(self, entId = None):
    method getZoneEntId (line 52) | def getZoneEntId(self):
    method getZoneEntity (line 55) | def getZoneEntity(self):
    method getZoneNode (line 58) | def getZoneNode(self):
    method privGetSetter (line 61) | def privGetSetter(self, attrib):
    method callSetters (line 67) | def callSetters(self, *attribs):
    method callSettersAndDelete (line 70) | def callSettersAndDelete(self, *attribs):
    method privCallSetters (line 73) | def privCallSetters(self, doDelete, *attribs):
    method setAttribInit (line 85) | def setAttribInit(self, attrib, value):
    method handleAttribChange (line 90) | def handleAttribChange(self, attrib, value):
    method attribChanged (line 99) | def attribChanged(self, attrib, value):

FILE: otp/level/EntityCreator.py
  function nothing (line 18) | def nothing(*args):
  function nonlocalEnt (line 22) | def nonlocalEnt(*args):
  class EntityCreator (line 26) | class EntityCreator(EntityCreatorBase.EntityCreatorBase):
    method __init__ (line 28) | def __init__(self, level):
    method doCreateEntity (line 48) | def doCreateEntity(self, ctor, entId):

FILE: otp/level/EntityCreatorAI.py
  function createDistributedEntity (line 8) | def createDistributedEntity(AIclass, level, entId, zoneId):
  function createLocalEntity (line 14) | def createLocalEntity(AIclass, level, entId, zoneId):
  function nothing (line 19) | def nothing(*args):
  class EntityCreatorAI (line 23) | class EntityCreatorAI(EntityCreatorBase.EntityCreatorBase):
    method __init__ (line 25) | def __init__(self, level):
    method doCreateEntity (line 45) | def doCreateEntity(self, ctor, entId):

FILE: otp/level/EntityCreatorBase.py
  class EntityCreatorBase (line 3) | class EntityCreatorBase:
    method __init__ (line 6) | def __init__(self, level):
    method createEntity (line 10) | def createEntity(self, entId):
    method getEntityTypes (line 17) | def getEntityTypes(self):
    method privRegisterType (line 20) | def privRegisterType(self, entType, ctor):
    method privRegisterTypes (line 25) | def privRegisterTypes(self, type2ctor):

FILE: otp/level/EntityStateVarSet.py
  class EntityStateVarSet (line 5) | class EntityStateVarSet(Entity):
    method __init__ (line 7) | def __init__(self, entType):
    method initializeEntity (line 14) | def initializeEntity(self, level, entId):
    method _getAttributeNames (line 26) | def _getAttributeNames(self):
    method _setter (line 29) | def _setter(self, name, value):
    method _addAttrib (line 32) | def _addAttrib(self, name, defaultVal, type):

FILE: otp/level/EntityTypeDesc.py
  class EntityTypeDesc (line 5) | class EntityTypeDesc:
    method __init__ (line 9) | def __init__(self):
    method isConcrete (line 19) | def isConcrete(self):
    method isPermanent (line 22) | def isPermanent(self):
    method getOutputType (line 25) | def getOutputType(self):
    method getAttribNames (line 28) | def getAttribNames(self):
    method getAttribDescDict (line 31) | def getAttribDescDict(self):
    method getAttribsOfType (line 34) | def getAttribsOfType(self, type):
    method privCompileAttribDescs (line 43) | def privCompileAttribDescs(entTypeClass):
    method __str__ (line 81) | def __str__(self):
    method __repr__ (line 84) | def __repr__(self):

FILE: otp/level/EntityTypeRegistry.py
  class EntityTypeRegistry (line 11) | class EntityTypeRegistry:
    method __init__ (line 14) | def __init__(self, entityTypeModule):
    method getAllTypeNames (line 75) | def getAllTypeNames(self):
    method getTypeDesc (line 78) | def getTypeDesc(self, entTypeName):
    method getTypeNamesFromOutputType (line 81) | def getTypeNamesFromOutputType(self, outputType):
    method getDerivedTypeNames (line 84) | def getDerivedTypeNames(self, entTypeName):
    method isDerivedAndBase (line 87) | def isDerivedAndBase(self, entType, baseEntType):
    method getPermanentTypeNames (line 90) | def getPermanentTypeNames(self):
    method getHashStr (line 93) | def getHashStr(self):
    method __hash__ (line 96) | def __hash__(self):
    method __repr__ (line 99) | def __repr__(self):

FILE: otp/level/EntityTypes.py
  class Entity (line 4) | class Entity(EntityTypeDesc):
  class LevelMgr (line 13) | class LevelMgr(Entity):
  class EditMgr (line 19) | class EditMgr(Entity):
  class AttribModifier (line 31) | class AttribModifier(Entity):
  class Locator (line 39) | class Locator(Entity):
  class Nodepath (line 44) | class Nodepath(Entity):
  class Zone (line 55) | class Zone(Nodepath):
  class EntrancePoint (line 62) | class EntrancePoint(Nodepath):
  class LogicGate (line 73) | class LogicGate(Entity):
  class CutScene (line 97) | class CutScene(Entity):
  class CollisionSolid (line 117) | class CollisionSolid(Nodepath):
  class Model (line 128) | class Model(Nodepath):
  class Path (line 149) | class Path(Nodepath):
  class VisibilityExtender (line 154) | class VisibilityExtender(Entity):
  class AmbientSound (line 162) | class AmbientSound(Nodepath):
  class PropSpinner (line 171) | class PropSpinner(Entity):
  class EntityGroup (line 175) | class EntityGroup(Entity):

FILE: otp/level/EntrancePoint.py
  class EntrancePoint (line 5) | class EntrancePoint(BasicEntities.NodePathEntity):
    method __init__ (line 7) | def __init__(self, level, entId):
    method destroy (line 13) | def destroy(self):
    method placeToon (line 21) | def placeToon(self, toon, toonIndex, numToons):
    method initEntrancePoint (line 26) | def initEntrancePoint(self):
    method destroyEntrancePoint (line 30) | def destroyEntrancePoint(self):
    method attribChanged (line 37) | def attribChanged(self, *args):

FILE: otp/level/Level.py
  class Level (line 7) | class Level:
    method __init__ (line 10) | def __init__(self):
    method initializeLevel (line 15) | def initializeLevel(self, levelId, levelSpec, scenarioIndex):
    method isInitialized (line 37) | def isInitialized(self):
    method getLevelId (line 40) | def getLevelId(self):
    method destroyLevel (line 43) | def destroyLevel(self):
    method createEntityCreator (line 63) | def createEntityCreator(self):
    method createAllEntities (line 66) | def createAllEntities(self, priorityTypes = []):
    method destroyAllEntities (line 79) | def destroyAllEntities(self):
    method createAllEntitiesOfType (line 95) | def createAllEntitiesOfType(self, entType):
    method createEntity (line 102) | def createEntity(self, entId):
    method initializeEntity (line 119) | def initializeEntity(self, entity):
    method getEntity (line 129) | def getEntity(self, entId):
    method getEntityType (line 136) | def getEntityType(self, entId):
    method getEntityZoneEntId (line 139) | def getEntityZoneEntId(self, entId):
    method getEntityZoneId (line 142) | def getEntityZoneId(self, entId):
    method getZoneId (line 148) | def getZoneId(self, zoneEntId):
    method getZoneNumFromId (line 151) | def getZoneNumFromId(self, zoneId):
    method getParentTokenForEntity (line 154) | def getParentTokenForEntity(self, entId):
    method getLevelPreCreateEvent (line 157) | def getLevelPreCreateEvent(self):
    method getLevelPostCreateEvent (line 160) | def getLevelPostCreateEvent(self):
    method getEntityTypePreCreateEvent (line 163) | def getEntityTypePreCreateEvent(self, entType):
    method getEntityTypePostCreateEvent (line 166) | def getEntityTypePostCreateEvent(self, entType):
    method getEntityCreateEvent (line 169) | def getEntityCreateEvent(self, entId):
    method getEntityOfTypeCreateEvent (line 172) | def getEntityOfTypeCreateEvent(self, entType):
    method onLevelPreCreate (line 175) | def onLevelPreCreate(self):
    method onLevelPostCreate (line 178) | def onLevelPostCreate(self):
    method onEntityTypePreCreate (line 181) | def onEntityTypePreCreate(self, entType):
    method onEntityTypePostCreate (line 184) | def onEntityTypePostCreate(self, entType):
    method onEntityCreate (line 187) | def onEntityCreate(self, entId):
    method setEntityCreateCallback (line 196) | def setEntityCreateCallback(self, entId, callback):
    method getEntityDestroyEvent (line 211) | def getEntityDestroyEvent(self, entId):
    method onEntityDestroy (line 214) | def onEntityDestroy(self, entId):
    method handleVisChange (line 220) | def handleVisChange(self):
    method getAttribChangeEventName (line 225) | def getAttribChangeEventName(self):
    method getInsertEntityEventName (line 228) | def getInsertEntityEventName(self):
    method getRemoveEntityEventName (line 231) | def getRemoveEntityEventName(self):
    method handleAttribChange (line 234) | def handleAttribChange(self, entId, attrib, value, username = None):
    method setEntityCreatorUsername (line 244) | def setEntityCreatorUsername(self, entId, editUsername):
    method handleEntityInsert (line 247) | def handleEntityInsert(self, entId):
    method handleEntityRemove (line 252) | def handleEntityRemove(self, entId):

FILE: otp/level/LevelMgr.py
  class LevelMgr (line 4) | class LevelMgr(LevelMgrBase.LevelMgrBase):
    method __init__ (line 6) | def __init__(self, level, entId):
    method destroy (line 17) | def destroy(self):
    method handleZoneCreated (line 25) | def handleZoneCreated(self, entId):
    method handleZoneDestroy (line 31) | def handleZoneDestroy(self, entId):
    method privAssignZoneIds (line 38) | def privAssignZoneIds(self):

FILE: otp/level/LevelMgrAI.py
  class LevelMgrAI (line 4) | class LevelMgrAI(LevelMgrBase.LevelMgrBase):
    method __init__ (line 6) | def __init__(self, level, entId):
    method destroy (line 12) | def destroy(self):
    method handleZoneCreated (line 17) | def handleZoneCreated(self, entId):
    method handleZoneDestroy (line 23) | def handleZoneDestroy(self, entId):
    method privCreateSortedZoneIdList (line 28) | def privCreateSortedZoneIdList(self):

FILE: otp/level/LevelMgrBase.py
  class LevelMgrBase (line 3) | class LevelMgrBase(Entity.Entity):
    method __init__ (line 5) | def __init__(self, level, entId):
    method destroy (line 8) | def destroy(self):

FILE: otp/level/LevelSpec.py
  class LevelSpec (line 11) | class LevelSpec:
    method __init__ (line 15) | def __init__(self, spec = None, scenario = 0):
    method destroy (line 53) | def destroy(self):
    method getNumScenarios (line 62) | def getNumScenarios(self):
    method setScenario (line 65) | def setScenario(self, scenario):
    method getScenario (line 68) | def getScenario(self):
    method getGlobalEntIds (line 71) | def getGlobalEntIds(self):
    method getScenarioEntIds (line 74) | def getScenarioEntIds(self, scenario = None):
    method getAllEntIds (line 79) | def getAllEntIds(self):
    method getAllEntIdsFromAllScenarios (line 82) | def getAllEntIdsFromAllScenarios(self):
    method getEntitySpec (line 89) | def getEntitySpec(self, entId):
    method getCopyOfSpec (line 93) | def getCopyOfSpec(self, spec):
    method getEntitySpecCopy (line 104) | def getEntitySpecCopy(self, entId):
    method getEntityType (line 108) | def getEntityType(self, entId):
    method getEntityZoneEntId (line 111) | def getEntityZoneEntId(self, entId):
    method getEntType2ids (line 118) | def getEntType2ids(self, entIds):
    method privGetGlobalEntityDict (line 127) | def privGetGlobalEntityDict(self):
    method privGetScenarioEntityDict (line 130) | def privGetScenarioEntityDict(self, scenario):
    method printZones (line 133) | def printZones(self):
    method setLevel (line 146) | def setLevel(self, level):
    method hasLevel (line 149) | def hasLevel(self):
    method setEntityTypeReg (line 152) | def setEntityTypeReg(self, entTypeReg):
    method hasEntityTypeReg (line 165) | def hasEntityTypeReg(self):
    method setFilename (line 168) | def setFilename(self, filename):
    method doSetAttrib (line 171) | def doSetAttrib(self, entId, attrib, value):
    method setAttribChange (line 175) | def setAttribChange(self, entId, attrib, value, username):
    method insertEntity (line 184) | def insertEntity(self, entId, entType, parentEntId = 'unspecified'):
    method removeEntity (line 202) | def removeEntity(self, entId):
    method removeZoneReferences (line 212) | def removeZoneReferences(self, removedZoneNums):
    method getSpecImportsModuleName (line 225) | def getSpecImportsModuleName(self):
    method getFilename (line 228) | def getFilename(self):
    method privGetBackupFilename (line 231) | def privGetBackupFilename(self, filename):
    method saveToDisk (line 234) | def saveToDisk(self, filename = None, makeBackup = 1):
    method privSaveToDisk (line 252) | def privSaveToDisk(self, filename):
    method privFileExists (line 263) | def privFileExists(self, filename):
    method privRemoveFile (line 270) | def privRemoveFile(self, filename):
    method getPrettyString (line 277) | def getPrettyString(self):
    method _recurKeyTest (line 352) | def _recurKeyTest(self, dict1, dict2):
    method testPrettyString (line 374) | def testPrettyString(self, prettyString = None):
    method checkSpecIntegrity (line 385) | def checkSpecIntegrity(self):
    method stringHash (line 411) | def stringHash(self):
    method __hash__ (line 416) | def __hash__(self):
    method __str__ (line 419) | def __str__(self):
    method __repr__ (line 422) | def __repr__(self):

FILE: otp/level/LevelUtil.py
  function getZoneNum2Node (line 4) | def getZoneNum2Node(levelModel, logFunc = lambda str: str):

FILE: otp/level/LocatorEntity.py
  class LocatorEntity (line 5) | class LocatorEntity(Entity.Entity, NodePath):
    method __init__ (line 8) | def __init__(self, level, entId):
    method destroy (line 14) | def destroy(self):
    method getNodePath (line 18) | def getNodePath(self):
    method doReparent (line 21) | def doReparent(self):
    method attribChanged (line 32) | def attribChanged(self, attrib, value):

FILE: otp/level/LogicGate.py
  function andTest (line 5) | def andTest(self, a, b):
  function orTest (line 10) | def orTest(self, a, b):
  function xorTest (line 15) | def xorTest(self, a, b):
  function nandTest (line 19) | def nandTest(self, a, b):
  function norTest (line 24) | def norTest(self, a, b):
  function xnorTest (line 29) | def xnorTest(self, a, b):
  class LogicGate (line 33) | class LogicGate(Entity.Entity, DirectObject.DirectObject):
    method __init__ (line 42) | def __init__(self, level, entId):
    method destroy (line 54) | def destroy(self):
    method setLogicType (line 62) | def setLogicType(self, logicType):
    method setIsInput1 (line 66) | def setIsInput1(self, isTrue):
    method setIsInput2 (line 71) | def setIsInput2(self, isTrue):
    method setInput1Event (line 76) | def setInput1Event(self, event):
    method setInput2Event (line 83) | def setInput2Event(self, event):
    method getName (line 90) | def getName(self):

FILE: otp/level/ModelEntity.py
  class ModelEntity (line 5) | class ModelEntity(BasicEntities.NodePathEntity):
    method __init__ (line 10) | def __init__(self, level, entId):
    method destroy (line 22) | def destroy(self):
    method loadModel (line 28) | def loadModel(self):
    method setModelPath (line 70) | def setModelPath(self, path):
    method setCollisionsOnly (line 74) | def setCollisionsOnly(self, collisionsOnly):
    method setGoonHatType (line 78) | def setGoonHatType(self, goonHatType):

FILE: otp/level/PathEntity.py
  class PathEntity (line 7) | class PathEntity(BasicEntities.NodePathEntity):
    method __init__ (line 10) | def __init__(self, level, entId):
    method destroy (line 15) | def destroy(self):
    method setPathIndex (line 18) | def setPathIndex(self, pathIndex):
    method makePathTrack (line 30) | def makePathTrack(self, node, velocity, name, turnTime = 1, lookAround...
    method getChangeEvent (line 52) | def getChangeEvent(self):
    method setPathScale (line 55) | def setPathScale(self, pathScale):

FILE: otp/level/PropSpinner.py
  class PropSpinner (line 5) | class PropSpinner(Entity):
    method __init__ (line 7) | def __init__(self, level, entId):
    method destroy (line 11) | def destroy(self):
    method initProps (line 15) | def initProps(self):
    method destroyProps (line 48) | def destroyProps(self):
    method attribChanged (line 55) | def attribChanged(self, *args):

FILE: otp/level/VisibilityBlocker.py
  class VisibilityBlocker (line 3) | class VisibilityBlocker:
    method __init__ (line 5) | def __init__(self):
    method destroy (line 9) | def destroy(self):
    method requestUnblockVis (line 12) | def requestUnblockVis(self):
    method cancelUnblockVis (line 19) | def cancelUnblockVis(self):
    method isWaitingForUnblockVis (line 25) | def isWaitingForUnblockVis(self):
    method okToUnblockVis (line 28) | def okToUnblockVis(self):

FILE: otp/level/VisibilityExtender.py
  class VisibilityExtender (line 3) | class VisibilityExtender(Entity.Entity):
    method __init__ (line 5) | def __init__(self, level, entId):
    method initVisExt (line 9) | def initVisExt(self):
    method destroyVisExt (line 18) | def destroyVisExt(self):
    method handleEvent (line 25) | def handleEvent(self, doExtend):
    method extend (line 32) | def extend(self):
    method retract (line 38) | def retract(self):
    method destroy (line 44) | def destroy(self):
    method setNewZones (line 50) | def setNewZones(self, newZones):
    method attribChanged (line 58) | def attribChanged(self, *args):

FILE: otp/level/ZoneEntity.py
  class ZoneEntity (line 4) | class ZoneEntity(ZoneEntityBase.ZoneEntityBase, BasicEntities.NodePathAt...
    method __init__ (line 6) | def __init__(self, level, entId):
    method destroy (line 19) | def destroy(self):
    method getNodePath (line 23) | def getNodePath(self):
    method getVisibleZoneNums (line 26) | def getVisibleZoneNums(self):
    method incrementRefCounts (line 29) | def incrementRefCounts(self, zoneNumList):
    method decrementRefCounts (line 34) | def decrementRefCounts(self, zoneNumList):
    method setVisibility (line 42) | def setVisibility(self, visibility):

FILE: otp/level/ZoneEntityAI.py
  class ZoneEntityAI (line 3) | class ZoneEntityAI(ZoneEntityBase.ZoneEntityBase):
    method __init__ (line 5) | def __init__(self, level, entId):
    method destroy (line 9) | def destroy(self):

FILE: otp/level/ZoneEntityBase.py
  class ZoneEntityBase (line 4) | class ZoneEntityBase(Entity.Entity):
    method __init__ (line 6) | def __init__(self, level, entId):
    method destroy (line 11) | def destroy(self):
    method isUberZone (line 15) | def isUberZone(self):
    method setZoneId (line 18) | def setZoneId(self, zoneId):
    method getZoneId (line 21) | def getZoneId(self):
    method getZoneNum (line 24) | def getZoneNum(self):

FILE: otp/login/AstronLoginManager.py
  class AstronLoginManager (line 5) | class AstronLoginManager(DistributedObjectGlobal):
    method __init__ (line 8) | def __init__(self, cr):
    method handleRequestLogin (line 12) | def handleRequestLogin(self):
    method sendRequestLogin (line 16) | def sendRequestLogin(self, playToken):
    method loginResponse (line 19) | def loginResponse(self, responseBlob):
    method sendRequestAvatarList (line 22) | def sendRequestAvatarList(self):
    method avatarListResponse (line 25) | def avatarListResponse(self, avatarList):
    method sendCreateAvatar (line 28) | def sendCreateAvatar(self, avDNA, avName, avPosition):
    method createAvatarResponse (line 32) | def createAvatarResponse(self, avId):
    method sendSetNamePattern (line 35) | def sendSetNamePattern(self, avId, p1, f1, p2, f2, p3, f3, p4, f4, cal...
    method namePatternAnswer (line 39) | def namePatternAnswer(self, avId, status):
    method sendSetNameTyped (line 42) | def sendSetNameTyped(self, avId, name, callback):
    method nameTypedResponse (line 46) | def nameTypedResponse(self, avId, status):
    method sendAcknowledgeAvatarName (line 49) | def sendAcknowledgeAvatarName(self, avId, callback):
    method acknowledgeAvatarNameResponse (line 53) | def acknowledgeAvatarNameResponse(self):
    method sendRequestRemoveAvatar (line 56) | def sendRequestRemoveAvatar(self, avId):
    method sendRequestPlayAvatar (line 59) | def sendRequestPlayAvatar(self, avId):

FILE: otp/login/AstronLoginManagerUD.py
  class AccountDB (line 27) | class AccountDB:
    method __init__ (line 32) | def __init__(self, loginManager):
    method lookup (line 35) | def lookup(self, playToken, callback):
    method storeAccountId (line 38) | def storeAccountId(self, databaseId, accountId, callback):
  class DeveloperAccountDB (line 42) | class DeveloperAccountDB(AccountDB):
    method __init__ (line 44) | def __init__(self, loginManager):
    method lookup (line 59) | def lookup(self, playToken, callback):
    method storeAccountId (line 95) | def storeAccountId(self, databaseId, accountId, callback):
  class GameOperation (line 105) | class GameOperation:
    method __init__ (line 107) | def __init__(self, loginManager, sender):
    method setCallback (line 112) | def setCallback(self, callback):
    method _handleDone (line 115) | def _handleDone(self):
    method _handleCloseConnection (line 123) | def _handleCloseConnection(self, reason=''):
  class LoginOperation (line 135) | class LoginOperation(GameOperation):
    method __init__ (line 137) | def __init__(self, loginManager, sender):
    method start (line 144) | def start(self, playToken):
    method __handleLookup (line 148) | def __handleLookup(self, result):
    method __handleRetrieveAccount (line 170) | def __handleRetrieveAccount(self):
    method __handleAccountRetrieved (line 174) | def __handleAccountRetrieved(self, dclass, fields):
    method __handleCreateAccount (line 186) | def __handleCreateAccount(self):
    method __handleAccountCreated (line 199) | def __handleAccountCreated(self, accountId):
    method __storeAccountId (line 215) | def __storeAccountId(self):
    method __handleAccountIdStored (line 218) | def __handleAccountIdStored(self, success=True):
    method __handleSetAccount (line 228) | def __handleSetAccount(self):
    method getLastLoggedInStr (line 277) | def getLastLoggedInStr(self):
    method getAccountCreationDate (line 285) | def getAccountCreationDate(self):
    method getAccountDays (line 294) | def getAccountDays(self):
  class AvatarOperation (line 304) | class AvatarOperation(GameOperation):
    method __init__ (line 306) | def __init__(self, loginManager, sender):
    method start (line 311) | def start(self):
    method __handleRetrieveAccount (line 314) | def __handleRetrieveAccount(self):
    method __handleAccountRetrieved (line 318) | def __handleAccountRetrieved(self, dclass, fields):
  class GetAvatarsOperation (line 337) | class GetAvatarsOperation(AvatarOperation):
    method __init__ (line 339) | def __init__(self, loginManager, sender):
    method _handleQueryAvatars (line 345) | def _handleQueryAvatars(self):
    method __handleSendAvatars (line 380) | def __handleSendAvatars(self):
  class CreateAvatarOperation (line 408) | class CreateAvatarOperation(GameOperation):
    method __init__ (line 410) | def __init__(self, loginManager, sender):
    method start (line 415) | def start(self, avDNA, avPosition):
    method __handleRetrieveAccount (line 437) | def __handleRetrieveAccount(self):
    method __handleAccountRetrieved (line 441) | def __handleAccountRetrieved(self, dclass, fields):
    method __handleCreateAvatar (line 464) | def __handleCreateAvatar(self):
    method __handleToonCreated (line 480) | def __handleToonCreated(self, avId):
    method __handleStoreAvatar (line 490) | def __handleStoreAvatar(self):
    method __handleAvatarStored (line 498) | def __handleAvatarStored(self, fields):
  class SetNamePatternOperation (line 510) | class SetNamePatternOperation(AvatarOperation):
    method __init__ (line 512) | def __init__(self, loginManager, sender):
    method start (line 518) | def start(self, avId, pattern):
    method __handleRetrieveAvatar (line 523) | def __handleRetrieveAvatar(self):
    method __handleAvatarRetrieved (line 536) | def __handleAvatarRetrieved(self, dclass, fields):
    method __handleSetName (line 551) | def __handleSetName(self):
  class SetNameTypedOperation (line 578) | class SetNameTypedOperation(AvatarOperation):
    method __init__ (line 580) | def __init__(self, loginManager, sender):
    method start (line 586) | def start(self, avId, name):
    method __handleRetrieveAvatar (line 595) | def __handleRetrieveAvatar(self):
    method __handleAvatarRetrieved (line 608) | def __handleAvatarRetrieved(self, dclass, fields):
    method __handleJudgeName (line 623) | def __handleJudgeName(self):
  class AcknowledgeNameOperation (line 635) | class AcknowledgeNameOperation(AvatarOperation):
    method __init__ (line 637) | def __init__(self, loginManager, sender):
    method start (line 642) | def start(self, avId):
    method __handleGetTargetAvatar (line 646) | def __handleGetTargetAvatar(self):
    method __handleAvatarRetrieved (line 659) | def __handleAvatarRetrieved(self, dclass, fields):
  class RemoveAvatarOperation (line 689) | class RemoveAvatarOperation(GetAvatarsOperation):
    method __init__ (line 691) | def __init__(self, loginManager, sender):
    method start (line 696) | def start(self, avId):
    method __handleRemoveAvatar (line 700) | def __handleRemoveAvatar(self):
    method __handleAvatarRemoved (line 726) | def __handleAvatarRemoved(self, fields):
  class LoadAvatarOperation (line 735) | class LoadAvatarOperation(AvatarOperation):
    method __init__ (line 737) | def __init__(self, loginManager, sender):
    method start (line 742) | def start(self, avId):
    method __handleGetTargetAvatar (line 746) | def __handleGetTargetAvatar(self):
    method __handleAvatarRetrieved (line 753) | def __handleAvatarRetrieved(self, dclass, fields):
    method __handleSetAvatar (line 760) | def __handleSetAvatar(self):
  class UnloadAvatarOperation (line 799) | class UnloadAvatarOperation(GameOperation):
    method __init__ (line 801) | def __init__(self, loginManager, sender):
    method start (line 805) | def start(self, avId):
    method __handleUnloadAvatar (line 809) | def __handleUnloadAvatar(self):
  class AstronLoginManagerUD (line 839) | class AstronLoginManagerUD(DistributedObjectGlobalUD):
    method __init__ (line 842) | def __init__(self, air):
    method announceGenerate (line 849) | def announceGenerate(self):
    method closeConnection (line 859) | def closeConnection(self, connectionId, reason='', forOperations=False...
    method runLoginOperation (line 888) | def runLoginOperation(self, playToken):
    method runGameOperation (line 907) | def runGameOperation(self, operationType, *args):
    method requestLogin (line 925) | def requestLogin(self, playToken):
    method requestAvatarList (line 929) | def requestAvatarList(self):
    method createAvatar (line 933) | def createAvatar(self, avDNA, avPosition):
    method setNamePattern (line 937) | def setNamePattern(self, avId, p1, f1, p2, f2, p3, f3, p4, f4):
    method setNameTyped (line 942) | def setNameTyped(self, avId, name):
    method acknowledgeAvatarName (line 946) | def acknowledgeAvatarName(self, avId):
    method requestRemoveAvatar (line 950) | def requestRemoveAvatar(self, avId):
    method requestPlayAvatar (line 954) | def requestPlayAvatar(self, avId):

FILE: otp/login/CreateAccountScreen.py
  class CreateAccountScreen (line 14) | class CreateAccountScreen(StateData.StateData, GuiScreen.GuiScreen):
    method __init__ (line 21) | def __init__(self, cr, doneEvent):
    method load (line 29) | def load(self):
    method unload (line 64) | def unload(self):
    method enter (line 73) | def enter(self):
    method exit (line 78) | def exit(self):
    method enterOff (line 83) | def enterOff(self):
    method exitOff (line 86) | def exitOff(self):
    method enterCreate (line 89) | def enterCreate(self):
    method exitCreate (line 100) | def exitCreate(self):
    method __handleFocusChange (line 103) | def __handleFocusChange(self, focusItem):
    method __handleSubmit (line 111) | def __handleSubmit(self):
    method __handleCancel (line 137) | def __handleCancel(self):
    method __handleUsernameAck (line 140) | def __handleUsernameAck(self):
    method __handlePasswordAck (line 145) | def __handlePasswordAck(self):
    method enterWaitForLoginResponse (line 150) | def enterWaitForLoginResponse(self):
    method exitWaitForLoginResponse (line 170) | def exitWaitForLoginResponse(self):
    method handleWaitForLoginResponse (line 175) | def handleWaitForLoginResponse(self, msgType, di):
    method handleLoginResponseMsg2 (line 183) | def handleLoginResponseMsg2(self, di):
    method __handleLoginSuccess (line 193) | def __handleLoginSuccess(self):
    method handleLoginResponseMsg (line 200) | def handleLoginResponseMsg(self, di):
    method __handleConnectionErrorAck (line 230) | def __handleConnectionErrorAck(self):
    method __handleBadPasswordAck (line 234) | def __handleBadPasswordAck(self):
    method __handleBadAccountAck (line 238) | def __handleBadAccountAck(self):
    method __handleBadWordInUserName (line 242) | def __handleBadWordInUserName(self):

FILE: otp/login/GuiScreen.py
  class GuiScreen (line 9) | class GuiScreen:
    method __init__ (line 17) | def __init__(self):
    method startFocusMgmt (line 23) | def startFocusMgmt(self, startFocus = 0, enterPressBehavior = DGG.ENTE...
    method focusMgmtActive (line 72) | def focusMgmtActive(self):
    method stopFocusMgmt (line 75) | def stopFocusMgmt(self):
    method setFocus (line 104) | def setFocus(self, arg, suppressSound = 1):
    method advanceFocus (line 113) | def advanceFocus(self, condition = 1):
    method getFocusIndex (line 119) | def getFocusIndex(self):
    method getFocusItem (line 124) | def getFocusItem(self):
    method removeFocus (line 129) | def removeFocus(self):
    method restoreFocus (line 137) | def restoreFocus(self):
    method __setFocusIndex (line 140) | def __setFocusIndex(self, index):
    method __chainToUserCommandHandler (line 148) | def __chainToUserCommandHandler(self, item):
    method __chainToUserFocusHandler (line 157) | def __chainToUserFocusHandler(self, item):
    method __handleTab (line 163) | def __handleTab(self):
    method __handleShiftTab (line 168) | def __handleShiftTab(self):
    method __handleFocusChangeAbsorb (line 173) | def __handleFocusChangeAbsorb(self, index):
    method playFocusChangeSound (line 180) | def playFocusChangeSound(self):
    method __handleFocusChange (line 183) | def __handleFocusChange(self, index):
    method __startFrameStartTask (line 204) | def __startFrameStartTask(self):
    method __stopFrameStartTask (line 209) | def __stopFrameStartTask(self):
    method __handleFrameStart (line 214) | def __handleFrameStart(self, task):
    method __handleDirectScrolledListCommand (line 218) | def __handleDirectScrolledListCommand(self, index):
    method __handleEnter (line 222) | def __handleEnter(self):
    method __alwaysAdvanceFocus (line 231) | def __alwaysAdvanceFocus(self):
    method __advanceFocusIfNotEmpty (line 234) | def __advanceFocusIfNotEmpty(self):
    method __neverAdvanceFocus (line 242) | def __neverAdvanceFocus(self):
    method __ignoreEnterPress (line 245) | def __ignoreEnterPress(self):
    method waitForDatabaseTimeout (line 248) | def waitForDatabaseTimeout(self, requestName = 'unknown'):
    method __showWaitingForDatabase (line 253) | def __showWaitingForDatabase(self, requestName):
    method __giveUpWaitingForDatabase (line 261) | def __giveUpWaitingForDatabase(self, requestName):
    method cleanupWaitingForDatabase (line 267) | def cleanupWaitingForDatabase(self):
    method __handleCancelWaiting (line 274) | def __handleCancelWaiting(self, value):

FILE: otp/login/HTTPUtil.py
  class HTTPUtilException (line 3) | class HTTPUtilException(Exception):
    method __init__ (line 5) | def __init__(self, what):
  class ConnectionError (line 9) | class ConnectionError(HTTPUtilException):
    method __init__ (line 11) | def __init__(self, what, statusCode):
  class UnexpectedResponse (line 16) | class UnexpectedResponse(HTTPUtilException):
    method __init__ (line 18) | def __init__(self, what):
  function getHTTPResponse (line 22) | def getHTTPResponse(url, http, body = ''):

FILE: otp/login/LeaveToPayDialog.py
  class LeaveToPayDialog (line 8) | class LeaveToPayDialog:
    method __init__ (line 10) | def __init__(self, paidUser, destructorHook = None, doneFunc = None):
    method setOK (line 19) | def setOK(self, handler):
    method setCancel (line 22) | def setCancel(self, handler):
    method show (line 25) | def show(self):
    method hide (line 53) | def hide(self):
    method destroy (line 56) | def destroy(self):
    method removed (line 68) | def removed(self):
    method __handleLeaveToPayOK (line 74) | def __handleLeaveToPayOK(self):
    method __handleLeaveToPayCancel (line 92) | def __handleLeaveToPayCancel(self):

FILE: otp/login/LoginAstronAccount.py
  class LoginAstronAccount (line 6) | class LoginAstronAccount(LoginBase):
    method __init__ (line 9) | def __init__(self, cr):
    method authorize (line 12) | def authorize(self, username, password):
    method sendLoginMsg (line 15) | def sendLoginMsg(self):
    method supportsRelogin (line 22) | def supportsRelogin(self):
    method supportsAuthenticateDelete (line 27) | def supportsAuthenticateDelete(self):

FILE: otp/login/LoginBase.py
  class LoginBase (line 3) | class LoginBase:
    method __init__ (line 6) | def __init__(self, cr):
    method sendLoginMsg (line 9) | def sendLoginMsg(self, loginName, password, createFlag):
    method getErrorCode (line 12) | def getErrorCode(self):
    method needToSetParentPassword (line 15) | def needToSetParentPassword(self):

FILE: otp/login/LoginDISLTokenAccount.py
  class LoginDISLTokenAccount (line 7) | class LoginDISLTokenAccount(LoginBase.LoginBase):
    method __init__ (line 9) | def __init__(self, cr):
    method supportsRelogin (line 12) | def supportsRelogin(self):
    method authorize (line 15) | def authorize(self, loginName, password):
    method sendLoginMsg (line 19) | def sendLoginMsg(self):
    method supportsParentPassword (line 31) | def supportsParentPassword(self):
    method supportsAuthenticateDelete (line 34) | def supportsAuthenticateDelete(self):

FILE: otp/login/LoginGSAccount.py
  class LoginGSAccount (line 7) | class LoginGSAccount(LoginBase.LoginBase):
    method __init__ (line 9) | def __init__(self, cr):
    method createAccount (line 12) | def createAccount(self, loginName, password, data):
    method authorize (line 20) | def authorize(self, loginName, password):
    method supportsRelogin (line 28) | def supportsRelogin(self):
    method sendLoginMsg (line 31) | def sendLoginMsg(self):
    method resendPlayToken (line 55) | def resendPlayToken(self):
    method requestPwdReminder (line 58) | def requestPwdReminder(self, email = None, acctName = None):
    method getAccountData (line 61) | def getAccountData(self, loginName, password):
    method supportsParentPassword (line 64) | def supportsParentPassword(self):
    method authenticateParentPassword (line 67) | def authenticateParentPassword(self, loginName, password, parentPasswo...
    method authenticateParentUsernameAndPassword (line 70) | def authenticateParentUsernameAndPassword(self, loginName, password, p...
    method supportsAuthenticateDelete (line 73) | def supportsAuthenticateDelete(self):
    method authenticateDelete (line 76) | def authenticateDelete(self, loginName, password):
    method enableSecretFriends (line 79) | def enableSecretFriends(self, loginName, password, parentPassword, ena...

FILE: otp/login/LoginGoAccount.py
  class LoginGoAccount (line 7) | class LoginGoAccount(LoginBase.LoginBase):
    method __init__ (line 9) | def __init__(self, cr):
    method createAccount (line 12) | def createAccount(self, loginName, password, data):
    method authorize (line 15) | def authorize(self, loginName, password):
    method supportsRelogin (line 20) | def supportsRelogin(self):
    method sendLoginMsg (line 23) | def sendLoginMsg(self):
    method resendPlayToken (line 35) | def resendPlayToken(self):
    method requestPwdReminder (line 38) | def requestPwdReminder(self, email = None, acctName = None):
    method getAccountData (line 41) | def getAccountData(self, loginName, password):
    method supportsParentPassword (line 44) | def supportsParentPassword(self):
    method authenticateParentPassword (line 47) | def authenticateParentPassword(self, loginName, password, parentPasswo...
    method supportsAuthenticateDelete (line 50) | def supportsAuthenticateDelete(self):
    method enableSecretFriends (line 53) | def enableSecretFriends(self, loginName, password, parentPassword, ena...
    method __addTokenType (line 56) | def __addTokenType(self, datagram):

FILE: otp/login/LoginScreen.py
  class LoginScreen (line 18) | class LoginScreen(StateData.StateData, GuiScreen.GuiScreen):
    method __init__ (line 25) | def __init__(self, cr, doneEvent):
    method load (line 40) | def load(self):
    method unload (line 81) | def unload(self):
    method enter (line 101) | def enter(self):
    method exit (line 121) | def exit(self):
    method enterOff (line 126) | def enterOff(self):
    method exitOff (line 129) | def exitOff(self):
    method enterLogin (line 132) | def enterLogin(self):
    method exitLogin (line 150) | def exitLogin(self):
    method enterShowLoginFailDialog (line 153) | def enterShowLoginFailDialog(self, msg):
    method __handleFailTryAgain (line 158) | def __handleFailTryAgain(self):
    method __handleFailCreateAccount (line 161) | def __handleFailCreateAccount(self):
    method __handleFailNoNewAccountsAck (line 164) | def __handleFailNoNewAccountsAck(self):
    method exitShowLoginFailDialog (line 168) | def exitShowLoginFailDialog(self):
    method __handleLoginPassword (line 172) | def __handleLoginPassword(self, password):
    method __handleLoginButton (line 177) | def __handleLoginButton(self):
    method __handleQuit (line 188) | def __handleQuit(self):
    method __handleCreateAccount (line 192) | def __handleCreateAccount(self):
    method enterWaitForLoginResponse (line 196) | def enterWaitForLoginResponse(self):
    method exitWaitForLoginResponse (line 213) | def exitWaitForLoginResponse(self):
    method enterShowConnectionProblemDialog (line 218) | def enterShowConnectionProblemDialog(self, msg):
    method __handleConnectionProblemAck (line 223) | def __handleConnectionProblemAck(self):
    method exitShowConnectionProblemDialog (line 227) | def exitShowConnectionProblemDialog(self):
    method handleWaitForLoginResponse (line 231) | def handleWaitForLoginResponse(self, msgType, di):
    method handleWaitForLoginResponse (line 243) | def handleWaitForLoginResponse(self, msgType, di):
    method handleHelloResp (line 249) | def handleHelloResp(self):
    method getExtendedErrorMsg (line 253) | def getExtendedErrorMsg(self, errorString):
    method handleLoginResponseMsg3 (line 261) | def handleLoginResponseMsg3(self, di):
    method handleLoginResponseMsg2 (line 327) | def handleLoginResponseMsg2(self, di):
    method handleLoginResponseMsg (line 406) | def handleLoginResponseMsg(self, di):
    method __handleLoginSuccess (line 462) | def __handleLoginSuccess(self):
    method __handleEnterLoginAck (line 474) | def __handleEnterLoginAck(self):
    method __handleNoNewAccountsAck (line 478) | def __handleNoNewAccountsAck(self):
    method parseAccountDays (line 482) | def parseAccountDays(self, accountDays):
    method handleLoginToontownResponse (line 492) | def handleLoginToontownResponse(self, di):
    method handleLoginToontownResponse (line 572) | def handleLoginToontownResponse(self, responseBlob):

FILE: otp/login/LoginTTAccount.py
  class LoginTTAccount (line 7) | class LoginTTAccount(LoginBase.LoginBase):
    method __init__ (line 10) | def __init__(self, cr):
    method supportsRelogin (line 15) | def supportsRelogin(self):
    method sendLoginMsg (line 18) | def sendLoginMsg(self):
    method resendPlayToken (line 38) | def resendPlayToken(self):
    method __addPlayToken (line 46) | def __addPlayToken(self, datagram):
    method __addTokenType (line 50) | def __addTokenType(self, datagram):
    method getErrorCode (line 58) | def getErrorCode(self):
    method needToSetParentPassword (line 61) | def needToSetParentPassword(self):
    method authenticateParentPassword (line 64) | def authenticateParentPassword(self, loginName, password, parentPasswo...
    method authenticateDelete (line 67) | def authenticateDelete(self, loginName, password):

FILE: otp/login/LoginTTSpecificDevAccount.py
  class LoginTTSpecificDevAccount (line 7) | class LoginTTSpecificDevAccount(LoginTTAccount.LoginTTAccount):
    method __init__ (line 10) | def __init__(self, cr):
    method createAccount (line 13) | def createAccount(self, loginName, password, data):
    method authorize (line 21) | def authorize(self, loginName, password):
    method supportsRelogin (line 29) | def supportsRelogin(self):
    method sendLoginMsg (line 32) | def sendLoginMsg(self):
    method resendPlayToken (line 95) | def resendPlayToken(self):
    method requestPwdReminder (line 98) | def requestPwdReminder(self, email = None, acctName = None):
    method getAccountData (line 101) | def getAccountData(self, loginName, password):
    method supportsParentPassword (line 104) | def supportsParentPassword(self):
    method supportsAuthenticateDelete (line 107) | def supportsAuthenticateDelete(self):
    method enableSecretFriends (line 110) | def enableSecretFriends(self, loginName, password, parentPassword, ena...
    method needToSetParentPassword (line 113) | def needToSetParentPassword(self):

FILE: otp/login/LoginWebPlayTokenAccount.py
  class LoginWebPlayTokenAccount (line 5) | class LoginWebPlayTokenAccount(LoginTTAccount.LoginTTAccount):
    method supportsRelogin (line 8) | def supportsRelogin(self):
    method createAccount (line 11) | def createAccount(self, loginName, password, data):
    method authorize (line 14) | def authorize(self, loginName, password):
    method createBilling (line 20) | def createBilling(self, loginName, password, data):
    method setParentPassword (line 23) | def setParentPassword(self, loginName, password, parentPassword):
    method supportsParentPassword (line 26) | def supportsParentPassword(self):
    method changePassword (line 29) | def changePassword(self, loginName, password, newPassword):
    method requestPwdReminder (line 32) | def requestPwdReminder(self, email = None, acctName = None):
    method cancelAccount (line 35) | def cancelAccount(self, loginName, password):
    method getAccountData (line 38) | def getAccountData(self, loginName, password):
    method getErrorCode (line 41) | def getErrorCode(self):
    method needToSetParentPassword (line 46) | def needToSetParentPassword(self):

FILE: otp/login/MultiPageTextFrame.py
  class MultiPageTextFrame (line 5) | class MultiPageTextFrame(DirectFrame):
    method __init__ (line 9) | def __init__(self, textList, width = defWidth, height = defHeight, wor...
    method setPageChangeCallback (line 44) | def setPageChangeCallback(self, callback):
    method setPage (line 48) | def setPage(self, pageNum):
    method getCurPage (line 68) | def getCurPage(self):
    method turnPage (line 71) | def turnPage(self, delta):
    method acceptAgreementKeypresses (line 74) | def acceptAgreementKeypresses(self):
    method ignoreAgreementKeypresses (line 78) | def ignoreAgreementKeypresses(self):

FILE: otp/login/PrivacyPolicyPanel.py
  class PrivacyPolicyTextPanel (line 9) | class PrivacyPolicyTextPanel(getGlobalDialogClass()):
    method __init__ (line 12) | def __init__(self, doneEvent, hidePageNum = 0, pageChangeCallback = No...
  class PrivacyPolicyPanel (line 23) | class PrivacyPolicyPanel(getGlobalDialogClass()):
    method __init__ (line 26) | def __init__(self, doneEvent, hidePageNum = 0, pageChangeCallback = No...
    method delete (line 52) | def delete(self):
    method __handlePrivacyPolicy (line 60) | def __handlePrivacyPolicy(self, state, *oooo):
    method __privacyPolicyTextDone (line 63) | def __privacyPolicyTextDone(self):
    method enterPrivacyPolicy (line 66) | def enterPrivacyPolicy(self, textList):
    method exitPrivacyPolicy (line 73) | def exitPrivacyPolicy(self):
    method enterVersion1Adult (line 80) | def enterVersion1Adult(self):
    method enterVersion1Kids (line 83) | def enterVersion1Kids(self):
    method enterVersion2Adult (line 86) | def enterVersion2Adult(self):
    method enterVersion2Kids (line 89) | def enterVersion2Kids(self):
    method enterOff (line 92) | def enterOff(self):
    method exitOff (line 96) | def exitOff(self):

FILE: otp/login/SecretFriendsInfoPanel.py
  class SecretFriendsInfoPanel (line 8) | class SecretFriendsInfoPanel(getGlobalDialogClass()):
    method __init__ (line 10) | def __init__(self, doneEvent, hidePageNum = 0, pageChangeCallback = No...

FILE: otp/movement/Impulse.py
  class Impulse (line 4) | class Impulse(DirectObject.DirectObject):
    method __init__ (line 6) | def __init__(self):
    method destroy (line 11) | def destroy(self):
    method _process (line 14) | def _process(self, dt):
    method _setMover (line 17) | def _setMover(self, mover):
    method _clearMover (line 22) | def _clearMover(self, mover):
    method isCpp (line 28) | def isCpp(self):

FILE: otp/movement/Mover.py
  class Mover (line 8) | class Mover(CMover):
    method __init__ (line 17) | def __init__(self, objNodePath, fwdSpeed = 1, rotSpeed = 1):
    method destroy (line 28) | def destroy(self):
    method addImpulse (line 33) | def addImpulse(self, name, impulse):
    method removeImpulse (line 40) | def removeImpulse(self, name):
    method getCollisionEventName (line 48) | def getCollisionEventName(self):
    method move (line 51) | def move(self, dt = -1, profile = 0):

FILE: otp/movement/PyVec3.py
  class PyVec3 (line 5) | class PyVec3:
    method __init__ (line 9) | def __init__(self, *args):
    method assign (line 12) | def assign(self, *args):
    method getX (line 35) | def getX(self):
    method getY (line 38) | def getY(self):
    method getZ (line 41) | def getZ(self):
    method setX (line 44) | def setX(self, x):
    method setY (line 47) | def setY(self, y):
    method setZ (line 50) | def setZ(self, z):
    method set (line 53) | def set(self, x, y, z):
    method fill (line 58) | def fill(self, s):
    method length (line 61) | def length(self):
    method lengthSquared (line 64) | def lengthSquared(self):
    method normalize (line 67) | def normalize(self):
    method dot (line 70) | def dot(self, other):
    method _crossResults (line 73) | def _crossResults(self, other):
    method cross (line 76) | def cross(self, other):
    method crossInto (line 79) | def crossInto(self, other):
    method __lt__ (line 82) | def __lt__(a, b):
    method __le__ (line 85) | def __le__(a, b):
    method __eq__ (line 88) | def __eq__(a, b):
    method __ne__ (line 91) | def __ne__(a, b):
    method __ge__ (line 94) | def __ge__(a, b):
    method __gt__ (line 97) | def __gt__(a, b):
    method __add__ (line 100) | def __add__(a, b):
    method __sub__ (line 103) | def __sub__(a, b):
    method __mul__ (line 106) | def __mul__(a, s):
    method __div__ (line 109) | def __div__(a, s):
    method __iadd__ (line 112) | def __iadd__(self, other):
    method __isub__ (line 118) | def __isub__(self, other):
    method __imul__ (line 124) | def __imul__(self, s):
    method __idiv__ (line 130) | def __idiv__(self, s):
    method addX (line 136) | def addX(self, s):
    method addY (line 139) | def addY(self, s):
    method addZ (line 142) | def addZ(self, s):
    method eq (line 145) | def eq(self, other):
    method lessThan (line 148) | def lessThan(self, other):
    method ne (line 151) | def ne(self, other):
    method __getitem__ (line 154) | def __getitem__(self, i):
    method __setitem__ (line 164) | def __setitem__(self, i, s):
    method __repr__ (line 174) | def __repr__(self):

FILE: otp/namepanel/NameCheck.py
  function filterString (line 8) | def filterString(str, filter):
  function justLetters (line 17) | def justLetters(str):
  function justUpper (line 26) | def justUpper(str):
  function wordList (line 36) | def wordList(str):
  function checkName (line 48) | def checkName(name, otherCheckFuncs = [], font = None):

FILE: otp/namepanel/NameTumbler.py
  class NameTumbler (line 9) | class NameTumbler(DirectFrame):
    method __init__ (line 11) | def __init__(self, nameList, category):
    method loadTumblerGUI (line 23) | def loadTumblerGUI(self):
    method unloadTumblerGUI (line 38) | def unloadTumblerGUI(self):
    method toggleTumbler (line 47) | def toggleTumbler(self, value):
    method listsChanged (line 62) | def listsChanged(self):
    method updateLists (line 67) | def updateLists(self):
    method updateCheckBoxes (line 71) | def updateCheckBoxes(self):
    method nameClickedOn (line 79) | def nameClickedOn(self, index):
    method activateTumbler (line 84) | def activateTumbler(self):
    method deactivateTumbler (line 89) | def deactivateTumbler(self):
    method getName (line 94) | def getName(self):
    method makeLabel (line 101) | def makeLabel(self, te, index, others):
    method makeScrollList (line 113) | def makeScrollList(self, nitems, nitemMakeFunction, nitemMakeExtraArgs):
    method makeCheckBox (line 128) | def makeCheckBox(self, npos, ntex, ntexcolor, comm):
    method makeHighlight (line 133) | def makeHighlight(self, npos):
    method getRandomResult (line 139) | def getRandomResult(self):

FILE: otp/namepanel/PickANamePattern.py
  class PickANamePattern (line 3) | class PickANamePattern:
    method __init__ (line 5) | def __init__(self, nameStr, gender):
    method hasNamePattern (line 9) | def hasNamePattern(self):
    method getNamePattern (line 12) | def getNamePattern(self):
    method getNameString (line 15) | def getNameString(self, pattern, gender):
    method getNamePartString (line 30) | def getNamePartString(self, gender, patternIndex, partIndex):
    method _genWordListSplitPermutations (line 35) | def _genWordListSplitPermutations(self, words):
    method _genNameSplitPermutations (line 48) | def _genNameSplitPermutations(self, name):
    method _compute (line 52) | def _compute(self, nameStr, gender):
    method _computeWithNameParts (line 55) | def _computeWithNameParts(self, nameStr, nameParts):
    method _getNameParts (line 63) | def _getNameParts(self, gender):
    method _recursiveCompute (line 66) | def _recursiveCompute(self, words, nameParts, wi = 0, nwli = 0, patter...
  class PickANamePatternTwoPartLastName (line 83) | class PickANamePatternTwoPartLastName(PickANamePattern):
    method getNameString (line 85) | def getNameString(self, pattern, gender):
    method _getLastNameCapPrefixes (line 104) | def _getLastNameCapPrefixes(self):
    method _compute (line 107) | def _compute(self, nameStr, gender):

FILE: otp/otpbase/OTPBase.py
  class OTPBase (line 8) | class OTPBase(ShowBase):
    method __init__ (line 10) | def __init__(self, windowType = None):
    method setTaskChainNetThreaded (line 45) | def setTaskChainNetThreaded(self):
    method setTaskChainNetNonthreaded (line 49) | def setTaskChainNetNonthreaded(self):
    method toggleStereo (line 52) | def toggleStereo(self):
    method setupEnviroCamera (line 72) | def setupEnviroCamera(self):
    method setupAutoPixelZoom (line 116) | def setupAutoPixelZoom(self):
    method enablePixelZoom (line 142) | def enablePixelZoom(self, flag):
    method __chasePixelZoom (line 152) | def __chasePixelZoom(self, task):
    method getShardPopLimits (line 178) | def getShardPopLimits(self):
    method setLocationCode (line 181) | def setLocationCode(self, locationCode):
    method delayedErrorCheck (line 186) | def delayedErrorCheck(self, task):
    method loaderPhaseChecker (line 193) | def loaderPhaseChecker(self, path, loaderOptions):
    method getRepository (line 224) | def getRepository(self):
    method openMainWindow (line 227) | def openMainWindow(self, *args, **kw):
    method isMainWindowOpen (line 234) | def isMainWindowOpen(self):

FILE: otp/otpbase/OTPGlobals.py
  function getInterfaceFont (line 80) | def getInterfaceFont():
  function setInterfaceFont (line 91) | def setInterfaceFont(path):
  function getSignFont (line 99) | def getSignFont():
  function setSignFont (line 111) | def setSignFont(path):
  function getFancyFont (line 116) | def getFancyFont():
  function setFancyFont (line 128) | def setFancyFont(path):
  function getNametagFont (line 133) | def getNametagFont(index):
  function setNametagFont (line 145) | def setNametagFont(index, path):
  function getDialogClass (line 149) | def getDialogClass():
  function getGlobalDialogClass (line 157) | def getGlobalDialogClass():
  function setDialogClasses (line 165) | def setDialogClasses(dialogClass, globalDialogClass):
  function getDefaultProductPrefix (line 172) | def getDefaultProductPrefix():
  function setDefaultProductPrefix (line 177) | def setDefaultProductPrefix(prefix):

FILE: otp/otpbase/OTPLocalizer.py
  function getLanguage (line 6) | def getLanguage():

FILE: otp/otpbase/OTPLocalizerEnglish.py
  function timeElapsedString (line 2878) | def timeElapsedString(timeDelta):

FILE: otp/otpbase/OTPRender.py
  function setCameraBitmask (line 9) | def setCameraBitmask(default, node_path, camera_bitmask, tag = None, tag...
  function renderReflection (line 20) | def renderReflection(default, node_path, tag = None, tag_function = None...
  function renderShadow (line 24) | def renderShadow(default, node_path, tag = None, tag_function = None, co...
  function renderSkyReflection (line 28) | def renderSkyReflection(default, node_path, tag = None, tag_function = N...
  function renderGlow (line 32) | def renderGlow(default, node_path, tag = None, tag_function = None, cont...
  function setAdditiveEffect (line 36) | def setAdditiveEffect(node_path, tag = None, bin_name = None, lighting_o...

FILE: otp/otpbase/OTPTimer.py
  class OTPTimer (line 7) | class OTPTimer(DirectFrame):
    method __init__ (line 11) | def __init__(self, useImage = True, highlightNearEnd = True):
    method setFontColor (line 27) | def setFontColor(self, vColor):
    method getImage (line 30) | def getImage(self):
    method posInTopRightCorner (line 37) | def posInTopRightCorner(self):
    method posBelowTopRightCorner (line 40) | def posBelowTopRightCorner(self):
    method posAboveShtikerBook (line 43) | def posAboveShtikerBook(self):
    method setTime (line 46) | def setTime(self, time):
    method setTimeStr (line 63) | def setTimeStr(self, timeStr, scale = 0.2, pos = (-0.01, -0.08), fg = ...
    method getElapsedTime (line 70) | def getElapsedTime(self):
    method _timerTask (line 73) | def _timerTask(self, task):
    method countdown (line 85) | def countdown(self, duration, callback = None):
    method timerExpired (line 92) | def timerExpired(self):
    method stop (line 95) | def stop(self):
    method reset (line 99) | def reset(self):
    method destroy (line 105) | def destroy(self):
    method cleanup (line 111) | def cleanup(self):

FILE: otp/otpbase/ObjectCount.py
  class ObjectCount (line 4) | class ObjectCount(Job):
    method __init__ (line 6) | def __init__(self, name, immediate=False, doneCallback=None):
    method destroy (line 13) | def destroy(self):
    method finished (line 17) | def finished(self):
    method run (line 22) | def run(self):

FILE: otp/otpbase/PythonUtil.py
  function enumerate (line 10) | def enumerate(L):
  function nonRepeatingRandomList (line 26) | def nonRepeatingRandomList(vals, max):
  function recordCreationStack (line 40) | def recordCreationStack(cls):
  function recordFunctorCreationStacks (line 60) | def recordFunctorCreationStacks():
  function describeException (line 71) | def describeException(backTrace = 4):
  function pdir (line 121) | def pdir(obj, str = None, width = None,
  function lerp (line 136) | def lerp(v0, v1, t):
  function triglerp (line 143) | def triglerp(v0, v1, t):
  function choice (line 151) | def choice(condition, ifTrue, ifFalse):
  function quantize (line 158) | def quantize(value, divisor):
  function quantizeVec (line 162) | def quantizeVec(vec, divisor):
  function isClient (line 168) | def isClient():
  function cmp (line 173) | def cmp(a, b):

FILE: otp/otpgui/OTPDialog.py
  class OTPDialog (line 13) | class OTPDialog(DirectDialog):
    method __init__ (line 15) | def __init__(self, parent = None, style = NoButtons, **kw):
  class GlobalDialog (line 81) | class GlobalDialog(OTPDialog):
    method __init__ (line 84) | def __init__(self, message = '', doneEvent = None, style = NoButtons, ...
    method handleButton (line 107) | def handleButton(self, value):

FILE: otp/settings/Settings.py
  class Settings (line 5) | class Settings:
    method __init__ (line 7) | def __init__(self):
    method doSavedSettingsExist (line 11) | def doSavedSettingsExist(self):
    method readSettings (line 14) | def readSettings(self):
    method writeSettings (line 25) | def writeSettings(self):
    method updateSetting (line 29) | def updateSetting(self, setting, value):
    method getSetting (line 32) | def getSetting(self, setting, default=None):

FILE: otp/snapshot/SnapshotDispatcher.py
  class SnapshotDispatcher (line 4) | class SnapshotDispatcher(DistributedObjectGlobal):

FILE: otp/snapshot/SnapshotDispatcherAI.py
  class SnapshotDispatcherAI (line 4) | class SnapshotDispatcherAI(DistributedObjectAI):

FILE: otp/snapshot/SnapshotDispatcherUD.py
  class SnapshotDispatcherUD (line 4) | class SnapshotDispatcherUD(DistributedObjectUD):

FILE: otp/snapshot/SnapshotRenderer.py
  class SnapshotRenderer (line 4) | class SnapshotRenderer(DistributedObjectGlobal):

FILE: otp/snapshot/SnapshotRendererAI.py
  class SnapshotRendererAI (line 4) | class SnapshotRendererAI(DistributedObjectAI):

FILE: otp/snapshot/SnapshotRendererUD.py
  class SnapshotRendererUD (line 4) | class SnapshotRendererUD(DistributedObjectUD):

FILE: otp/speedchat/ColorSpace.py
  function rgb2hsv (line 3) | def rgb2hsv(r, g, b):
  function hsv2rgb (line 26) | def hsv2rgb(h, s, v):
  function rgb2yuv (line 50) | def rgb2yuv(r, g, b):
  function yuv2rgb (line 57) | def yuv2rgb(y, u, v):

FILE: otp/speedchat/SCColorScheme.py
  class SCColorScheme (line 3) | class SCColorScheme:
    method __init__ (line 5) | def __init__(self, arrowColor = (0.5, 0.5, 1), rolloverColor = (0.53, ...
    method getArrowColor (line 38) | def getArrowColor(self):
    method getRolloverColor (line 41) | def getRolloverColor(self):
    method getFrameColor (line 44) | def getFrameColor(self):
    method getPressedColor (line 47) | def getPressedColor(self):
    method getMenuHolderActiveColor (line 50) | def getMenuHolderActiveColor(self):
    method getEmoteIconColor (line 53) | def getEmoteIconColor(self):
    method getTextColor (line 56) | def getTextColor(self):
    method getEmoteIconDisabledColor (line 59) | def getEmoteIconDisabledColor(self):
    method getTextDisabledColor (line 62) | def getTextDisabledColor(self):
    method getAlpha (line 65) | def getAlpha(self):
    method __str__ (line 68) | def __str__(self):
    method __repr__ (line 78) | def __repr__(self):

FILE: otp/speedchat/SCCustomMenu.py
  class SCCustomMenu (line 5) | class SCCustomMenu(SCMenu):
    method __init__ (line 7) | def __init__(self):
    method destroy (line 12) | def destroy(self):
    method __customMessagesChanged (line 15) | def __customMessagesChanged(self):

FILE: otp/speedchat/SCCustomTerminal.py
  function decodeSCCustomMsg (line 5) | def decodeSCCustomMsg(textId):
  class SCCustomTerminal (line 9) | class SCCustomTerminal(SCTerminal):
    method __init__ (line 11) | def __init__(self, textId):
    method handleSelect (line 16) | def handleSelect(self):

FILE: otp/speedchat/SCElement.py
  class SCElement (line 9) | class SCElement(SCObject, NodePath):
    method __init__ (line 13) | def __init__(self, parentMenu = None):
    method destroy (line 29) | def destroy(self):
    method setParentMenu (line 40) | def setParentMenu(self, parentMenu):
    method getParentMenu (line 43) | def getParentMenu(self):
    method getDisplayText (line 46) | def getDisplayText(self):
    method onMouseEnter (line 49) | def onMouseEnter(self, event):
    method onMouseLeave (line 54) | def onMouseLeave(self, event):
    method onMouseClick (line 59) | def onMouseClick(self, event):
    method enterActive (line 62) | def enterActive(self):
    method exitActive (line 65) | def exitActive(self):
    method isActive (line 68) | def isActive(self):
    method hasStickyFocus (line 71) | def hasStickyFocus(self):
    method setViewable (line 74) | def setViewable(self, viewable):
    method isViewable (line 81) | def isViewable(self):
    method getMinDimensions (line 84) | def getMinDimensions(self):
    method setDimensions (line 94) | def setDimensions(self, width, height):
    method invalidate (line 100) | def invalidate(self):
    method enterVisible (line 108) | def enterVisible(self):
    method exitVisible (line 112) | def exitVisible(self):
    method privScheduleFinalize (line 116) | def privScheduleFinalize(self):
    method privCancelFinalize (line 128) | def privCancelFinalize(self):
    method finalize (line 131) | def finalize(self, dbArgs = {}):
    method __str__ (line 173) | def __str__(self):

FILE: otp/speedchat/SCEmoteMenu.py
  class SCEmoteMenu (line 4) | class SCEmoteMenu(SCMenu):
    method __init__ (line 6) | def __init__(self):
    method destroy (line 11) | def destroy(self):
    method __emoteAccessChanged (line 14) | def __emoteAccessChanged(self):

FILE: otp/speedchat/SCEmoteTerminal.py
  function decodeSCEmoteWhisperMsg (line 8) | def decodeSCEmoteWhisperMsg(emoteId, avName):
  class SCEmoteTerminal (line 14) | class SCEmoteTerminal(SCTerminal):
    method __init__ (line 16) | def __init__(self, emoteId):
    method __ltHasAccess (line 24) | def __ltHasAccess(self):
    method __emoteEnabled (line 31) | def __emoteEnabled(self):
    method finalize (line 36) | def finalize(self, dbArgs = {}):
    method __emoteEnableStateChanged (line 54) | def __emoteEnableStateChanged(self):
    method enterVisible (line 79) | def enterVisible(self):
    method exitVisible (line 88) | def exitVisible(self):
    method handleSelect (line 92) | def handleSelect(self):

FILE: otp/speedchat/SCGMTextTerminal.py
  class SCGMTextTerminal (line 5) | class SCGMTextTerminal(SCTerminal):
    method __init__ (line 7) | def __init__(self, textId):
    method handleSelect (line 13) | def handleSelect(self):

FILE: otp/speedchat/SCMenu.py
  class SCMenu (line 9) | class SCMenu(SCObject, NodePath):
    method __init__ (line 17) | def __init__(self, holder = None):
    method destroy (line 57) | def destroy(self):
    method clearMenu (line 80) | def clearMenu(self):
    method rebuildFromStructure (line 86) | def rebuildFromStructure(self, structure, title = None):
    method appendFromStructure (line 94) | def appendFromStructure(self, structure):
    method fadeFunc (line 136) | def fadeFunc(self, t):
    method stopFade (line 140) | def stopFade(self):
    method enterVisible (line 146) | def enterVisible(self):
    method exitVisible (line 172) | def exitVisible(self):
    method setHolder (line 184) | def setHolder(self, holder):
    method getHolder (line 187) | def getHolder(self):
    method isTopLevel (line 190) | def isTopLevel(self):
    method memberSelected (line 193) | def memberSelected(self, member):
    method __setActiveMember (line 197) | def __setActiveMember(self, member):
    method memberGainedInputFocus (line 208) | def memberGainedInputFocus(self, member):
    method __cancelActiveMemberSwitch (line 229) | def __cancelActiveMemberSwitch(self):
    method memberLostInputFocus (line 234) | def memberLostInputFocus(self, member):
    method memberViewabilityChanged (line 243) | def memberViewabilityChanged(self, member):
    method invalidate (line 246) | def invalidate(self):
    method privScheduleFinalize (line 251) | def privScheduleFinalize(self):
    method privCancelFinalize (line 260) | def privCancelFinalize(self):
    method isFinalizing (line 263) | def isFinalizing(self):
    method finalize (line 266) | def finalize(self):
    method append (line 347) | def append(self, element):
    method extend (line 353) | def extend(self, elements):
    method index (line 356) | def index(self, element):
    method __len__ (line 359) | def __len__(self):
    method __getitem__ (line 362) | def __getitem__(self, index):
    method __setitem__ (line 369) | def __setitem__(self, index, value):
    method __delitem__ (line 381) | def __delitem__(self, index):
    method __iadd__ (line 393) | def __iadd__(self, other):
    method privMemberListChanged (line 404) | def privMemberListChanged(self, added = None, removed = None):
    method privSetSettingsRef (line 428) | def privSetSettingsRef(self, settingsRef):
    method invalidateAll (line 433) | def invalidateAll(self):
    method finalizeAll (line 438) | def finalizeAll(self):
    method getWidth (line 443) | def getWidth(self):
    method __str__ (line 446) | def __str__(self):

FILE: otp/speedchat/SCMenuHolder.py
  class SCMenuHolder (line 8) | class SCMenuHolder(SCElement):
    method __init__ (line 17) | def __init__(self, title, menu = None):
    method destroy (line 26) | def destroy(self):
    method setTitle (line 33) | def setTitle(self, title):
    method getTitle (line 37) | def getTitle(self):
    method setMenu (line 40) | def setMenu(self, menu):
    method getMenu (line 52) | def getMenu(self):
    method showMenu (line 55) | def showMenu(self):
    method hideMenu (line 63) | def hideMenu(self):
    method getMenuOverlap (line 69) | def getMenuOverlap(self):
    method getMenuOffset (line 75) | def getMenuOffset(self):
    method onMouseClick (line 79) | def onMouseClick(self, event):
    method enterActive (line 83) | def enterActive(self):
    method exitActive (line 94) | def exitActive(self):
    method getDisplayText (line 100) | def getDisplayText(self):
    method updateViewability (line 103) | def updateViewability(self):
    method getMinSubmenuWidth (line 116) | def getMinSubmenuWidth(self):
    method getMinDimensions (line 124) | def getMinDimensions(self):
    method invalidate (line 129) | def invalidate(self):
    method finalize (line 135) | def finalize(self, dbArgs = {}):
    method hasStickyFocus (line 159) | def hasStickyFocus(self):
    method privSetSettingsRef (line 162) | def privSetSettingsRef(self, settingsRef):
    method invalidateAll (line 168) | def invalidateAll(self):
    method finalizeAll (line 174) | def finalizeAll(self):

FILE: otp/speedchat/SCObject.py
  class SCObject (line 4) | class SCObject(DirectObject):
    method __init__ (line 7) | def __init__(self):
    method destroy (line 13) | def destroy(self):
    method enterVisible (line 18) | def enterVisible(self):
    method exitVisible (line 21) | def exitVisible(self):
    method isVisible (line 24) | def isVisible(self):
    method invalidate (line 27) | def invalidate(self):
    method isDirty (line 30) | def isDirty(self):
    method validate (line 33) | def validate(self):
    method finalize (line 36) | def finalize(self):
    method getEventName (line 39) | def getEventName(self, name):
    method getColorScheme (line 42) | def getColorScheme(self):
    method isWhispering (line 45) | def isWhispering(self):
    method getSubmenuOverlap (line 48) | def getSubmenuOverlap(self):
    method getTopLevelOverlap (line 51) | def getTopLevelOverlap(self):
    method privSetSettingsRef (line 58) | def privSetSettingsRef(self, settingsRef):
    method privAdoptSCObject (line 61) | def privAdoptSCObject(self, scObj):
    method invalidateAll (line 64) | def invalidateAll(self):
    method finalizeAll (line 67) | def finalizeAll(self):

FILE: otp/speedchat/SCSettings.py
  class SCSettings (line 4) | class SCSettings:
    method __init__ (line 6) | def __init__(self, eventPrefix, whisperMode = 0, colorScheme = None, s...

FILE: otp/speedchat/SCStaticTextTerminal.py
  function decodeSCStaticTextMsg (line 5) | def decodeSCStaticTextMsg(textId):
  class SCStaticTextTerminal (line 9) | class SCStaticTextTerminal(SCTerminal):
    method __init__ (line 11) | def __init__(self, textId):
    method handleSelect (line 16) | def handleSelect(self):

FILE: otp/speedchat/SCTerminal.py
  class SCTerminal (line 11) | class SCTerminal(SCElement):
    method __init__ (line 13) | def __init__(self, linkedEmote = None):
    method destroy (line 24) | def destroy(self):
    method privSetSettingsRef (line 31) | def privSetSettingsRef(self, settingsRef):
    method _handleWhisperModeSVChanged (line 39) | def _handleWhisperModeSVChanged(self, handleWhisperMode):
    method _handleWhisperModeChange (line 48) | def _handleWhisperModeChange(self, whisperMode):
    method handleSelect (line 51) | def handleSelect(self):
    method isWhisperable (line 56) | def isWhisperable(self):
    method getLinkedEmote (line 59) | def getLinkedEmote(self):
    method setLinkedEmote (line 62) | def setLinkedEmote(self, linkedEmote):
    method hasLinkedEmote (line 66) | def hasLinkedEmote(self):
    method linkedEmoteEnabled (line 69) | def linkedEmoteEnabled(self):
    method getCharges (line 73) | def getCharges(self):
    method setCharges (line 76) | def setCharges(self, nCharges):
    method isDisabled (line 81) | def isDisabled(self):
    method setDisabled (line 84) | def setDisabled(self, bDisabled):
    method onMouseClick (line 87) | def onMouseClick(self, event):
    method getMinDimensions (line 92) | def getMinDimensions(self):
    method finalize (line 98) | def finalize(self, dbArgs = {}):
    method getEmoteIconColor (line 117) | def getEmoteIconColor(self):
    method updateEmoteIcon (line 127) | def updateEmoteIcon(self):
    method enterVisible (line 136) | def enterVisible(self):
    method exitVisible (line 158) | def exitVisible(self):
    method getDisplayText (line 164) | def getDisplayText(self):

FILE: otp/speedchat/SpeedChat.py
  class SpeedChat (line 7) | class SpeedChat(SCMenu):
    method __init__ (line 9) | def __init__(self, name = '', structure = None, backgroundModelName = ...
    method destroy (line 21) | def destroy(self):
    method __str__ (line 28) | def __str__(self):
    method enter (line 31) | def enter(self):
    method exit (line 35) | def exit(self):
    method _detectTransformChange (line 38) | def _detectTransformChange(self):
    method setWhisperMode (line 46) | def setWhisperMode(self, whisperMode):
    method setColorScheme (line 51) | def setColorScheme(self, colorScheme):
    method setSubmenuOverlap (line 55) | def setSubmenuOverlap(self, submenuOverlap):
    method setTopLevelOverlap (line 59) | def setTopLevelOverlap(self, topLevelOverlap):
    method finalizeAll (line 63) | def finalizeAll(self):

FILE: otp/speedchat/SpeedChatGMHandler.py
  class SpeedChatGMHandler (line 5) | class SpeedChatGMHandler(DirectObject.DirectObject):
    method __init__ (line 9) | def __init__(self):
    method generateSCStructure (line 14) | def generateSCStructure(self):
    method getStructure (line 43) | def getStructure(self):
    method getPhrase (line 46) | def getPhrase(self, id):

FILE: otp/status/StatusDatabase.py
  class StatusDatabase (line 7) | class StatusDatabase(DistributedObjectGlobal):
    method __init__ (line 10) | def __init__(self, cr):
    method requestOfflineAvatarStatus (line 18) | def requestOfflineAvatarStatus(self, avIds):
    method queueOfflineAvatarStatus (line 22) | def queueOfflineAvatarStatus(self, avIds):
    method requestAvatarQueue (line 32) | def requestAvatarQueue(self, task):
    method recvOfflineAvatarStatus (line 36) | def recvOfflineAvatarStatus(self, avId, lastOnline):
    method announceNewAvatarData (line 45) | def announceNewAvatarData(self, task):
    method lastOnlineString (line 48) | def lastOnlineString(self, timestamp):

FILE: otp/status/StatusDatabaseUD.py
  class StatusDatabaseUD (line 4) | class StatusDatabaseUD(DistributedObjectUD):

FILE: otp/uberdog/AccountDetailRecord.py
  class SubDetailRecord (line 3) | class SubDetailRecord:
    method __init__ (line 5) | def __init__(self):
    method __str__ (line 16) | def __str__(self):
  class AccountDetailRecord (line 31) | class AccountDetailRecord:
    method __init__ (line 33) | def __init__(self):
    method getMaxNumAvatars (line 50) | def getMaxNumAvatars(self, subId):
    method canOpenChatAndNotGetBooted (line 57) | def canOpenChatAndNotGetBooted(self):
    method __str__ (line 60) | def __str__(self):

FILE: otp/uberdog/DistributedChatManager.py
  class DistributedChatManager (line 6) | class DistributedChatManager(DistributedObjectGlobal):
    method __init__ (line 8) | def __init__(self, cr):
    method delete (line 12) | def delete(self):
    method online (line 19) | def online(self):
    method adminChat (line 22) | def adminChat(self, aboutId, message):
    method sendChatTo (line 26) | def sendChatTo(self, message, chatFlags):
    method chatFrom (line 29) | def chatFrom(self, fromId, message, chatFlags):
    method sendSpeedChatTo (line 32) | def sendSpeedChatTo(self, msgIndex):
    method speedChatFrom (line 35) | def speedChatFrom(self, fromId, msgIndex):
    method sendSpeedChatCustomTo (line 38) | def sendSpeedChatCustomTo(self, msgIndex):
    method speedChatCustomFrom (line 41) | def speedChatCustomFrom(self, fromId, msgIndex):
    method sendWhisperTo (line 44) | def sendWhisperTo(self, toId, message):
    method whisperFrom (line 47) | def whisperFrom(self, fromId, message):
    method sendWhisperSCTo (line 53) | def sendWhisperSCTo(self, toId, msgIndex):
    method whisperSCFrom (line 56) | def whisperSCFrom(self, fromId, msgIndex):
    method sendWhisperSCCustomTo (line 59) | def sendWhisperSCCustomTo(self, toId, msgIndex):
    method whisperSCCustomFrom (line 62) | def whisperSCCustomFrom(self, fromId, msgIndex):
    method sendWhisperSCEmoteTo (line 65) | def sendWhisperSCEmoteTo(self, toId, emoteId):
    method whisperSCEmoteFrom (line 68) | def whisperSCEmoteFrom(self, fromId, emoteId):
    method whisperIgnored (line 71) | def whisperIgnored(self, fromId):
    method sendCrewChatTo (line 74) | def sendCrewChatTo(self, message):
    method crewChatFrom (line 77) | def crewChatFrom(self, fromId, message):
    method sendGuildChatTo (line 80) | def sendGuildChatTo(self, message):
    method guildChatFrom (line 83) | def guildChatFrom(self, fromId, message):

FILE: otp/uberdog/DistributedChatManagerAI.py
  class DistributedChatManagerAI (line 4) | class DistributedChatManagerAI(DistributedObjectAI):

FILE: otp/uberdog/DistributedChatManagerUD.py
  class DistributedChatManagerUD (line 4) | class DistributedChatManagerUD(DistributedObjectUD):

FILE: otp/uberdog/OtpAvatarManager.py
  class OtpAvatarManager (line 6) | class OtpAvatarManager(DistributedObject.DistributedObject):
    method __init__ (line 10) | def __init__(self, cr):
    method delete (line 14) | def delete(self):
    method online (line 20) | def online(self):
    method sendRequestAvatarList (line 23) | def sendRequestAvatarList(self):
    method rejectAvatarList (line 26) | def rejectAvatarList(self, result):
    method avatarListResponse (line 29) | def avatarListResponse(self, pickleData):
    method rejectCreateAvatar (line 33) | def rejectCreateAvatar(self, result):
    method createAvatarResponse (line 36) | def createAvatarResponse(self, avatarId, subId, access, founder):
    method sendRequestRemoveAvatar (line 43) | def sendRequestRemoveAvatar(self, avatarId, subId, confirmPassword):
    method rejectRemoveAvatar (line 49) | def rejectRemoveAvatar(self, reasonId):
    method removeAvatarResponse (line 52) | def removeAvatarResponse(self, avatarId, subId):
    method sendRequestShareAvatar (line 55) | def sendRequestShareAvatar(self, avatarId, subId, shared):
    method rejectShareAvatar (line 61) | def rejectShareAvatar(self, reasonId):
    method shareAvatarResponse (line 64) | def shareAvatarResponse(self, avatarId, subId, shared):
    method sendRequestAvatarSlot (line 67) | def sendRequestAvatarSlot(self, subId, slot):
    method rejectAvatarSlot (line 70) | def rejectAvatarSlot(self, reasonId, subId, slot):
    method avatarSlotResponse (line 73) | def avatarSlotResponse(self, subId, slot):
    method sendRequestPlayAvatar (line 76) | def sendRequestPlayAvatar(self, avatarId, subId):
    method rejectPlayAvatar (line 79) | def rejectPlayAvatar(self, reasonId, avatarId):
    method playAvatarResponse (line 82) | def playAvatarResponse(self, avatarId, subId, access, founder):

FILE: otp/uberdog/OtpAvatarManagerAI.py
  class OtpAvatarManagerAI (line 4) | class OtpAvatarManagerAI(DistributedObjectAI):

FILE: otp/uberdog/OtpAvatarManagerUD.py
  class OtpAvatarManagerUD (line 4) | class OtpAvatarManagerUD(DistributedObjectUD):

FILE: otp/uberdog/RejectCode.py
  class RejectCode (line 3) | class RejectCode:

FILE: otp/uberdog/SpeedchatRelay.py
  class SpeedchatRelay (line 6) | class SpeedchatRelay(DistributedObjectGlobal):
    method __init__ (line 8) | def __init__(self, cr):
    method sendSpeedchat (line 11) | def sendSpeedchat(self, receiverId, messageIndex):
    method sendSpeedchatCustom (line 14) | def sendSpeedchatCustom(self, receiverId, messageIndex):
    method sendSpeedchatEmote (line 17) | def sendSpeedchatEmote(self, receiverId, messageIndex):
    method sendSpeedchatToRelay (line 20) | def sendSpeedchatToRelay(self, receiverId, speedchatType, parameters):

FILE: otp/uberdog/SpeedchatRelayUD.py
  class SpeedchatRelayUD (line 4) | class SpeedchatRelayUD(DistributedObjectUD):

FILE: otp/web/SettingsMgr.py
  class SettingsMgr (line 5) | class SettingsMgr(DistributedObjectGlobal, SettingsMgrBase):
    method announceGenerate (line 8) | def announceGenerate(self):
    method _handleConnected (line 19) | def _handleConnected(self):
    method _scheduleChangedSettingRequest (line 22) | def _scheduleChangedSettingRequest(self):
    method delete (line 27) | def delete(self):
    method sendRequestAllChangedSettings (line 34) | def sendRequestAllChangedSettings(self):
    method settingChange (line 37) | def settingChange(self, settingName, valueStr):

FILE: otp/web/SettingsMgrAI.py
  class SettingsMgrAI (line 4) | class SettingsMgrAI(DistributedObjectAI):

FILE: otp/web/SettingsMgrBase.py
  class SettingsMgrBase (line 3) | class SettingsMgrBase:
    method announceGenerate (line 6) | def announceGenerate(self):
    method delete (line 12) | def delete(self):
    method _initSettings (line 15) | def _initSettings(self):
    method _iterSettingNames (line 18) | def _iterSettingNames(self):
    method _addSettings (line 22) | def _addSettings(self, *settings):
    method _addSetting (line 26) | def _addSetting(self, setting):
    method _getOriginalValueRepr (line 34) | def _getOriginalValueRepr(self, settingName):
    method _getCurrentValueRepr (line 37) | def _getCurrentValueRepr(self, settingName):
    method _removeSetting (line 40) | def _removeSetting(self, setting):
    method _getSetting (line 45) | def _getSetting(self, settingName):
    method _isSettingModified (line 48) | def _isSettingModified(self, settingName):
    method _changeSetting (line 51) | def _changeSetting(self, settingName, valueStr):

FILE: otp/web/SettingsMgrUD.py
  class SettingsMgrUD (line 4) | class SettingsMgrUD(DistributedObjectUD):

FILE: toontown/ai/AIStart.py
  class game (line 37) | class game:

FILE: toontown/ai/BlackCatHolidayMgrAI.py
  class BlackCatHolidayMgrAI (line 5) | class BlackCatHolidayMgrAI(HolidayBaseAI.HolidayBaseAI):
    method __init__ (line 11) | def __init__(self, air, holidayId):
    method start (line 14) | def start(self):
    method stop (line 17) | def stop(self):

FILE: toontown/ai/CrashedLeaderBoardDecorator.py
  class CrashedLeaderBoardDecorator (line 10) | class CrashedLeaderBoardDecorator(HolidayDecorator.HolidayDecorator):
    method __init__ (line 13) | def __init__(self):
    method decorate (line 16) | def decorate(self):
    method startSmokeEffect (line 27) | def startSmokeEffect(self):
    method stopSmokeEffect (line 31) | def stopSmokeEffect(self):
    method undecorate (line 35) | def undecorate(self):

FILE: toontown/ai/DatabaseObject.py
  class DatabaseObject (line 9) | class DatabaseObject:
    method __init__ (line 13) | def __init__(self, air, doId = None, doneEvent = 'DatabaseObject'):
    method readToon (line 21) | def readToon(self, fields = None):
    method readPet (line 28) | def readPet(self):
    method readPetProxy (line 34) | def readPetProxy(self):
    method read
Copy disabled (too large) Download .json
Condensed preview — 1868 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,567K chars).
[
  {
    "path": ".gitignore",
    "chars": 235,
    "preview": "*.pyc\n*.pyo\n*.pyd\n*.log\nresources/\nnews/\nsign/\nwhitelist/\n*.so\n*.DS_Store\n*.jpg\n.idea\nvenv/\n*.json\n!win32/.vscode/tasks."
  },
  {
    "path": "LICENSE",
    "chars": 1550,
    "preview": "BSD 3-Clause License\r\n\r\nCopyright (c) 2019, Open Toontown\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and "
  },
  {
    "path": "README.md",
    "chars": 3084,
    "preview": "# Open Toontown\nThis repository contains the code for Open Toontown, based on the latest version of Disney's Toontown On"
  },
  {
    "path": "astron/config/astrond.yml",
    "chars": 1413,
    "preview": "daemon:\n    name: Open Toontown Astron Cluster\n\ngeneral:\n    eventlogger: 127.0.0.1:7197\n    dc_files:\n        - ../../e"
  },
  {
    "path": "astron/databases/.gitignore",
    "chars": 23,
    "preview": "*.db\n*.bak\n*.dat\n*.dir\n"
  },
  {
    "path": "astron/databases/astrondb/.gitignore",
    "chars": 7,
    "preview": "*.yaml\n"
  },
  {
    "path": "astron/logs/.gitignore",
    "chars": 6,
    "preview": "*.log\n"
  },
  {
    "path": "darwin/.vscode/tasks.json",
    "chars": 1316,
    "preview": "{\n    // See https://go.microsoft.com/fwlink/?LinkId=733558\n    // for the documentation about the tasks.json format\n   "
  },
  {
    "path": "darwin/start-ai-server.sh",
    "chars": 481,
    "preview": "#!/bin/sh\ncd ..\n\nBASE_CHANNEL=401000000\nMAX_CHANNELS=999999\nSTATE_SERVER=4002\nMESSAGE_DIRECTOR_IP=\"127.0.0.1:7199\"\nEVENT"
  },
  {
    "path": "darwin/start-astron-server.sh",
    "chars": 165,
    "preview": "#!/bin/sh\ncd ../astron/darwin\n\n# This assumes that your astrond build is located in the\n# \"astron/darwin\" directory.\n./a"
  },
  {
    "path": "darwin/start-game.sh",
    "chars": 106,
    "preview": "#!/bin/sh\ncd ..\n\nexport LOGIN_TOKEN=dev\n\n/usr/local/bin/python3.9 -m toontown.launcher.QuickStartLauncher\n"
  },
  {
    "path": "darwin/start-uberdog-server.sh",
    "chars": 423,
    "preview": "#!/bin/sh\ncd ..\n\nMAX_CHANNELS=999999\nSTATE_SERVER=4002\nMESSAGE_DIRECTOR_IP=\"127.0.0.1:7199\"\nEVENT_LOGGER_IP=\"127.0.0.1:7"
  },
  {
    "path": "etc/Configrc.prc",
    "chars": 3747,
    "preview": "# Window Settings\nwindow-title Toontown\nicon-filename phase_3/models/gui/toontown.ico\ncursor-filename phase_3/models/gui"
  },
  {
    "path": "etc/otp.dc",
    "chars": 18076,
    "preview": "from direct.distributed import DistributedObject/AI/UD\nfrom direct.distributed import DistributedNode/AI/UD\nfrom direct."
  },
  {
    "path": "etc/toon.dc",
    "chars": 125123,
    "preview": "from direct.distributed import DistributedObjectGlobal\nfrom toontown.ai import WelcomeValleyManager/AI\nfrom toontown.bui"
  },
  {
    "path": "linux/.vscode/tasks.json",
    "chars": 1312,
    "preview": "{\n    // See https://go.microsoft.com/fwlink/?LinkId=733558\n    // for the documentation about the tasks.json format\n   "
  },
  {
    "path": "linux/start-ai-server.sh",
    "chars": 464,
    "preview": "#!/bin/sh\ncd ..\n\nBASE_CHANNEL=401000000\nMAX_CHANNELS=999999\nSTATE_SERVER=4002\nMESSAGE_DIRECTOR_IP=\"127.0.0.1:7199\"\nEVENT"
  },
  {
    "path": "linux/start-astron-server.sh",
    "chars": 163,
    "preview": "#!/bin/sh\ncd ../astron/linux\n\n# This assumes that your astrond build is located in the\n# \"astron/linux\" directory.\n./ast"
  },
  {
    "path": "linux/start-game.sh",
    "chars": 89,
    "preview": "#!/bin/sh\ncd ..\n\nexport LOGIN_TOKEN=dev\n\npython3 -m toontown.launcher.QuickStartLauncher\n"
  },
  {
    "path": "linux/start-uberdog-server.sh",
    "chars": 406,
    "preview": "#!/bin/sh\ncd ..\n\nMAX_CHANNELS=999999\nSTATE_SERVER=4002\nMESSAGE_DIRECTOR_IP=\"127.0.0.1:7199\"\nEVENT_LOGGER_IP=\"127.0.0.1:7"
  },
  {
    "path": "otp/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/ai/AIBase.py",
    "chars": 8072,
    "preview": "from panda3d.core import *\nfrom direct.directnotify.DirectNotifyGlobal import *\nfrom direct.showbase import DConfig\nfrom"
  },
  {
    "path": "otp/ai/AIBaseGlobal.py",
    "chars": 885,
    "preview": "from .AIBase import *\n__builtins__['simbase'] = AIBase()\n__builtins__['ostream'] = Notify.out()\n__builtins__['run'] = si"
  },
  {
    "path": "otp/ai/AIInterestHandles.py",
    "chars": 161,
    "preview": "PIRATES_CARDGAME = 1\nPIRATES_CREW = 2\nPIRATES_GUILD = 3\nPIRATES_FRIENDS = 4\nPIRATES_BAND = 5\nPIRATES_PVP_RESPAWN = 6\nPIR"
  },
  {
    "path": "otp/ai/AIMsgTypes.py",
    "chars": 3200,
    "preview": "from otp.distributed.OtpDoGlobals import *\nfrom direct.showbase.PythonUtil import invertDictLossless\nOTP_SERVER_ROOT_DO_"
  },
  {
    "path": "otp/ai/AIZoneData.py",
    "chars": 7814,
    "preview": "from panda3d.core import *\nfrom direct.distributed import ParentMgr\nfrom direct.directnotify.DirectNotifyGlobal import d"
  },
  {
    "path": "otp/ai/BanManagerAI.py",
    "chars": 3027,
    "preview": "import urllib.request, urllib.parse, urllib.error\nimport os\nfrom panda3d.core import HTTPClient, Ramfile\nfrom direct.dir"
  },
  {
    "path": "otp/ai/Barrier.py",
    "chars": 3144,
    "preview": "from otp.ai.AIBase import *\nfrom direct.task import Task\nfrom direct.showbase import DirectObject\nimport random\n\nclass B"
  },
  {
    "path": "otp/ai/GarbageLeakServerEventAggregator.py",
    "chars": 1450,
    "preview": "from direct.showbase.DirectObject import DirectObject\nfrom direct.showbase import GarbageReport\n\nclass GarbageLeakServer"
  },
  {
    "path": "otp/ai/TimeManager.py",
    "chars": 13829,
    "preview": "from panda3d.core import *\nfrom direct.showbase.DirectObject import *\nfrom direct.distributed.ClockDelta import *\nfrom d"
  },
  {
    "path": "otp/ai/TimeManagerAI.py",
    "chars": 1124,
    "preview": "import time\n\nfrom direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.ClockDelta import globalClockDel"
  },
  {
    "path": "otp/ai/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/avatar/Avatar.py",
    "chars": 21551,
    "preview": "from panda3d.core import *\nfrom panda3d.otp import Nametag, NametagGroup\nfrom panda3d.otp import CFSpeech, CFThought, CF"
  },
  {
    "path": "otp/avatar/AvatarDNA.py",
    "chars": 803,
    "preview": "from panda3d.core import *\nfrom direct.directnotify.DirectNotifyGlobal import *\nimport random\nfrom direct.distributed.Py"
  },
  {
    "path": "otp/avatar/AvatarDetail.py",
    "chars": 1460,
    "preview": "from direct.directnotify.DirectNotifyGlobal import directNotify\nfrom otp.avatar import Avatar\n\nclass AvatarDetail:\n    n"
  },
  {
    "path": "otp/avatar/AvatarHandle.py",
    "chars": 591,
    "preview": "\n\nclass AvatarHandle:\n    dclassName = 'AvatarHandle'\n\n    def getName(self):\n        if __dev__:\n            pass\n     "
  },
  {
    "path": "otp/avatar/AvatarPanel.py",
    "chars": 2498,
    "preview": "from panda3d.core import *\nfrom direct.gui.DirectGui import *\nfrom direct.showbase import DirectObject\nfrom . import Ava"
  },
  {
    "path": "otp/avatar/DistributedAvatar.py",
    "chars": 8833,
    "preview": "import time\nimport string\nfrom panda3d.core import *\nfrom direct.distributed import DistributedNode\nfrom direct.actor.Di"
  },
  {
    "path": "otp/avatar/DistributedAvatarAI.py",
    "chars": 2767,
    "preview": "from otp.ai.AIBaseGlobal import *\nfrom otp.otpbase import OTPGlobals\nfrom direct.fsm import ClassicFSM\nfrom direct.fsm i"
  },
  {
    "path": "otp/avatar/DistributedAvatarUD.py",
    "chars": 251,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectUD import DistributedObjectU"
  },
  {
    "path": "otp/avatar/DistributedPlayer.py",
    "chars": 18865,
    "preview": "from panda3d.core import *\nfrom panda3d.otp import WhisperPopup\nfrom panda3d.otp import CFQuicktalker, CFPageButton, CFQ"
  },
  {
    "path": "otp/avatar/DistributedPlayerAI.py",
    "chars": 4445,
    "preview": "from direct.showbase import GarbageReport\nfrom otp.ai.AIBaseGlobal import *\nfrom otp.avatar import DistributedAvatarAI\nf"
  },
  {
    "path": "otp/avatar/Emote.py",
    "chars": 478,
    "preview": "from otp.otpbase import OTPLocalizer\n\nclass Emote:\n    EmoteClear = -1\n    EmoteEnableStateChanged = 'EmoteEnableStateCh"
  },
  {
    "path": "otp/avatar/LocalAvatar.py",
    "chars": 46768,
    "preview": "from panda3d.core import *\nfrom panda3d.otp import Nametag, WhisperPopup\nfrom direct.gui.DirectGui import *\nfrom direct."
  },
  {
    "path": "otp/avatar/PlayerBase.py",
    "chars": 288,
    "preview": "\n\nclass PlayerBase:\n\n    def __init__(self):\n        self.gmState = False\n\n    def atLocation(self, locationId):\n       "
  },
  {
    "path": "otp/avatar/PositionExaminer.py",
    "chars": 4039,
    "preview": "from panda3d.core import *\nfrom direct.showbase.DirectObject import DirectObject\nfrom otp.otpbase import OTPGlobals\n\ncla"
  },
  {
    "path": "otp/avatar/ShadowCaster.py",
    "chars": 4739,
    "preview": "from panda3d.core import *\nfrom panda3d.core import *\nfrom direct.directnotify import DirectNotifyGlobal\nfrom direct.sho"
  },
  {
    "path": "otp/avatar/SpeedMonitor.py",
    "chars": 3627,
    "preview": "from direct.showbase.PythonUtil import SerialNumGen\nfrom direct.task import Task\n\nclass SpeedMonitor:\n    notify = direc"
  },
  {
    "path": "otp/avatar/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/chat/ChatGarbler.py",
    "chars": 906,
    "preview": "import string\nimport random\nfrom otp.otpbase import OTPLocalizer\n\nclass ChatGarbler:\n\n    def garble(self, avatar, messa"
  },
  {
    "path": "otp/chat/ChatGlobals.py",
    "chars": 1090,
    "preview": "import string\nNORMAL_CHAT = 1\nWHISPER_CHAT = 2\nGUILD_CHAT = 3\nCREW_CHAT = 4\nSHIPPVP_CHAT = 5\nERROR_NONE = None\nERROR_NO_"
  },
  {
    "path": "otp/chat/ChatInputNormal.py",
    "chars": 5605,
    "preview": "from direct.showbase import DirectObject\nfrom otp.otpbase import OTPGlobals\nimport sys\nfrom direct.gui.DirectGui import "
  },
  {
    "path": "otp/chat/ChatInputTyped.py",
    "chars": 6231,
    "preview": "from direct.showbase import DirectObject\nfrom otp.otpbase import OTPGlobals\nimport sys\nfrom direct.gui.DirectGui import "
  },
  {
    "path": "otp/chat/ChatInputWhiteListFrame.py",
    "chars": 12365,
    "preview": "from direct.fsm import FSM\nfrom otp.otpbase import OTPGlobals\nimport sys\nfrom direct.directnotify import DirectNotifyGlo"
  },
  {
    "path": "otp/chat/ChatManager.py",
    "chars": 19858,
    "preview": "import string\nfrom direct.showbase import DirectObject\nfrom direct.fsm import ClassicFSM\nfrom direct.fsm import State\nfr"
  },
  {
    "path": "otp/chat/TalkAssistant.py",
    "chars": 31973,
    "preview": "import sys\nfrom direct.showbase import DirectObject\nfrom otp.otpbase import OTPLocalizer\nfrom direct.directnotify import"
  },
  {
    "path": "otp/chat/TalkGlobals.py",
    "chars": 312,
    "preview": "TALK_NONE = 0\nTALK_OPEN = 1\nTALK_WHISPER = 2\nTALK_ACCOUNT = 13\nTALK_GM = 14\nAVATAR_THOUGHT = 16\nTALK_GUILD = 3\nTALK_PART"
  },
  {
    "path": "otp/chat/TalkHandle.py",
    "chars": 1710,
    "preview": "from otp.avatar.AvatarHandle import AvatarHandle\n\nclass TalkHandle(AvatarHandle):\n\n    def __init__(self, doId, message)"
  },
  {
    "path": "otp/chat/TalkMessage.py",
    "chars": 2865,
    "preview": "\n\nclass TalkMessage:\n\n    def __init__(self, messageId, timeStamp, body, senderAvatarId, senderAvatarName, senderAccount"
  },
  {
    "path": "otp/chat/WhiteList.py",
    "chars": 1284,
    "preview": "from bisect import bisect_left\n\nclass WhiteList:\n\n    def __init__(self, wordlist):\n        self.words = []\n        for "
  },
  {
    "path": "otp/chat/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/distributed/Account.py",
    "chars": 144,
    "preview": "from direct.distributed import DistributedObject\n\nclass Account(DistributedObject.DistributedObject):\n\n    def __init__("
  },
  {
    "path": "otp/distributed/AccountAI.py",
    "chars": 232,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectAI import DistributedObjectA"
  },
  {
    "path": "otp/distributed/AccountUD.py",
    "chars": 232,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectUD import DistributedObjectU"
  },
  {
    "path": "otp/distributed/AstronAccount.py",
    "chars": 151,
    "preview": "from direct.distributed import DistributedObject\n\n\nclass AstronAccount(DistributedObject.DistributedObject):\n\n    def __"
  },
  {
    "path": "otp/distributed/AstronAccountAI.py",
    "chars": 244,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectAI import DistributedObjectA"
  },
  {
    "path": "otp/distributed/AstronAccountUD.py",
    "chars": 244,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectUD import DistributedObjectU"
  },
  {
    "path": "otp/distributed/CentralLogger.py",
    "chars": 1080,
    "preview": "from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal\nREPORT_PLAYER = 'REPORT_PLAYER'\nReportFou"
  },
  {
    "path": "otp/distributed/CentralLoggerAI.py",
    "chars": 244,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectAI import DistributedObjectA"
  },
  {
    "path": "otp/distributed/CentralLoggerUD.py",
    "chars": 244,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectUD import DistributedObjectU"
  },
  {
    "path": "otp/distributed/ClsendTracker.py",
    "chars": 2209,
    "preview": "from panda3d.core import StringStream\nfrom direct.distributed.PyDatagram import PyDatagram\nimport random\n\nclass ClsendTr"
  },
  {
    "path": "otp/distributed/DistributedDirectory.py",
    "chars": 124,
    "preview": "from direct.distributed.DistributedObject import DistributedObject\n\nclass DistributedDirectory(DistributedObject):\n    p"
  },
  {
    "path": "otp/distributed/DistributedDirectoryAI.py",
    "chars": 258,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectAI import DistributedObjectA"
  },
  {
    "path": "otp/distributed/DistributedDistrict.py",
    "chars": 1165,
    "preview": "from direct.directnotify.DirectNotifyGlobal import directNotify\nfrom direct.distributed.DistributedObject import Distrib"
  },
  {
    "path": "otp/distributed/DistributedDistrictAI.py",
    "chars": 1002,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectAI import DistributedObjectA"
  },
  {
    "path": "otp/distributed/DistributedDistrictUD.py",
    "chars": 256,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectUD import DistributedObjectU"
  },
  {
    "path": "otp/distributed/DistributedTestObject.py",
    "chars": 717,
    "preview": "from direct.distributed import DistributedObject\n\nclass DistributedTestObject(DistributedObject.DistributedObject):\n\n   "
  },
  {
    "path": "otp/distributed/DistributedTestObjectAI.py",
    "chars": 260,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectAI import DistributedObjectA"
  },
  {
    "path": "otp/distributed/GameServerTestSuite.py",
    "chars": 5190,
    "preview": "from direct.directnotify.DirectNotifyGlobal import directNotify\nfrom direct.showbase import DirectObject, TaskThreaded\n\n"
  },
  {
    "path": "otp/distributed/OTPClientRepository.py",
    "chars": 103378,
    "preview": "import sys\nimport time\nimport random\nimport gc\nimport os\nfrom panda3d.core import *\nfrom direct.gui.DirectGui import *\nf"
  },
  {
    "path": "otp/distributed/OTPInternalRepository.py",
    "chars": 1943,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.AstronInternalRepository import AstronInterna"
  },
  {
    "path": "otp/distributed/ObjectServer.py",
    "chars": 378,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed import DistributedObject\n\nclass ObjectServer("
  },
  {
    "path": "otp/distributed/ObjectServerAI.py",
    "chars": 242,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectAI import DistributedObjectA"
  },
  {
    "path": "otp/distributed/ObjectServerUD.py",
    "chars": 242,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectUD import DistributedObjectU"
  },
  {
    "path": "otp/distributed/OtpDoGlobals.py",
    "chars": 3322,
    "preview": "from direct.distributed.MsgTypes import *\nOTP_DO_ID_SERVER_ROOT = 4007\nOTP_DO_ID_FRIEND_MANAGER = 4501\nOTP_DO_ID_LEADERB"
  },
  {
    "path": "otp/distributed/PotentialAvatar.py",
    "chars": 730,
    "preview": "\n\nclass PotentialAvatar:\n\n    def __init__(self, id, names, dna, position, allowedName, creator = 1, shared = 1, online "
  },
  {
    "path": "otp/distributed/PotentialShard.py",
    "chars": 234,
    "preview": "\n\nclass PotentialShard:\n\n    def __init__(self, id):\n        self.id = id\n        self.name = None\n        self.populati"
  },
  {
    "path": "otp/distributed/TelemetryLimited.py",
    "chars": 584,
    "preview": "\n\nclass TelemetryLimited:\n    Sng = SerialNumGen()\n\n    def __init__(self):\n        self._telemetryLimiterId = self.Sng."
  },
  {
    "path": "otp/distributed/TelemetryLimiter.py",
    "chars": 3859,
    "preview": "from direct.showbase.DirectObject import DirectObject\nfrom otp.avatar.DistributedPlayer import DistributedPlayer\nfrom di"
  },
  {
    "path": "otp/distributed/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/friends/AvatarFriendInfo.py",
    "chars": 1386,
    "preview": "from otp.avatar.AvatarHandle import AvatarHandle\n\nclass AvatarFriendInfo(AvatarHandle):\n\n    def __init__(self, avatarNa"
  },
  {
    "path": "otp/friends/AvatarFriendsManager.py",
    "chars": 4080,
    "preview": "from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal\nfrom direct.directnotify.DirectNotifyGlob"
  },
  {
    "path": "otp/friends/AvatarFriendsManagerUD.py",
    "chars": 257,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectUD import DistributedObjectU"
  },
  {
    "path": "otp/friends/FriendInfo.py",
    "chars": 1644,
    "preview": "from otp.avatar.AvatarHandle import AvatarHandle\n\nclass FriendInfo(AvatarHandle):\n\n    def __init__(self, avatarName = '"
  },
  {
    "path": "otp/friends/FriendManager.py",
    "chars": 4365,
    "preview": "from panda3d.core import *\nfrom direct.distributed import DistributedObject\nfrom direct.directnotify import DirectNotify"
  },
  {
    "path": "otp/friends/FriendManagerAI.py",
    "chars": 243,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectAI import DistributedObjectA"
  },
  {
    "path": "otp/friends/FriendResponseCodes.py",
    "chars": 174,
    "preview": "INVITATION_RESP_OK = 0\nINVITATION_RESP_DECLINE = 1\nINVITATION_RESP_RETRACT = 2\nINVITATION_RESP_CANCEL = 3\nINVITATION_RES"
  },
  {
    "path": "otp/friends/FriendSecret.py",
    "chars": 25399,
    "preview": "from panda3d.core import *\nfrom panda3d.otp import *\nfrom direct.gui.DirectGui import *\nfrom direct.directnotify import "
  },
  {
    "path": "otp/friends/GuildManager.py",
    "chars": 16167,
    "preview": "from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal\nfrom direct.directnotify.DirectNotifyGlob"
  },
  {
    "path": "otp/friends/GuildManagerAI.py",
    "chars": 241,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectAI import DistributedObjectA"
  },
  {
    "path": "otp/friends/GuildManagerUD.py",
    "chars": 241,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectUD import DistributedObjectU"
  },
  {
    "path": "otp/friends/PlayerFriendsManager.py",
    "chars": 9483,
    "preview": "from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal\nfrom direct.directnotify.DirectNotifyGlob"
  },
  {
    "path": "otp/friends/PlayerFriendsManagerUD.py",
    "chars": 257,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectUD import DistributedObjectU"
  },
  {
    "path": "otp/friends/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/launcher/DownloadWatcher.py",
    "chars": 1377,
    "preview": "from direct.task import Task\nfrom otp.otpbase import OTPLocalizer\nfrom direct.gui.DirectGui import *\nfrom panda3d.core i"
  },
  {
    "path": "otp/launcher/DummyLauncherBase.py",
    "chars": 3714,
    "preview": "from panda3d.core import *\nfrom direct.showbase.MessengerGlobal import *\nfrom direct.task.TaskManagerGlobal import *\nfro"
  },
  {
    "path": "otp/launcher/LauncherBase.py",
    "chars": 8399,
    "preview": "import sys\nimport os\nimport time\nimport builtins\nfrom panda3d.core import *\nfrom direct.showbase import DConfig\nfrom dir"
  },
  {
    "path": "otp/launcher/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/level/AmbientSound.py",
    "chars": 1113,
    "preview": "from direct.interval.IntervalGlobal import *\nfrom . import BasicEntities\nimport random\n\nclass AmbientSound(BasicEntities"
  },
  {
    "path": "otp/level/AttribDesc.py",
    "chars": 656,
    "preview": "\n\nclass AttribDesc:\n\n    def __init__(self, name, default, datatype = 'string', params = {}):\n        self.name = name\n "
  },
  {
    "path": "otp/level/BasicEntities.py",
    "chars": 3607,
    "preview": "from . import Entity\nfrom . import DistributedEntity\nfrom panda3d.core import NodePath\n\nclass NodePathEntityBase:\n\n    d"
  },
  {
    "path": "otp/level/CollisionSolidEntity.py",
    "chars": 1435,
    "preview": "from panda3d.core import *\nfrom otp.otpbase import OTPGlobals\nfrom direct.directnotify import DirectNotifyGlobal\nfrom . "
  },
  {
    "path": "otp/level/CutScene.py",
    "chars": 4138,
    "preview": "from direct.showbase import DirectObject\nfrom direct.directnotify import DirectNotifyGlobal\nfrom . import BasicEntities\n"
  },
  {
    "path": "otp/level/DistributedEntity.py",
    "chars": 1772,
    "preview": "from direct.distributed import DistributedObject\nfrom . import Entity\nfrom direct.directnotify import DirectNotifyGlobal"
  },
  {
    "path": "otp/level/DistributedEntityAI.py",
    "chars": 1388,
    "preview": "from direct.distributed import DistributedObjectAI\nfrom . import Entity\nfrom direct.directnotify import DirectNotifyGlob"
  },
  {
    "path": "otp/level/DistributedInteractiveEntity.py",
    "chars": 2185,
    "preview": "from panda3d.core import *\nfrom direct.distributed.ClockDelta import *\nfrom direct.directnotify import DirectNotifyGloba"
  },
  {
    "path": "otp/level/DistributedInteractiveEntityAI.py",
    "chars": 273,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectAI import DistributedObjectA"
  },
  {
    "path": "otp/level/DistributedLevel.py",
    "chars": 23562,
    "preview": "from direct.distributed.ClockDelta import *\nfrom panda3d.core import *\nfrom direct.showbase.PythonUtil import Functor, s"
  },
  {
    "path": "otp/level/DistributedLevelAI.py",
    "chars": 7482,
    "preview": "from panda3d.core import *\nfrom otp.ai.AIBaseGlobal import *\nfrom direct.distributed.ClockDelta import *\nfrom direct.dis"
  },
  {
    "path": "otp/level/EditMgr.py",
    "chars": 76,
    "preview": "from . import EditMgrBase\n\nclass EditMgr(EditMgrBase.EditMgrBase):\n    pass\n"
  },
  {
    "path": "otp/level/EditMgrAI.py",
    "chars": 1570,
    "preview": "from . import EditMgrBase\nif __dev__:\n    from direct.showbase.PythonUtil import list2dict\n    from . import EditorGloba"
  },
  {
    "path": "otp/level/EditMgrBase.py",
    "chars": 888,
    "preview": "from . import Entity\nfrom direct.directnotify import DirectNotifyGlobal\n\nclass EditMgrBase(Entity.Entity):\n    notify = "
  },
  {
    "path": "otp/level/EditorGlobals.py",
    "chars": 1152,
    "preview": "from direct.showbase.PythonUtil import uniqueElements\nEditTargetPostName = 'inGameEditTarget'\nEntIdRange = 10000\nusernam"
  },
  {
    "path": "otp/level/Entity.py",
    "chars": 3251,
    "preview": "from direct.showbase.DirectObject import DirectObject\nfrom direct.showbase.PythonUtil import lineInfo\nfrom direct.direct"
  },
  {
    "path": "otp/level/EntityCreator.py",
    "chars": 1589,
    "preview": "from . import CutScene\nfrom . import EntityCreatorBase\nfrom . import BasicEntities\nfrom direct.directnotify import Direc"
  },
  {
    "path": "otp/level/EntityCreatorAI.py",
    "chars": 1522,
    "preview": "from . import EntityCreatorBase\nfrom . import LogicGate\nfrom . import EditMgrAI\nfrom . import LevelMgrAI\nfrom . import Z"
  },
  {
    "path": "otp/level/EntityCreatorBase.py",
    "chars": 1008,
    "preview": "from direct.directnotify import DirectNotifyGlobal\n\nclass EntityCreatorBase:\n    notify = DirectNotifyGlobal.directNotif"
  },
  {
    "path": "otp/level/EntityStateVarSet.py",
    "chars": 1209,
    "preview": "from direct.fsm.StatePush import StateVar\nfrom direct.showbase.PythonUtil import getSetterName\nfrom otp.level.Entity imp"
  },
  {
    "path": "otp/level/EntityTypeDesc.py",
    "chars": 2963,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom . import AttribDesc\nfrom direct.showbase.PythonUtil import mostD"
  },
  {
    "path": "otp/level/EntityTypeRegistry.py",
    "chars": 3632,
    "preview": "from panda3d.core import *\nfrom direct.directnotify import DirectNotifyGlobal\nimport types\nfrom . import AttribDesc\nfrom"
  },
  {
    "path": "otp/level/EntityTypes.py",
    "chars": 4093,
    "preview": "from .EntityTypeDesc import EntityTypeDesc\nfrom toontown.coghq.SpecImports import *\n\nclass Entity(EntityTypeDesc):\n    a"
  },
  {
    "path": "otp/level/EntrancePoint.py",
    "chars": 1424,
    "preview": "from toontown.toonbase.ToontownGlobals import *\nfrom direct.directnotify import DirectNotifyGlobal\nfrom . import BasicEn"
  },
  {
    "path": "otp/level/Level.py",
    "chars": 8994,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nimport string\nfrom . import LevelConstants\nfrom direct.showbase.Pytho"
  },
  {
    "path": "otp/level/LevelConstants.py",
    "chars": 91,
    "preview": "MinZoneNum = 0\nMaxZoneNum = 999\nUberZoneEntId = 0\nLevelMgrEntId = 1000\nEditMgrEntId = 1001\n"
  },
  {
    "path": "otp/level/LevelMgr.py",
    "chars": 1735,
    "preview": "from direct.showbase.PythonUtil import Functor\nfrom . import LevelMgrBase\n\nclass LevelMgr(LevelMgrBase.LevelMgrBase):\n\n "
  },
  {
    "path": "otp/level/LevelMgrAI.py",
    "chars": 1272,
    "preview": "from direct.showbase.PythonUtil import Functor\nfrom . import LevelMgrBase\n\nclass LevelMgrAI(LevelMgrBase.LevelMgrBase):\n"
  },
  {
    "path": "otp/level/LevelMgrBase.py",
    "chars": 232,
    "preview": "from . import Entity\n\nclass LevelMgrBase(Entity.Entity):\n\n    def __init__(self, level, entId):\n        Entity.Entity.__"
  },
  {
    "path": "otp/level/LevelSpec.py",
    "chars": 15749,
    "preview": "from panda3d.core import *\nfrom direct.directnotify import DirectNotifyGlobal\nfrom direct.showbase.PythonUtil import lis"
  },
  {
    "path": "otp/level/LevelUtil.py",
    "chars": 1601,
    "preview": "import string\nfrom . import LevelConstants\n\ndef getZoneNum2Node(levelModel, logFunc = lambda str: str):\n\n    def findNum"
  },
  {
    "path": "otp/level/LocatorEntity.py",
    "chars": 1027,
    "preview": "from . import Entity, BasicEntities\nfrom panda3d.core import NodePath\nfrom direct.directnotify import DirectNotifyGlobal"
  },
  {
    "path": "otp/level/LogicGate.py",
    "chars": 2708,
    "preview": "from direct.showbase import DirectObject\nfrom direct.directnotify import DirectNotifyGlobal\nfrom . import Entity\n\ndef an"
  },
  {
    "path": "otp/level/ModelEntity.py",
    "chars": 3119,
    "preview": "from toontown.toonbase.ToontownGlobals import *\nfrom direct.directnotify import DirectNotifyGlobal\nfrom . import BasicEn"
  },
  {
    "path": "otp/level/PathEntity.py",
    "chars": 2260,
    "preview": "from toontown.toonbase.ToontownGlobals import *\nfrom direct.interval.IntervalGlobal import *\nfrom direct.directnotify im"
  },
  {
    "path": "otp/level/PropSpinner.py",
    "chars": 1621,
    "preview": "from direct.interval.IntervalGlobal import *\nfrom .Entity import Entity\nfrom panda3d.core import Vec3\n\nclass PropSpinner"
  },
  {
    "path": "otp/level/VisibilityBlocker.py",
    "chars": 847,
    "preview": "from . import Entity\n\nclass VisibilityBlocker:\n\n    def __init__(self):\n        self.__nextSetZoneDoneEvent = None\n     "
  },
  {
    "path": "otp/level/VisibilityExtender.py",
    "chars": 1764,
    "preview": "from . import Entity\n\nclass VisibilityExtender(Entity.Entity):\n\n    def __init__(self, level, entId):\n        Entity.Ent"
  },
  {
    "path": "otp/level/ZoneEntity.py",
    "chars": 1694,
    "preview": "from . import ZoneEntityBase\nfrom . import BasicEntities\n\nclass ZoneEntity(ZoneEntityBase.ZoneEntityBase, BasicEntities."
  },
  {
    "path": "otp/level/ZoneEntityAI.py",
    "chars": 411,
    "preview": "from . import ZoneEntityBase\n\nclass ZoneEntityAI(ZoneEntityBase.ZoneEntityBase):\n\n    def __init__(self, level, entId):\n"
  },
  {
    "path": "otp/level/ZoneEntityBase.py",
    "chars": 558,
    "preview": "from . import Entity\nfrom . import LevelConstants\n\nclass ZoneEntityBase(Entity.Entity):\n\n    def __init__(self, level, e"
  },
  {
    "path": "otp/level/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/login/AstronLoginManager.py",
    "chars": 2092,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectGlobal import DistributedObj"
  },
  {
    "path": "otp/login/AstronLoginManagerUD.py",
    "chars": 42608,
    "preview": "import json\nimport time\nimport os\nfrom datetime import datetime\n\nfrom direct.directnotify import DirectNotifyGlobal\nfrom"
  },
  {
    "path": "otp/login/CreateAccountScreen.py",
    "chars": 11331,
    "preview": "from panda3d.core import *\nfrom direct.gui.DirectGui import *\nfrom panda3d.core import *\nfrom direct.fsm import StateDat"
  },
  {
    "path": "otp/login/GuiScreen.py",
    "chars": 10914,
    "preview": "from panda3d.core import *\nfrom otp.otpbase import OTPGlobals\nfrom direct.gui.DirectGui import *\nfrom otp.otpgui import "
  },
  {
    "path": "otp/login/HTTPUtil.py",
    "chars": 910,
    "preview": "from panda3d.core import *\n\nclass HTTPUtilException(Exception):\n\n    def __init__(self, what):\n        Exception.__init_"
  },
  {
    "path": "otp/login/LeaveToPayDialog.py",
    "chars": 4012,
    "preview": "from otp.otpbase import OTPGlobals\nfrom otp.otpbase import OTPLauncherGlobals\nfrom otp.otpbase import OTPLocalizer\nfrom "
  },
  {
    "path": "otp/login/LoginAstronAccount.py",
    "chars": 809,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom otp.login.LoginBase import LoginBase\nfrom direct.distributed.PyD"
  },
  {
    "path": "otp/login/LoginBase.py",
    "chars": 272,
    "preview": "\n\nclass LoginBase:\n    freeTimeExpires = -1\n\n    def __init__(self, cr):\n        self.cr = cr\n\n    def sendLoginMsg(self"
  },
  {
    "path": "otp/login/LoginDISLTokenAccount.py",
    "chars": 1048,
    "preview": "from direct.showbase.ShowBaseGlobal import *\nfrom direct.distributed.MsgTypes import *\nfrom direct.directnotify import D"
  },
  {
    "path": "otp/login/LoginGSAccount.py",
    "chars": 2633,
    "preview": "from panda3d.core import *\nfrom direct.distributed.MsgTypes import *\nfrom direct.directnotify import DirectNotifyGlobal\n"
  },
  {
    "path": "otp/login/LoginGoAccount.py",
    "chars": 1624,
    "preview": "from panda3d.core import *\nfrom direct.distributed.MsgTypes import *\nfrom direct.directnotify import DirectNotifyGlobal\n"
  },
  {
    "path": "otp/login/LoginScreen.py",
    "chars": 31336,
    "preview": "import json\nimport os\nimport time\nfrom datetime import datetime\nfrom panda3d.core import *\nfrom direct.distributed.MsgTy"
  },
  {
    "path": "otp/login/LoginTTAccount.py",
    "chars": 2340,
    "preview": "from panda3d.core import *\nfrom direct.distributed.MsgTypes import *\nfrom direct.directnotify import DirectNotifyGlobal\n"
  },
  {
    "path": "otp/login/LoginTTSpecificDevAccount.py",
    "chars": 4201,
    "preview": "from panda3d.core import *\nfrom direct.distributed.MsgTypes import *\nfrom direct.directnotify import DirectNotifyGlobal\n"
  },
  {
    "path": "otp/login/LoginWebPlayTokenAccount.py",
    "chars": 1275,
    "preview": "from panda3d.core import *\nfrom direct.directnotify import DirectNotifyGlobal\nfrom . import LoginTTAccount\n\nclass LoginW"
  },
  {
    "path": "otp/login/MultiPageTextFrame.py",
    "chars": 3686,
    "preview": "from panda3d.core import *\nfrom direct.gui.DirectGui import *\nfrom otp.otpbase import OTPLocalizer\n\nclass MultiPageTextF"
  },
  {
    "path": "otp/login/PrivacyPolicyPanel.py",
    "chars": 5592,
    "preview": "from panda3d.core import *\nfrom otp.otpbase.OTPGlobals import *\nfrom direct.gui.DirectGui import *\nfrom .MultiPageTextFr"
  },
  {
    "path": "otp/login/SecretFriendsInfoPanel.py",
    "chars": 1001,
    "preview": "from panda3d.core import *\nfrom otp.otpbase.OTPGlobals import *\nfrom direct.gui.DirectGui import *\nfrom .MultiPageTextFr"
  },
  {
    "path": "otp/login/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/movement/Impulse.py",
    "chars": 620,
    "preview": "from panda3d.core import *\nfrom direct.showbase import DirectObject\n\nclass Impulse(DirectObject.DirectObject):\n\n    def "
  },
  {
    "path": "otp/movement/Mover.py",
    "chars": 2588,
    "preview": "from panda3d.core import *\nfrom panda3d.otp import CMover\nfrom direct.directnotify import DirectNotifyGlobal\nfrom otp.mo"
  },
  {
    "path": "otp/movement/PyVec3.py",
    "chars": 4021,
    "preview": "from panda3d.core import *\nimport types\nimport math\n\nclass PyVec3:\n    Epsilon = 0.0001\n    ScalarTypes = (float, int)\n\n"
  },
  {
    "path": "otp/movement/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/namepanel/NameCheck.py",
    "chars": 10849,
    "preview": "import string\nfrom otp.otpbase import OTPLocalizer\nfrom direct.directnotify import DirectNotifyGlobal\nfrom panda3d.core "
  },
  {
    "path": "otp/namepanel/NameTumbler.py",
    "chars": 5880,
    "preview": "from panda3d.core import *\nfrom direct.showbase import DirectObject\nimport random\nfrom direct.task import Task\nfrom dire"
  },
  {
    "path": "otp/namepanel/PickANamePattern.py",
    "chars": 4517,
    "preview": "\n\nclass PickANamePattern:\n\n    def __init__(self, nameStr, gender):\n        self._nameStr = nameStr\n        self._namePa"
  },
  {
    "path": "otp/namepanel/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/otpbase/OTPBase.py",
    "chars": 9963,
    "preview": "from direct.showbase.ShowBase import ShowBase\nfrom panda3d.core import Camera, TPLow, VBase4, ColorWriteAttrib, Filename"
  },
  {
    "path": "otp/otpbase/OTPGlobals.py",
    "chars": 9920,
    "preview": "from panda3d.core import *\nfrom panda3d.otp import *\nQuietZone = 1\nUberZone = 2\nWallBitmask = BitMask32(1)\nFloorBitmask "
  },
  {
    "path": "otp/otpbase/OTPLauncherGlobals.py",
    "chars": 163,
    "preview": "NonErrorExitStateStart = 100\nExitPurchase = 100\nExitSetParentPassword = 101\nExitEnableChat = 102\nExitTimeExpired = 103\nE"
  },
  {
    "path": "otp/otpbase/OTPLocalizer.py",
    "chars": 1614,
    "preview": "from panda3d.core import *\n\nlanguage = ConfigVariableString('language', 'english').value\ncheckLanguage = ConfigVariableB"
  },
  {
    "path": "otp/otpbase/OTPLocalizerEnglish.py",
    "chars": 116685,
    "preview": "import string\nfrom otp.otpbase.OTPLocalizerEnglishProperty import *\nlTheBrrrgh = 'The Brrrgh'\nlDaisyGardens = 'Daisy Gar"
  },
  {
    "path": "otp/otpbase/OTPLocalizerEnglishProperty.py",
    "chars": 316,
    "preview": "FSenterSecretTextPos = (0, 0, -0.25)\nFSgotSecretPos = (0, 0, 0.47)\nFSgetSecretButton = 0.06\nFSnextText = 1.0\nFSgetSecret"
  },
  {
    "path": "otp/otpbase/OTPRender.py",
    "chars": 1984,
    "preview": "from panda3d.core import *\nMainCameraBitmask = BitMask32.bit(0)\nReflectionCameraBitmask = BitMask32.bit(1)\nShadowCameraB"
  },
  {
    "path": "otp/otpbase/OTPTimer.py",
    "chars": 3677,
    "preview": "from panda3d.core import Vec4\nfrom direct.gui.DirectGui import DirectFrame, DGG\nfrom direct.task import Task\nfrom direct"
  },
  {
    "path": "otp/otpbase/ObjectCount.py",
    "chars": 1381,
    "preview": "from direct.showbase.Job import Job\nimport gc\n\nclass ObjectCount(Job):\n    \"\"\" logs a count of the number of each type o"
  },
  {
    "path": "otp/otpbase/PythonUtil.py",
    "chars": 6025,
    "preview": "import builtins\nimport sys\nimport math\nimport random\nimport time\n\n__all__ = ['enumerate', 'nonRepeatingRandomList', 'des"
  },
  {
    "path": "otp/otpbase/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/otpgui/OTPDialog.py",
    "chars": 5298,
    "preview": "from direct.gui.DirectGui import *\nfrom direct.directnotify import DirectNotifyGlobal\nimport string\nfrom otp.otpbase imp"
  },
  {
    "path": "otp/otpgui/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/settings/Settings.py",
    "chars": 823,
    "preview": "import json\nimport os\n\n\nclass Settings:\n\n    def __init__(self):\n        self.__settings = {}\n        self.__filename = "
  },
  {
    "path": "otp/settings/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/snapshot/SnapshotDispatcher.py",
    "chars": 204,
    "preview": "from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal\nfrom direct.directnotify.DirectNotifyGlob"
  },
  {
    "path": "otp/snapshot/SnapshotDispatcherAI.py",
    "chars": 253,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectAI import DistributedObjectA"
  },
  {
    "path": "otp/snapshot/SnapshotDispatcherUD.py",
    "chars": 253,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectUD import DistributedObjectU"
  },
  {
    "path": "otp/snapshot/SnapshotRenderer.py",
    "chars": 202,
    "preview": "from direct.distributed.DistributedObjectGlobal import DistributedObjectGlobal\nfrom direct.directnotify.DirectNotifyGlob"
  },
  {
    "path": "otp/snapshot/SnapshotRendererAI.py",
    "chars": 249,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectAI import DistributedObjectA"
  },
  {
    "path": "otp/snapshot/SnapshotRendererUD.py",
    "chars": 249,
    "preview": "from direct.directnotify import DirectNotifyGlobal\nfrom direct.distributed.DistributedObjectUD import DistributedObjectU"
  },
  {
    "path": "otp/snapshot/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "otp/speedchat/ColorSpace.py",
    "chars": 1392,
    "preview": "import math\n\ndef rgb2hsv(r, g, b):\n    _min = float(min(r, g, b))\n    _max = float(max(r, g, b))\n    v = _max\n    delta "
  }
]

// ... and 1668 more files (download for full content)

About this extraction

This page contains the full source code of the open-toontown/open-toontown GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1868 files (15.3 MB), approximately 4.1M tokens, and a symbol index with 28769 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!