diff --git a/dependencies/astron/dclass/stride.dc b/dependencies/astron/dclass/stride.dc index 87aa0047..0557a596 100644 --- a/dependencies/astron/dclass/stride.dc +++ b/dependencies/astron/dclass/stride.dc @@ -608,7 +608,7 @@ dclass DistributedToon : DistributedPlayer { 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,0,0,0,0]) required ownrecv db; + setEmoteAccess(uint8[] = [1,1,1,1,1,0,0,0,0,0,0,0,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; diff --git a/otp/otpbase/OTPLocalizerEnglish.py b/otp/otpbase/OTPLocalizerEnglish.py index 5edaf41f..26bdaaa2 100755 --- a/otp/otpbase/OTPLocalizerEnglish.py +++ b/otp/otpbase/OTPLocalizerEnglish.py @@ -283,6 +283,9 @@ EmoteList = ['Wave', 'Banana Peel', 'Resistance Salute', 'Laugh', + lYes, + lNo, + lOK, 'Surprise', 'Cry', 'Delighted', @@ -334,13 +337,16 @@ EmoteFuncDict = {'Wave': 0, 'Banana Peel': 14, 'Resistance Salute': 15, 'Laugh': 16, - 'Surprise': 17, - 'Cry': 18, - 'Delighted': 19, - 'Furious': 20, - 'Laugh': 21, - 'Taunt': 22, - 'Rage': 23} + lYes: 17, + lNo: 18, + lOK: 19, + 'Surprise': 20, + 'Cry': 21, + 'Delighted': 22, + 'Furious': 23, + 'Laugh': 24, + 'Taunt': 25, + 'Rage': 26} SuitBrushOffs = {'f': ["I'm late for a meeting."], 'p': ['Push off.'], 'ym': ['Yes Man says NO.'], diff --git a/toontown/catalog/CatalogGenerator.py b/toontown/catalog/CatalogGenerator.py index 3711c9a0..618f01d2 100755 --- a/toontown/catalog/CatalogGenerator.py +++ b/toontown/catalog/CatalogGenerator.py @@ -535,14 +535,14 @@ MonthlySchedule = ((7, CatalogClothingItem(1606, 0, True), CatalogClothingItem(1603, 0, True), CatalogClothingItem(1600, 0, True), - CatalogEmoteItem(22, True), - CatalogEmoteItem(23, True), - CatalogEmoteItem(17, True), - CatalogEmoteItem(18, True), - CatalogEmoteItem(19, True), + CatalogEmoteItem(25, True), + CatalogEmoteItem(26, True), CatalogEmoteItem(20, True), CatalogEmoteItem(21, True), - CatalogClothingItem(1821, True))), + CatalogEmoteItem(22, True), + CatalogEmoteItem(23, True), + CatalogEmoteItem(24, True), + CatalogClothingItem(1821, 0, True))), (5, 26, 6, diff --git a/toontown/estate/DistributedRewardCrateAI.py b/toontown/estate/DistributedRewardCrateAI.py index 179b6375..e865c943 100644 --- a/toontown/estate/DistributedRewardCrateAI.py +++ b/toontown/estate/DistributedRewardCrateAI.py @@ -64,7 +64,7 @@ class DistributedRewardCrateAI(DistributedFurnitureItemAI): self.sendUpdateToAvatarId(av.doId, 'useKeyResponse', [ToontownGlobals.CRATE_NAMETAGS, 0]) elif prizeType == ToontownGlobals.CRATE_EMOTES: playerEmotes = av.emoteAccess - remainingEmotes = [i for i, access in enumerate(playerEmotes) if not access] + remainingEmotes = [i for i, access in enumerate(playerEmotes) if (not access) and access not in (17, 18, 19)] if not remainingEmotes: self.choosePrize(av, tryNumber + 1) diff --git a/toontown/toon/DistributedToon.py b/toontown/toon/DistributedToon.py index 792a1b14..dac18f42 100755 --- a/toontown/toon/DistributedToon.py +++ b/toontown/toon/DistributedToon.py @@ -94,7 +94,7 @@ class DistributedToon(DistributedPlayer.DistributedPlayer, Toon.Toon, Distribute self.disguisePage = None self.sosPage = None self.gardenPage = None - self.emoteAccess = [0] * 24 + self.emoteAccess = [0] * 27 self.cogTypes = [0, 0, 0, 0] self.cogLevels = [0, 0, 0, 0] self.cogParts = [0, 0, 0, 0] diff --git a/toontown/toon/DistributedToonAI.py b/toontown/toon/DistributedToonAI.py index bbada645..565d97c9 100755 --- a/toontown/toon/DistributedToonAI.py +++ b/toontown/toon/DistributedToonAI.py @@ -4263,6 +4263,10 @@ def maxToon(missingTrack=None): for emoteId in OTPLocalizer.EmoteFuncDict.values(): if emoteId >= len(emotes): continue + # The following emotions are ignored because they are unable to be + # obtained: + if emoteId in (17, 18, 19): + continue emotes[emoteId] = 1 invoker.b_setEmoteAccess(emotes) @@ -4330,6 +4334,10 @@ def unlocks(): for emoteId in OTPLocalizer.EmoteFuncDict.values(): if emoteId >= len(emotes): continue + # The following emotions are ignored because they are unable to be + # obtained: + if emoteId in (17, 18, 19): + continue emotes[emoteId] = 1 invoker.b_setEmoteAccess(emotes) diff --git a/toontown/toon/TTEmote.py b/toontown/toon/TTEmote.py index c9c9eec8..666b7d40 100755 --- a/toontown/toon/TTEmote.py +++ b/toontown/toon/TTEmote.py @@ -85,6 +85,30 @@ def doSleep(toon, volume = 1): return (track, duration, exitTrack) +def doYes(toon, volume = 1): + tracks = Parallel(autoFinish=1) + for lod in toon.getLODNames(): + h = toon.getPart('head', lod) + tracks.append(Sequence(LerpHprInterval(h, 0.1, Vec3(0, -30, 0)), LerpHprInterval(h, 0.15, Vec3(0, 20, 0)), LerpHprInterval(h, 0.15, Vec3(0, -20, 0)), LerpHprInterval(h, 0.15, Vec3(0, 20, 0)), LerpHprInterval(h, 0.15, Vec3(0, -20, 0)), LerpHprInterval(h, 0.15, Vec3(0, 20, 0)), LerpHprInterval(h, 0.1, Vec3(0, 0, 0)))) + + tracks.start() + return (None, 0, None) + + +def doNo(toon, volume = 1): + tracks = Parallel(autoFinish=1) + for lod in toon.getLODNames(): + h = toon.getPart('head', lod) + tracks.append(Sequence(LerpHprInterval(h, 0.1, Vec3(40, 0, 0)), LerpHprInterval(h, 0.15, Vec3(-40, 0, 0)), LerpHprInterval(h, 0.15, Vec3(40, 0, 0)), LerpHprInterval(h, 0.15, Vec3(-40, 0, 0)), LerpHprInterval(h, 0.15, Vec3(20, 0, 0)), LerpHprInterval(h, 0.15, Vec3(-20, 0, 0)), LerpHprInterval(h, 0.1, Vec3(0, 0, 0)))) + + tracks.start() + return (None, 0, None) + + +def doOk(toon, volume = 1): + return (None, 0, None) + + def doShrug(toon, volume = 1): sfx = base.loadSfx('phase_3.5/audio/sfx/avatar_emotion_shrug.ogg') @@ -339,7 +363,10 @@ EmoteFunc = [[doWave, 0], [doBow, 0], [doSlipBackward, 0], [doResistanceSalute, 0], - [doLaugh, 0], + [doNothing, 0], + [doYes, 0], + [doNo, 0], + [doOk, 0], [doSurprise, 0], [doUpset, 0], [doDelighted, 0], @@ -369,15 +396,17 @@ class TTEmote(Emote.Emote): 13, 14, 15, - 16, - 17, - 18, - 19, 20, 21, 22, - 23] - self.headEmotes = [2] + 23, + 24, + 25, + 26] + self.headEmotes = [2, + 17, + 18, + 19] if len(self.emoteFunc) != len(OTPLocalizer.EmoteList): self.notify.error('Emote.EmoteFunc and OTPLocalizer.EmoteList are different lengths.') self.track = None