Repack sheets the client is too skinny to sample; add blobDance

A texture skinnier than 16:1 draws nothing at all. Confirmed in-game with
one crop shape across two sheets: ratJAM (32x512) renders, modCheck
(32x1024) is blank. The earlier 2048 repack fixed those sheets by accident
- two columns took them from 64:1 to 16:1, not by getting under the 1024
cap as its commit message claimed.

Twenty-seven sheets were still at 32:1 and had never rendered: modCheck,
meow, BOOBA, rooRave, Aware, Thinkge, alert and the rest. All repacked to
64x512, same frames in the same order, with their crops and metadata
updated. Verified across all 112 animated sheets: none over 1024 or
skinnier than 16:1, declared sizes match the files, frame counts fit their
grids, and every repacked frame still matches what its sheet held at that
index.

add_emote.py learns the same limit, and resamples the source timeline at a
constant rate instead of expanding holds into repeats: a hold repeats, a
source faster than the ~30fps ticker drops frames, and the loop keeps its
duration either way. blobDance is 50fps at source, so the old code stretched
its 0.74s loop to 1.23s.

Also drops the atoi note from BuildFrameString - ParseField uses atof and
tolerates decimals, so that was never the failure it described.
This commit is contained in:
Brues
2026-09-04 01:17:26 -05:00
parent 4173e827eb
commit 311359dcc8
32 changed files with 121 additions and 102 deletions
+57 -54
View File
@@ -3631,7 +3631,7 @@ defaultpack={
["HiveDiver"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\HiveDiver.tga:28:28",
["catJAM"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\catJAM.tga:28:28:0:0:64:1024:0:32:0:32",
["ratJAM"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\ratJAM.tga:28:28:0:0:32:512:0:32:0:32",
["modCheck"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\modCheck.tga:28:28:0:0:32:1024:0:32:0:32",
["modCheck"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\modCheck.tga:28:28:0:0:64:512:0:32:0:32",
["CatMad"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\CatMad.tga:28:28",
["freddyW"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\freddyW.tga:28:28",
["freddyLUL"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\freddyLUL.tga:28:28",
@@ -3656,7 +3656,7 @@ defaultpack={
["channWeen"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\channWeen.tga:28:28",
["Lole"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Lole.tga:28:28",
["GasmChamp"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\GasmChamp.tga:28:28",
["DonoWall"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\DonoWall.tga:28:28:0:0:32:1024:0:32:0:32",
["DonoWall"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\DonoWall.tga:28:28:0:0:64:512:0:32:0:32",
["sameEnergy"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\sameEnergy.tga:28:28",
["intjdreaming"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\intjdreaming.tga:28:28",
["intjXD1"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\intjXD1.tga:28:28",
@@ -3710,7 +3710,7 @@ defaultpack={
["AbdulPls"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\AbdulPls.tga:28:28:0:0:32:512:0:32:0:32",
["PunkChamp"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\PunkChamp.tga:28:28",
["batBrah"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\batBrah.tga:28:28",
[":Aware:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Aware.tga:28:28:0:0:32:1024:0:32:0:32",
[":Aware:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Aware.tga:28:28:0:0:64:512:0:32:0:32",
[":Concerned:"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Concerned.tga:28:28",
["HmmTodayIWill"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\HmmTodayIWill.tga:28:28",
["NoBitches"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\NoBitches.tga:28:28",
@@ -3725,8 +3725,8 @@ defaultpack={
["Catablepon"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Catablepon.tga:28:28",
["HUH"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\HUH.tga:28:28",
["jewdai"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\jewdai.tga:28:28",
["YodaSip"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\YodaSip.tga:28:28:0:0:32:1024:0:32:0:32",
["billyReady"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\billyReady.tga:28:28:0:0:32:1024:0:32:0:32",
["YodaSip"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\YodaSip.tga:28:28:0:0:64:512:0:32:0:32",
["billyReady"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\billyReady.tga:28:28:0:0:64:512:0:32:0:32",
[":soy:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\soy.tga:28:28:0:0:32:128:0:32:0:32",
["ICANT"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\ICANT.tga:28:28",
["megaflushed"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\megaflushed.tga:28:28",
@@ -3734,34 +3734,34 @@ defaultpack={
["Sussy"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Sussy.tga:28:28:0:0:32:256:0:32:0:32",
["worryFat"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\worryFat.tga:28:28",
["WrathChest"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\WrathChest.tga:28:28",
["MoneySniff"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\MoneySniff.tga:28:28:0:0:32:1024:0:32:0:32",
["GAMING"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\GAMING.tga:28:28:0:0:32:1024:0:32:0:32",
["RAGEY"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\RAGEY.tga:28:28:0:0:32:1024:0:32:0:32",
["MoneySniff"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\MoneySniff.tga:28:28:0:0:64:512:0:32:0:32",
["GAMING"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\GAMING.tga:28:28:0:0:64:512:0:32:0:32",
["RAGEY"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\RAGEY.tga:28:28:0:0:64:512:0:32:0:32",
["hehecat"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\hehecat.tga:28:28",
["TeaTime"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\TeaTime.tga:28:28:0:0:32:1024:0:32:0:32",
["TeaTime"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\TeaTime.tga:28:28:0:0:64:512:0:32:0:32",
[":WM:"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\WM.tga:28:28",
[":noted:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\noted.tga:28:28:0:0:32:1024:0:32:0:32",
[":noted:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\noted.tga:28:28:0:0:64:512:0:32:0:32",
["YOGGERS"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\YOGGERS.tga:28:28",
["HYPERYOGGERS"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\HYPERYOGGERS.tga:28:28:0:0:32:64:0:32:0:32",
[":xdd:"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\xdd.tga:28:28",
[":meow:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\meow.tga:28:28:0:0:32:1024:0:32:0:32",
[":meow:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\meow.tga:28:28:0:0:64:512:0:32:0:32",
["HUHH"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\HUHH.tga:28:28:0:0:64:1024:0:32:0:32",
["RIPBOZO"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\RIPBOZO.tga:28:28:0:0:32:1024:0:32:0:32",
["RIPBOZO"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\RIPBOZO.tga:28:28:0:0:64:512:0:32:0:32",
["evilcat"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\evilcat.tga:28:28",
["bufeY"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\bufeY.tga:28:28",
["deanWink"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\deanWink.tga:28:28:0:0:32:512:0:32:0:32",
["DocLeave"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\DocLeave.tga:28:28:0:0:32:1024:0:32:0:32",
["DocArrive"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\DocArrive.tga:28:28:0:0:32:1024:0:32:0:32",
["DocLeave"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\DocLeave.tga:28:28:0:0:64:512:0:32:0:32",
["DocArrive"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\DocArrive.tga:28:28:0:0:64:512:0:32:0:32",
[":alarm:"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\alarm.tga:28:28",
["angrybear"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\angrybear.tga:28:28",
["docmeat"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\docmeat.tga:28:28:0:0:32:512:0:32:0:32",
["politeCatWTF"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\politeCatWTF.tga:28:28",
["SNIFFA"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\SNIFFA.tga:28:28:0:0:32:1024:0:32:0:32",
["SNIFFA"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\SNIFFA.tga:28:28:0:0:64:512:0:32:0:32",
[":kissing:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Kiss.tga:28:28:0:0:64:1024:0:32:0:32",
["bidenBlast"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\bidenBlast.tga:28:28",
[":om:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\om.tga:28:28:0:0:32:128:0:32:0:32",
[":Classic:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Classic.tga:28:28:0:0:32:1024:0:32:0:32",
[":yo:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\yo.tga:28:28:0:0:32:1024:0:32:0:32",
[":Classic:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Classic.tga:28:28:0:0:64:512:0:32:0:32",
[":yo:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\yo.tga:28:28:0:0:64:512:0:32:0:32",
["bange"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\bange.tga:28:28",
[":kms:"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\kms.tga:28:28",
["headBang"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\headBang.tga:28:28:0:0:32:256:0:32:0:32",
@@ -3774,11 +3774,11 @@ defaultpack={
["Kekflap"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Kekflap.tga:28:28:0:0:32:64:0:32:0:32",
["businesscat"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\businesscat.tga:28:28",
["LETHIMCOOK"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\LETHIMCOOK.tga:28:28",
["ChipiChipi"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\ChipiChipi.tga:28:28:0:0:32:1024:0:32:0:32",
["ChipiChipi"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\ChipiChipi.tga:28:28:0:0:64:512:0:32:0:32",
[":horror:"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\horror.tga:28:28",
["MikeSmug"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\MikeSmug.tga:28:28",
["BedgeMorgan"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\BedgeMorgan.tga:28:28",
[":alert:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\alert.tga:28:28:0:0:32:1024:0:32:0:32",
[":alert:"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\alert.tga:28:28:0:0:64:512:0:32:0:32",
[":groove:"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\groove.tga:28:28",
["LETSGOOO"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\LETSGOOO.tga:28:28:0:0:32:512:0:32:0:32",
["pedro"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\pedro.tga:28:28:0:0:64:1024:0:32:0:32",
@@ -3976,7 +3976,7 @@ defaultpack={
["PepePuke"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\PepePuke.tga:28:28",
["PepegaHammer"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\PepegaHammer.tga:28:28",
["Sadga"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Sadga.tga:28:28",
["BOOBA"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\BOOBA.tga:28:28:0:0:32:1024:0:32:0:32",
["BOOBA"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\BOOBA.tga:28:28:0:0:64:512:0:32:0:32",
["COCKA"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\COCKA.tga:28:28:0:0:32:256:0:32:0:32",
["FUTA"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\FUTA.tga:28:28:0:0:32:512:0:32:0:32",
["BOOFA"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\BOOFA.tga:28:28",
@@ -4021,7 +4021,7 @@ defaultpack={
["soupchamp"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\soupchamp.tga:28:28",
["Starege"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Starege.tga:28:28",
["Hmmmge"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Hmmmge.tga:28:28",
["lovehug"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\lovehug.tga:28:28:0:0:32:1024:0:32:0:32",
["lovehug"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\lovehug.tga:28:28:0:0:64:512:0:32:0:32",
["Madgee"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Madgee.tga:28:28",
["Clownge"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Clownge.tga:28:28",
["ehWTF"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\ehWTF.tga:28:28",
@@ -4063,7 +4063,7 @@ defaultpack={
["FeelsLateMan"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\FeelsLateMan.tga:28:28:0:0:32:512:0:32:0:32",
["CROGGERS"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\CROGGERS.tga:28:28",
["DinkDonk"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\DinkDonk.tga:28:28:0:0:32:64:0:32:0:32",
["Thinkge"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Thinkge.tga:28:28:0:0:32:1024:0:32:0:32",
["Thinkge"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Thinkge.tga:28:28:0:0:64:512:0:32:0:32",
[":fml:"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\fml.tga:28:28",
["binocs"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\binocs.tga:28:28",
["PepePlan"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\PepePlan.tga:28:28",
@@ -4089,7 +4089,7 @@ defaultpack={
["Readge"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Readge.tga:28:28",
["peepoChop"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoChop.tga:28:28:0:0:32:256:0:32:0:32",
["monkaSteer"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\monkaSteer.tga:28:28:0:0:32:512:0:32:0:32",
["ppHop"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\ppHop.tga:28:28:0:0:32:1024:0:32:0:32",
["ppHop"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\ppHop.tga:28:28:0:0:64:512:0:32:0:32",
["FeelsWeakMan"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\FeelsWeakMan.tga:28:28:0:0:32:512:0:32:0:32",
["PepegaCredit"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\PepegaCredit.tga:28:28:0:0:32:512:0:32:0:32",
["PepeNOOO"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\PepeNOOO.tga:28:28:0:0:32:256:0:32:0:32",
@@ -4104,7 +4104,7 @@ defaultpack={
["sadgers"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\sadgers.tga:28:28",
["gladgers"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\gladgers.tga:28:28",
["Voidge"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Voidge.tga:28:28",
["peepoGhost"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoGhost.tga:28:28:0:0:32:1024:0:32:0:32",
["peepoGhost"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoGhost.tga:28:28:0:0:64:512:0:32:0:32",
["Smoge"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Smoge.tga:28:28",
["NeedCopium"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\NeedCopiumPepe.tga:28:28",
["Bedges"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Bedges.tga:28:28",
@@ -4192,7 +4192,7 @@ defaultpack={
["PogOff"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\GuildEmotes\\PogOff.tga:28:28",
["Pausey"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\GuildEmotes\\Pausey.tga:28:28",
["RowSalt"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\GuildEmotes\\RowSalt.tga:56:56",
["PogTasty"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\GuildEmotes\\PogTasty.tga:28:28:0:0:32:1024:0:32:0:32",
["PogTasty"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\GuildEmotes\\PogTasty.tga:28:28:0:0:64:512:0:32:0:32",
["TriTasty"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\GuildEmotes\\TriTasty.tga:28:28",
[":twoofakind:"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\GuildEmotes\\Maya.tga:28:28",
["RowFish"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\GuildEmotes\\RowFish.tga:28:28",
@@ -4230,7 +4230,7 @@ defaultpack={
["rooC"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\AdmiralBahroo\\rooC.tga:28:28",
["rooComfy"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\AdmiralBahroo\\rooComfy.tga:28:28",
["rooMadSlam"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\AdmiralBahroo\\rooMadSlam.tga:28:28:0:0:32:512:0:32:0:32",
["rooRave"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\AdmiralBahroo\\rooRave.tga:28:28:0:0:32:1024:0:32:0:32",
["rooRave"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\AdmiralBahroo\\rooRave.tga:28:28:0:0:64:512:0:32:0:32",
["drxCozy"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Drainerx\\drxCozy.tga:28:28",
["drxLUL"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Drainerx\\drxLUL.tga:28:28",
["drxHappy"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\Drainerx\\drxHappy.tga:28:28",
@@ -4255,6 +4255,7 @@ defaultpack={
["typegYIP"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\typeg\\typegYIP.tga:28:28",
["typegChill"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\typeg\\typegChill.tga:28:28",
["typegBricked"] = "Interface\\AddOns\\TwitchEmotes\\Emotes\\typeg\\typegBricked.tga:28:28",
["blobDance"]="Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\blobDance.tga:28:28:0:0:64:512:0:32:0:32",
};
emoticons={
@@ -8920,12 +8921,13 @@ defaultpack={
["typegChill"] = "typegChill",
["typegBricked"] = "typegBricked",
[":twoofakind:"]=":twoofakind:",
["blobDance"]="blobDance",
};
TwitchEmotes_animation_metadata = {
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Clap.tga"] = {["nFrames"] = 2, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=64, ["framerate"] = 6},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\modCheck.tga"] = {["nFrames"] = 28, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 9},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\modCheck.tga"] = {["nFrames"] = 28, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 9},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\goinginsane.tga"] = {["nFrames"] = 47, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=1024, ["framerate"] = 25},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\catJAM.tga"] = {["nFrames"] = 60, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=1024, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\ratJAM.tga"] = {["nFrames"] = 16, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 15},
@@ -8936,9 +8938,9 @@ TwitchEmotes_animation_metadata = {
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\worryPopcorn.tga"] = {["nFrames"] = 4, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=128, ["framerate"] = 26},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\worryExcite.tga"] = {["nFrames"] = 4, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=128, ["framerate"] = 26},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\AbdulPls.tga"] = {["nFrames"] = 10, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 24},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\lovehug.tga"] = {["nFrames"] = 20, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\lovehug.tga"] = {["nFrames"] = 20, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\monkaX.tga"] = {["nFrames"] = 10, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 11},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\BOOBA.tga"] = {["nFrames"] = 27, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 16},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\BOOBA.tga"] = {["nFrames"] = 27, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 16},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\MadgeRightNow.tga"] = {["nFrames"] = 2, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=64, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\shy.tga"] = {["nFrames"] = 2, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=64, ["framerate"] = 4},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\DinkDonk.tga"] = {["nFrames"] = 2, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=64, ["framerate"] = 20},
@@ -8949,7 +8951,7 @@ TwitchEmotes_animation_metadata = {
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\FUTA.tga"] = {["nFrames"] = 12, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\NODDERS.tga"] = {["nFrames"] = 4, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=128, ["framerate"] = 14},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\NOPERS.tga"] = {["nFrames"] = 8, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 14},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\DonoWall.tga"] = {["nFrames"] = 24, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 8},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\DonoWall.tga"] = {["nFrames"] = 24, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 8},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\WICKEDSTEER.tga"] = {["nFrames"] = 15, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 16},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\WICKED.tga"] = {["nFrames"] = 4, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=128, ["framerate"] = 16},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\ClownHypers.tga"] = {["nFrames"] = 6, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 6},
@@ -8957,7 +8959,7 @@ TwitchEmotes_animation_metadata = {
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\CatDance.tga"] = {["nFrames"] = 8, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 12},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\FeelsLoveMan.tga"] = {["nFrames"] = 12, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\AdmiralBahroo\\rooMadSlam.tga"] = {["nFrames"] = 11, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 14},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\AdmiralBahroo\\rooRave.tga"] = {["nFrames"] = 25, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 24},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\AdmiralBahroo\\rooRave.tga"] = {["nFrames"] = 25, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 24},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\worryStick.tga"] = {["nFrames"] = 12, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 40},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\PepeJAM.tga"] = {["nFrames"] = 4, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=128, ["framerate"] = 14},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoSmash.tga"] = {["nFrames"] = 8, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 12},
@@ -8965,56 +8967,56 @@ TwitchEmotes_animation_metadata = {
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Chatting.tga"] = {["nFrames"] = 10, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 40},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoGiggle.tga"] = {["nFrames"] = 6, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 40},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\FeelsRainMan.tga"] = {["nFrames"] = 14, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 25},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoPat.tga"] = {["nFrames"] = 22, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoPat.tga"] = {["nFrames"] = 22, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoEhm.tga"] = {["nFrames"] = 6, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 1},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\monkaInsane.tga"] = {["nFrames"] = 10, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 60},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\FeelsLateMan.tga"] = {["nFrames"] = 16, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 8},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\GuildEmotes\\SadCatWave.tga"] = {["nFrames"] = 2, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=64, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Aware.tga"] = {["nFrames"] = 31, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Aware.tga"] = {["nFrames"] = 31, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\FeelsNzoth.tga"] = {["nFrames"] = 9, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 12},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Thinkge.tga"] = {["nFrames"] = 28, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 12},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Thinkge.tga"] = {["nFrames"] = 28, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 12},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\FeelsIllidanMan.tga"] = {["nFrames"] = 10, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 18},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\BTTV+FFZ\\gachiBASS.tga"] = {["nFrames"] = 10, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 40},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\BTTV+FFZ\\pokiBASS.tga"] = {["nFrames"] = 8, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 30},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\YodaSip.tga"] = {["nFrames"] = 22, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\billyReady.tga"] = {["nFrames"] = 18, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\YodaSip.tga"] = {["nFrames"] = 22, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\billyReady.tga"] = {["nFrames"] = 18, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\soy.tga"] = {["nFrames"] = 4, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=128, ["framerate"] = 14},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Sussy.tga"] = {["nFrames"] = 5, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 20},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoChop.tga"] = {["nFrames"] = 5, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 20},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\monkaSteer.tga"] = {["nFrames"] = 13, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 20},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\ppHop.tga"] = {["nFrames"] = 19, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\ppHop.tga"] = {["nFrames"] = 19, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\FeelsWeakMan.tga"] = {["nFrames"] = 15, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 12},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\PepegaCredit.tga"] = {["nFrames"] = 15, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 16},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\MoneySniff.tga"] = {["nFrames"] = 25, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\GAMING.tga"] = {["nFrames"] = 20, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\MoneySniff.tga"] = {["nFrames"] = 25, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\GAMING.tga"] = {["nFrames"] = 20, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\PepeNOOO.tga"] = {["nFrames"] = 7, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 20},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\PepeSith.tga"] = {["nFrames"] = 12, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\POGGIES.tga"] = {["nFrames"] = 8, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 12},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\RAGEY.tga"] = {["nFrames"] = 31, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\TeaTime.tga"] = {["nFrames"] = 31, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\GuildEmotes\\PogTasty.tga"] = {["nFrames"] = 31, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 13},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\noted.tga"] = {["nFrames"] = 30, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\RAGEY.tga"] = {["nFrames"] = 31, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\TeaTime.tga"] = {["nFrames"] = 31, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\GuildEmotes\\PogTasty.tga"] = {["nFrames"] = 31, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 13},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\noted.tga"] = {["nFrames"] = 30, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\HYPEROMEGAPOGGERSCRAZY.tga"] = {["nFrames"] = 2, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=64, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\meow.tga"] = {["nFrames"] = 24, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 11},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\meow.tga"] = {["nFrames"] = 24, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 11},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\HUHH.tga"] = {["nFrames"] = 47, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=1024, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\RIPBOZO.tga"] = {["nFrames"] = 28, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 13},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\RIPBOZO.tga"] = {["nFrames"] = 28, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 13},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoStrong.tga"] = {["nFrames"] = 4, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=128, ["framerate"] = 14},["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoHorse.tga"] = {["nFrames"] = 13, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 40},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoPolice.tga"] = {["nFrames"] = 4, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=128, ["framerate"] = 14},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\HYPERYOGGERS.tga"] = {["nFrames"] = 2,["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=64, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\deanWink.tga"] = {["nFrames"] = 14, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoGhost.tga"] = {["nFrames"] = 25, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\DocLeave.tga"] = {["nFrames"] = 20, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\DocArrive.tga"] = {["nFrames"] = 20, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoGhost.tga"] = {["nFrames"] = 25, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\DocLeave.tga"] = {["nFrames"] = 20, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\DocArrive.tga"] = {["nFrames"] = 20, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\MadgeClap.tga"] = {["nFrames"] = 2, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=64, ["framerate"] = 12},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\FeelsQueueMan.tga"] = {["nFrames"] = 11, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 8},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\docmeat.tga"] = {["nFrames"] = 16, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\YEPPERS.tga"] = {["nFrames"] = 12, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 20},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\SNIFFA.tga"] = {["nFrames"] = 20, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\SNIFFA.tga"] = {["nFrames"] = 20, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Kiss.tga"] = {["nFrames"] = 38, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=1024, ["framerate"] = 20},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\om.tga"] = {["nFrames"] = 4, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=128, ["framerate"] = 14},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Classic.tga"] = {["nFrames"] = 26, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Classic.tga"] = {["nFrames"] = 26, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\binocsSpin.tga"] = {["nFrames"] = 5, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\yo.tga"] = {["nFrames"] = 22, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\yo.tga"] = {["nFrames"] = 22, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepoShake.tga"] = {["nFrames"] = 5, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 20},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\headBang.tga"] = {["nFrames"] = 6, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 25},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\BLUBBERS.tga"] = {["nFrames"] = 2, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=64, ["framerate"] = 12},
@@ -9026,10 +9028,11 @@ TwitchEmotes_animation_metadata = {
["Interface\\AddOns\\TwitchEmotes\\Emotes\\typeg\\typegLoad.tga"] = {["nFrames"] = 8, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=256, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\typeg\\typegPaul.tga"] = {["nFrames"] = 10, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 15},["Interface\\AddOns\\TwitchEmotes\\Emotes\\typeg\\hyperjoy.tga"] = {["nFrames"] = 9, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Kekflap.tga"] = {["nFrames"] = 2, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=64, ["framerate"] = 15},["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\Awoken.tga"] = {["nFrames"] = 38, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=1024, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\ChipiChipi.tga"] = {["nFrames"] = 24, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 25},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\alert.tga"] = {["nFrames"] = 17, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=1024, ["framerate"] = 40},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\ChipiChipi.tga"] = {["nFrames"] = 24, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 25},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\alert.tga"] = {["nFrames"] = 17, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 40},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\LETSGOOO.tga"] = {["nFrames"] = 11, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=512, ["framerate"] = 20},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\pedro.tga"] = {["nFrames"] = 48, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=1024, ["framerate"] = 10},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\peepofeet.tga"] = {["nFrames"] = 3, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=32, ["imageHeight"]=128, ["framerate"] = 15},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Nerdge.tga"] = {["nFrames"] = 36, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=1024, ["framerate"] = 11},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Pepes\\Nerdge.tga"] = {["nFrames"] = 37, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=1024, ["framerate"] = 12},
["Interface\\AddOns\\TwitchEmotes\\Emotes\\Custom\\blobDance.tga"] = {["nFrames"] = 22, ["frameWidth"] = 32, ["frameHeight"] = 32, ["imageWidth"]=64, ["imageHeight"]=512, ["framerate"] = 30},
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 128 KiB

+1 -1
View File
@@ -71,7 +71,7 @@ Emoticons_Settings={
[1]= {"Asmongold","asmon1","asmon2","asmon3","asmon4","asmonBoi","asmonC","asmonCD","asmonD","asmonDad","asmonDaze","asmonDegen","asmonE","asmonE1","asmonE2","asmonE3","asmonE4","asmonFiend","asmonG","asmonGASM","asmonGet","asmonHide","asmonL","asmonLFR","asmonLong1","asmonLong2","asmonLong3","asmonLong4","asmonLove","asmonM","asmonOcean","asmonOrc","asmonP","asmonPower","asmonPray","asmonPrime","asmonR","asmonREE","asmonSad","asmonStare","asmonTar","asmonTiger","asmonUH","asmonW","asmonWHAT","asmonWHATR","asmonWOW"},
[2]= {"Preachlfw","pgeBan","pgeBen","pgeBrian","pgeCheese","pgeChick","pgeClub","pgeCrisp","pgeDrama","pgeEdge","pgeEmma","pgeFish","pgeGhost","pgeHmm","pgeNem","pgeNoob","pgeOhno","pgeOhno2","pgePog","pgePug","pgeRay","pgeScience","pgeShame","pgeSherry"},
[3]= {"BTTV+FFZ","4Head","ANELE","AngelThump","BabyRage","BBona","BibleThump","BlessRNG","BloodTrail","bUrself","cmonBrother","cmonBrug","cmonBruh","ConcernDoge","ConcernFroge","D:","DansGame","DatSheffy","DD:","DogeWitIt","EleGiggle","eShrug","FacePalm","FailFish","FrankerZ","GabeN","gachiBASS","gachiGASM","gachiHYPER","GivePLZ","haHAA","HandsUp","HeyGuys","HotPokket","HYPERBRUG","HYPERLUL","HYPERTHONK","Jebaited","Kapp","Kappa","KappaPride","Keepo","KKomrade","Kreygasm","LUL","LULE","LULW","MegaLUL","MingLee","MingLUL","MrDestructoid","NickyQ","NotLike","NotLikeThis","o_O","OhMyDog","OpieOP","PagMan","PartyTime","pokiBASS","PotFriend","PowerUpL","PowerUpR","RCool","ResidentSleeper","RFrown","RGasp","RHeart","RMeh","RPatch","RSmile","RSmiling","RTired","RTongue","RWink","RWinkTongue","SeemsGood","smileC","smileW","SMOrc","Squid1","Squid2","Squid3","Squid4","SwiftRage","TakeNRG","Thonk","tooDank","TriHard","weSmart","WideHard","WinnerWinner","WTFF","Wut","WutFace","ZULOL","ZULUL"},
[4]= {"Custom","4Play","4WeirdBusiness",":alarm:",":alert:",":Aware:",":Awoken:",":blinking:",":Classic:",":Clueless:",":Concerned:",":cringe:",":doo:",":empty:",":ew:",":groove:",":hehe:",":hehesip:",":horror:",":jons:",":kissing:",":kms:",":mc:",":meow:",":misery:",":mo:",":noted:",":om:",":penguin:",":pls:",":queen:",":quest:",":sitch:",":soy:",":torment:",":waiting:",":WM:",":xdd:",":yo:","AbdulPls","AMAZIN","ANEBruh","angrybear","arnoldHalt","AYAYA","bange","batBrah","BedgeMorgan","bidenBlast","bign","billyReady","bjornoVV","bjornoVVona","BOGGED","bruggaroniNcheese","bufeY","businesscat","Catablepon","CatDance","catJAM","CatMad","CatPop","channMies","channWeen","ChipiChipi","chompy","chupBro","chupDerp","chupHappy","ciaciuu","ciaciuWorried","Clap","Cluegi","cmon","confuseddoggo","cptfriHE","CUNGUS","deanWink","Del","Depresstiny","DestiSenpaii","Disgustiny","DocArrive","DocLeave","docmeat","DogeKek","DonoWall","ednasly","Eggroll","endANELE","endBomb","endDawg","endFrench","endHarambe","endKyori","endNotLikeThis","endRP","endTrump","evilcat","fentL","FlipThis","FLOOSHED","flushdoggo","foxsus","freddyCREEP","freddyFINGER","freddyLUL","freddyW","FrogPog","fruitBug","GAMING","GasmChamp","GigaChad","GODSTINY","goinginsane","HappyMerchant","headBang","hehecat","HiveDiver","HmmStiny","HmmTodayIWill","HowSleeper","HUH","HUHH","HyperAngryMerchant","HYPERYOGGERS","ICANT","intjCaught","intjdreaming","intjGlad","intjIdk","intjMad","intjReallyMad","intjSad","intjSalute","intjShake","intjSmile","intjSus","intjWoa","intjXD1","intjXD2","jerryWhat","jewdai","jillzoMallet","jinL","Jons","Joy2","Kekflap","KEKok","KEKWait","KermitScream","KKonaS","Klappa","KomodoHype","Krug","LaurGasm","LeoHug","LeRuse","LETHIMCOOK","LETSGOOO","lockOmegatayys","LockStone","Lole","LOLW","marcithDerp","marcithMath","mastahFloor","megaflushed","MikeSmug","modCheck","MoneySniff","monkeyS","MooCowGold","MooCowW","moWait","MrStark","NeckBeard","NoAnime","NoBitches","NOBULLY","NoTears","OKKona","oldmorDim","OMEGAKEKMAN","OMEGALOL","OverRustle","PatrickMad","PatrickPray","pedro","peepoVW","PEPE","PogCena","PogT","poki1","poki2","pokiW","politeCatWTF","Popoga","PunkChamp","RAGEY","ratJAM","REE","RIPBOZO","sameEnergy","selyihHEY","SNIFFA","StareBruh","Stonks","SuicideThinking","sunglassesflushed","SURPRISE","susfox","Sussy","SWEATSTINY","TeaTime","ThisIsFine","ThumbsUp","totekatze","TrollDespair","TrollLaugh","VoHiYo","WeirdAYAYA","worryChocolate","worryCool","worryExcite","worryFat","worryHug","worryHugged","worryLove","worryPopcorn","worryStick","worryWave","WrathChest","yacubgasm","YEE","yeshoney","YodaSip","YOGGERS","YoshiBlush","ZOINKS"},
[4]= {"Custom","4Play","4WeirdBusiness",":alarm:",":alert:",":Aware:",":Awoken:",":blinking:",":Classic:",":Clueless:",":Concerned:",":cringe:",":doo:",":empty:",":ew:",":groove:",":hehe:",":hehesip:",":horror:",":jons:",":kissing:",":kms:",":mc:",":meow:",":misery:",":mo:",":noted:",":om:",":penguin:",":pls:",":queen:",":quest:",":sitch:",":soy:",":torment:",":waiting:",":WM:",":xdd:",":yo:","AbdulPls","AMAZIN","ANEBruh","angrybear","arnoldHalt","AYAYA","bange","batBrah","BedgeMorgan","bidenBlast","bign","billyReady","bjornoVV","bjornoVVona","blobDance","BOGGED","bruggaroniNcheese","bufeY","businesscat","Catablepon","CatDance","catJAM","CatMad","CatPop","channMies","channWeen","ChipiChipi","chompy","chupBro","chupDerp","chupHappy","ciaciuu","ciaciuWorried","Clap","Cluegi","cmon","confuseddoggo","cptfriHE","CUNGUS","deanWink","Del","Depresstiny","DestiSenpaii","Disgustiny","DocArrive","DocLeave","docmeat","DogeKek","DonoWall","ednasly","Eggroll","endANELE","endBomb","endDawg","endFrench","endHarambe","endKyori","endNotLikeThis","endRP","endTrump","evilcat","fentL","FlipThis","FLOOSHED","flushdoggo","foxsus","freddyCREEP","freddyFINGER","freddyLUL","freddyW","FrogPog","fruitBug","GAMING","GasmChamp","GigaChad","GODSTINY","goinginsane","HappyMerchant","headBang","hehecat","HiveDiver","HmmStiny","HmmTodayIWill","HowSleeper","HUH","HUHH","HyperAngryMerchant","HYPERYOGGERS","ICANT","intjCaught","intjdreaming","intjGlad","intjIdk","intjMad","intjReallyMad","intjSad","intjSalute","intjShake","intjSmile","intjSus","intjWoa","intjXD1","intjXD2","jerryWhat","jewdai","jillzoMallet","jinL","Jons","Joy2","Kekflap","KEKok","KEKWait","KermitScream","KKonaS","Klappa","KomodoHype","Krug","LaurGasm","LeoHug","LeRuse","LETHIMCOOK","LETSGOOO","lockOmegatayys","LockStone","Lole","LOLW","marcithDerp","marcithMath","mastahFloor","megaflushed","MikeSmug","modCheck","MoneySniff","monkeyS","MooCowGold","MooCowW","moWait","MrStark","NeckBeard","NoAnime","NoBitches","NOBULLY","NoTears","OKKona","oldmorDim","OMEGAKEKMAN","OMEGALOL","OverRustle","PatrickMad","PatrickPray","pedro","peepoVW","PEPE","PogCena","PogT","poki1","poki2","pokiW","politeCatWTF","Popoga","PunkChamp","RAGEY","ratJAM","REE","RIPBOZO","sameEnergy","selyihHEY","SNIFFA","StareBruh","Stonks","SuicideThinking","sunglassesflushed","SURPRISE","susfox","Sussy","SWEATSTINY","TeaTime","ThisIsFine","ThumbsUp","totekatze","TrollDespair","TrollLaugh","VoHiYo","WeirdAYAYA","worryChocolate","worryCool","worryExcite","worryFat","worryHug","worryHugged","worryLove","worryPopcorn","worryStick","worryWave","WrathChest","yacubgasm","YEE","yeshoney","YodaSip","YOGGERS","YoshiBlush","ZOINKS"},
[5]= {"Greekgodx","greekA","greekBrow","greekDiet","greekGirl","greekGordo","greekGweek","greekHard","greekHYPERP","greekJoy","greekKek","greekM","greekMlady","greekOi","greekP","greekPVC","greekSad","greekSheep","greekSleeper","greekSquad","greekT","greekThink","greekTilt","greekWC","greekWhy","greekWtf","greekYikes"},
[6]= {"nymn","nymn0","nymn1","nymn158","nymn2","nymn2x","nymn3","nymnA","nymnAww","nymnB","nymnBee","nymnBenis","nymnBiggus","nymnBridge","nymnC","nymnCaptain","nymnCC","nymnCD","nymnCozy","nymnCREB","nymnCringe","nymnCry","nymnDab","nymnDeer","nymnE","nymnElf","nymnEU","nymnEZ","nymnFEEDME","nymnFlag","nymnFlick","nymnFood","nymnG","nymnGasm","nymnGasp","nymnGnome","nymnGold","nymnGolden","nymnGun","nymnH","nymnHammer","nymnHmm","nymnHonk","nymnHydra","nymnJoy","nymnK","nymnKek","nymnKing","nymnKomrade","nymnL","nymnM","nymnNA","nymnNo","nymnNormie","nymnOkay","nymnP","nymnPains","nymnPog","nymnPuke","nymnR","nymnRaffle","nymnRupert","nymnS","nymnSad","nymnScuffed","nymnSleeper","nymnSmart","nymnSmol","nymnSmug","nymnSon","nymnSoy","nymnSpurdo","nymnStrong","nymnThink","nymnTransparent","nymnU","nymnV","nymnW","nymnWhy","nymnXD","nymnY","nymnZ"},
[7]= {"Drainerx","drxBrain","drxCozy","drxCri","drxCS","drxD","drxDict","drxED","drxED2","drxEyes","drxFE","drxFE1","drxFEED","drxGlad","drxGod","drxHappy","drxHey","drxKEK","drxLewd","drxLit","drxLUL","drxMad","drxmonkaEYES","drxPog","drxR","drxSad","drxSmart","drxSmile","drxSpace","drxSSJ","drxThink","drxW","drxWeird","drxWink"},
+7 -7
View File
@@ -21,10 +21,11 @@ local function GetCurrentFrameNum(animdata)
return math.floor((TWITCHEMOTES_T * animdata.framerate) % animdata.nFrames)
end
-- Frames run row-major across however many columns the sheet is wide. The
-- client caps a texture at 1024px in either dimension (nothing in its own art
-- exceeds it) and squeezes anything larger on load, so the longest animations
-- are packed as two 32px columns rather than one over-tall strip.
-- Frames run row-major across however many columns the sheet is wide. Two
-- client limits force that: no texture side may exceed 1024, and a texture
-- skinnier than 16:1 doesn't draw at all -- a 32x1024 strip renders nothing,
-- while the same frames as 64x512 render fine. So a run longer than 16 frames
-- is packed in columns rather than as one tall strip.
local function GetFrameRect(animdata, framenum)
local cols = math.floor(animdata.imageWidth / animdata.frameWidth)
if cols < 1 then cols = 1 end
@@ -40,9 +41,8 @@ local function CropToCurrentFrame(tex, animdata)
top / animdata.imageHeight, bottom / animdata.imageHeight)
end
-- The engine splits the payload on ':' and atoi's each field, so a coordinate
-- carrying a decimal point silently truncates and crops the wrong rect (a
-- fractional framerate is enough to leak one in). Format them as integers.
-- The crop bounds are texel offsets, so emit them as integers rather than
-- letting a float from the frame maths stringify into the payload.
local function BuildFrameString(imagepath, animdata, framenum, w, h)
local left, right, top, bottom = GetFrameRect(animdata, framenum)
return ("|T%s:%d:%d:0:0:%d:%d:%d:%d:%d:%d|t"):format(imagepath, w, h,
+56 -40
View File
@@ -13,12 +13,14 @@ Two client constraints drive the conversion:
longer than 32 frames is packed row-major across several 32px columns
rather than one over-tall strip. TwitchEmotesAnimator derives the column
count from imageWidth / frameWidth.
* The animator plays frames at one constant rate, but GIFs hold individual
frames for different lengths. Uneven delays are expanded into repeated
frames at whichever integer rate reproduces the original timing most
closely within the frame budget.
* The animator plays frames at one constant rate off a ~30fps ticker, but a
GIF holds each frame for as long as it likes. The source timeline is
resampled at a constant rate instead: a long hold repeats, and a source
faster than the ticker (or too long for the frame budget) drops frames.
The loop keeps its original duration either way.
"""
import argparse
import bisect
import os
import re
import struct
@@ -30,6 +32,7 @@ from PIL import Image, ImageSequence
CDN = 'https://cdn.betterttv.net/emote/%s/%s'
FRAME = 32 # frame size in the sheet; emotes render at 28x28
MAX_TEXTURE = 1024 # client cap, per side
MAX_ASPECT = 16 # see layout(): skinnier than this and nothing draws
MAX_COLS = 4 # 4 * 32 = 128px wide, 128 frames at most
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
@@ -69,44 +72,59 @@ def load_frames(blob):
return frames, durations
TIMING_TOLERANCE = 0.05 # 5% drift over a loop is not perceptible
TICKER_FPS = 30 # TwitchEmotesAnimator advances frames on a ~30fps ticker
def pick_framerate(durations, budget):
"""Integer fps whose repeated frames reproduce the source timing.
def resample(durations, budget):
"""Sample the source timeline at a constant rate the animator can play.
Returns (fps, repeats). Every frame is shown at least once, so a rate too
slow to represent the shortest delay simply rounds it up. Among the rates
that hold the loop length within tolerance, the one needing the fewest
frames wins - a faster rate can always match the duration more exactly, but
it pays for that in texture size.
Returns (fps, indices): which source frame to show on each tick. Sampling
handles both directions - a frame held longer than a tick repeats, and a
source faster than the ticker (or too long for the frame budget) drops
frames. Either way the loop keeps the source's duration, which matters more
than showing every frame: nothing above the ticker rate can be displayed
anyway.
"""
total = sum(durations) / 1000.0
candidates = []
for fps in range(1, 31):
repeats = [max(1, int(round(d * fps / 1000.0))) for d in durations]
if sum(repeats) > budget:
continue
error = abs(sum(repeats) / float(fps) - total)
candidates.append((error, sum(repeats), fps, repeats))
if not candidates:
total = sum(durations)
if not total:
sys.exit('animation has no frame delays to time it by')
shortest = min(d for d in durations if d > 0)
fps = min(TICKER_FPS, max(1, int(round(1000.0 / shortest))))
while fps > 1 and int(round(total * fps / 1000.0)) > budget:
fps -= 1
count = max(1, int(round(total * fps / 1000.0)))
if count > budget:
sys.exit('animation does not fit in %d frames' % budget)
tolerance = max(total * TIMING_TOLERANCE, 0.05)
within = [c for c in candidates if c[0] <= tolerance]
best = min(within or candidates, key=lambda c: (c[1], c[0]))
return best[2], best[3]
ends, acc = [], 0
for d in durations:
acc += d
ends.append(acc)
indices = []
for tick in range(count):
at = (tick + 0.5) * total / count # middle of the tick
indices.append(min(bisect.bisect_left(ends, at), len(durations) - 1))
return fps, indices
def layout(count):
"""Smallest column count whose rows fit the texture cap."""
"""Smallest column count giving a texture the client can actually sample.
Two limits, both found the hard way: no side may exceed 1024, and the sheet
may not be skinnier than 16:1 - a 32x1024 strip (32:1) draws nothing at all,
while the same frames as 64x512 draw fine. So a run longer than 16 frames
goes to two columns rather than growing the strip.
"""
for cols in (1, 2, 4):
width = cols * FRAME
rows = -(-count // cols)
if rows * FRAME <= MAX_TEXTURE:
height = FRAME
while height < rows * FRAME:
height *= 2
height = FRAME
while height < rows * FRAME:
height *= 2
if height <= MAX_TEXTURE and height <= width * MAX_ASPECT:
return cols, height
sys.exit('%d frames exceed the %dpx texture cap' % (count, MAX_TEXTURE))
sys.exit('%d frames do not fit a sheet within %dpx and %d:1'
% (count, MAX_TEXTURE, MAX_ASPECT))
def write_tga(im, path):
@@ -120,10 +138,8 @@ def write_tga(im, path):
f.write(Image.merge('RGBA', (b, g, r, a)).tobytes())
def build_sheet(frames, repeats):
expanded = []
for frame, n in zip(frames, repeats):
expanded.extend([frame] * n)
def build_sheet(frames, indices):
expanded = [frames[i] for i in indices]
cols, height = layout(len(expanded))
sheet = Image.new('RGBA', (cols * FRAME, height), (0, 0, 0, 0))
for i, frame in enumerate(expanded):
@@ -227,13 +243,13 @@ def main():
sheet, info = frames[0], None
print('%s: static 32x32' % args.name)
else:
fps, repeats = pick_framerate(durations, MAX_COLS * (MAX_TEXTURE // FRAME))
sheet, nframes, cols, height = build_sheet(frames, repeats)
fps, indices = resample(durations, MAX_COLS * (MAX_TEXTURE // FRAME))
sheet, nframes, cols, height = build_sheet(frames, indices)
info = (nframes, cols, height, fps)
print('%s: %d source frames (%.2fs) -> %d frames at %dfps (%.2fs), '
'%dx%d sheet in %d column(s)' %
print('%s: %d source frames (%.2fs) -> %d frames at %dfps (%.2fs, '
'%d of the source frames kept), %dx%d sheet in %d column(s)' %
(args.name, len(frames), sum(durations) / 1000.0, nframes, fps,
nframes / float(fps), cols * FRAME, height, cols))
nframes / float(fps), len(set(indices)), cols * FRAME, height, cols))
if args.dry_run:
print('dry run: would write %s' % os.path.relpath(tga, ROOT))