This is an updated version / rewrite of my Twitch library from the .NET Framework to .NET Core with the purpose to move over my other Twitch related tools to the latest and greatest. At the moment Twitch chat functionality is supported and support for the Twitch API (Kraken v5 & Helix) will be added as well once the chat part is fully done and tested.
Note that this is a work in progress so if you encounter any issues feel free to let me know so I can fix it.
That said, there aren’t really any new fancy features compared to the previous .NET Framework version so I’ll just list what it does to keep things up to speed and add some examples how to get it running.
How to use BlushyAvatars
This is a summary how to use BlushyAvatars. To read about the features of BlushyAvatars go here (although the post is a bit outdated, read the update blog postsand / or join our discord for the latest info!): blog.blushyface.com/2019/03/23/community-projects-finished-released-projects/blushy-avatars/
Feedback / ideas can be posted here: blog.blushyface.com/c/
If anything is not clear let me know in Discord or reply below.
You as an avatar
Every viewer is represented by an avatar that shows up at the bottom of the overlay. The first avatar received is random and to collect more you need to “capture” them as well as receiving 10 starter pokeballs. Every avatar also has “stats” such as HP / Actions (what the avatar can do like move / run / skills etc) and can be leveled up by gaining EXP. The easiest way to level up the avatar is to join the stream and passively gain EXP in chat.
Things that might be interesting to know
Every avatar in chat gains EXP automatically at a default rate (subs gain more, x1.2 / x1.5) and unlock moves / skills automatically when they reach certain levels unique to the avatar.
Collect avatars and expand your collection!
There is a mini game where random avatars spawn (currently named wild pokemon and are named with a yellow color), to capture an avatar it requires at least 1 pokeball and need to type !capture in chat to claim the pokemon but has a 100% capture rate (this will change).
Once captured it is added to the collection. If lucky the avatar will be an above average level but normally they are low levels between 1 and 3 and have no attack moves unlocked so you can’t battle with them until you take care of them and level them up further.
The left overlay (the scroll) shows general info such as recent subscriber / cheer / donation as well as various stats and the top 5 highest level avatar in chat.
Viewer battles / team battles
To be implemented (Soon™)
Every avatar in chat gains EXP and the owner of the avatar gains channel currency at a default rate (subs gain more as a thanks for supporting BlushyAvatars) and damaged avatars (when they get hit etc) will heal 1 hp every minute so if you have a low level avatar it might help while higher level avatars won’t do that much. To check the avatar EXP / HP type !info in chat.
!capture , captures an avatar
!switch [Pokémon number] , switch out to an inactive avatar to gain EXP for that one for example !switch 134
!release [inactive Pokémon number] , release an inactive avatar for example !release 134
!info , shows info for your active avatar such as name, level, capture date etc
!collection , shows your avatar collection
!shop check [item] , shows additional info of an item for example !shop check pokeball
!shop buy [item] [amount] , buy an item !shop buy pokeball
!equip [item name] (Soon™)
!battle [viewer name] (Soon™)
!equip [item name] (Soon™)
!remove [item name] (Soon™)
!give [Pokémon number] [item name] (Soon™)
There is more to it as more features are added regularly but this should cover the basics.
Below is optional, subscribing / donating is NEVER required to enjoy my content.
I like to create and release whatever I think is fun to make and release it for free whenever I feel it’s ready to release so anyone that wants it can use it but if you like the content I create consider subscribing / donating, join our discord and / or add a link back to the site for creating this.
Patreon / Twitch Subscriber benefits as a thanks for supporting my content as a content creator
– Everyone gains EXP at a default rate but subscribers gain additional EXP.
– Same as with EXP subscribers get additional channel currency while regular viewers get default.
– Additional storage slots. Default is 25 but subscribers get +75 that makes a total of 100 storage slots to store avatars.
– A unique subscriber only avatar based on the subscriber name (or something else) with stats / moves you want it to have but not overpowered. (not every subscriber has a unique avatar yet but will have eventually when I get to creating them)
– You will be added to the “thank you / credits / support” page with a link to your twitch / social media site in a text file.
– “subscriber” badge / achievement (online page)
Donating / tips
Those that are not able to sub can donate / tip but want to support my content and receive additional items as well as a thanks. Any donation / tip (any amount):
– 10 pokeballs + amount * 100 channel currency
– “supporters” badge / achievement (online page)
Those that have subscribed or are subscribed, Patreon / donated, thank you, you are awesome for supporting me doing what I do and who knows if all goes well I can do this as a full time creative streamer which is a very cool thing to be able to do but until then thanks all for watching and chatting!
Every avatar in chat celebrates and cheer / donation / sub with a high jump, the more viewers the more avatars jump around!
Blushyavatars small update / fix (20190713)
+ added -> an overlay web page with avatar info that shows info like top x highest level avatars in chat, wild pokemons spawned / captured etc.
+ added support for subscribers + bits that shows the recent sub / cheer events in the overlay.
+ added support for various SFX sounds like when a wild pokemon is captured an SFX plays etc.
-> from this version onwards, every subscriber that is in chat gains additional EXP for their active avatar and additional channel currency to buy items for their avatars.
[Changed] rewrote the avatar client from FPS based movement to proper time based. This basically means that when it was FPS based the avatars would move sluggish when FPS was low but fast when high FPS, either way not consistent. With time based movement it doesn’t matter as the speed remains the same. (see below under screenshots for a comparison and notice the avatar movement between the two versions) This is also fixed for animations.
[WIP] added support for viewer quests & achievements in the database, nothing implemented otherwise.
Screenshots / gifs
the left overlay with the avatar info is a web page for easy including in OBS / Xsplit etc
Time based movement
10 fps vs 60 fps to show difference in FPS but same speed between avatars.
FPS based (notice faster movement with higher FPS)
Blushyavatars small update / fix (20190705)
+ added a shop command !shop buy/check <item name> <optional amount, default 1>
-> buy will allow you to buy one or more items
example !shop buy pokeball 100 will allow you to buy 100 pokeballs at once if you have enough channel currency
-> check will allow you to check the item stats and how many you have
_> by only typing !shop it will show your current amount of channel currency
+added support for streamlabs donations
-> when donating you receive 10 pokeballs + the amount in donations *100 in Blushies (channel currency)
-> first time donators (any amount) will also receive a special badge
+added various sfx such as when captured
Blushyavatars small update / fix (20190703)
+ added command !switch <Pokemon number or name> that will switch out the current active Pokemon to another one in your collection. This will allow other Pokemon sto gain EXP etc and will be your default when joining the stream unless switched out with another Pokemon.
+ added command !info , show current active Pokemon info
+ added “OwnerName” to avatar properties, this allows renaming the Pokemon in a future update although it is not shown anywhere yet besides in the collection.
-> technically every avatar is linked to a user account but in the client we only pass down avatar properties without any account data so it’s needed there to show the viewer name (Avatar.Name was abused and used as Account.Name but with the possibility to rename avatars I needed an extra field and using Avatar.Name as viewer name was confusing anyway)
[MISC] refactored some code (moved some logic around + added a few more db functions)
Blushyavatars small update / fix (20190701)
+ added Pokémon storage space. Default is 25 and subs get 75 more for a total of 100 storage space. This is not hard locked, storage space can be bought using channel currency that is gained by being in chat! To check your available storage space type !collection
+ added !release command , type !release <Pokémon name> to release a Pokémon back into the wild. Released Pokémons can come back as wild Pokémons (gold color) but with (increased) stats when it was released (this is important when battles are introduced so trainers can fight wild pets that used to belong to another trainer or when that trainer fights a battle it can help them out)
+ changed, when chatting the text could take a large portion of the screen which can be annoying when many people are typing so instead the following changes have been made so its better visually (or should): by default when chatting it shows the text as normal but when the TTS is done talking the text disappears. When the TTS gets interrupt while talking the text will go to whoever just typed and then will disappear when the TTS is done talking. (see video below)
+ changed viewer colors -> non chatter = dark/grey color, anyone that has chat = white color, current chatter = pink , not 100% final of the colors but let me know if you have a suggestions for it.
! fixed Pet EXP is now being gained properly for active pets.
~ misc, working on adding equipable items such as weapons, heals etc that Pokémons can use during battles.
Blushyavatars small update / fix (20190701)
! fixed when avatar has an idle action (0 move speed) it could move 1 pixel due direction change.
+ added avatars that can spawn randomly, in this case they are wild pokemons (no user attached) and can spawn and appear / disappear randomly identified by it’s gold color and name.
+ added database support for persistent avatars, this basically means if you have an active avatar it will be loaded when joining stream instead of a random avatar.
+ added user inventory that holds items & avatars and able to switch between them freely.
+ added avatar added date
+ added avatar EXP, exp is gained periodically when the avatar is active and the user in chat to unlock avatar specific actions / traits.
+ added avatar hitpoints (100 default), it has no real use at the moment but it can come in handy for future updates (mini games?)
+ added 2 new commands !collection (shows total avatars collected) and !capture (captures a wild pokemon when there is one)
[WIP] allow user to change between their avatar collection, most of it is done but not made the commands yet.
[WIP] allow capturing wild pokemons, command? Web interface? Mini game? % of capture? Still debating.
~ lurkers that have not typed anything in chat will get assigned a random avatar until they have and can start collecting more
~ misc cleaned up some code
Blushyavatars small update / fix (20190630)
+ changed avatar definition file to EXCLUDE name as qualified avatar name when there are variations available, instead add any variations in the “variation” option in the avatar definition file.
+ added to configuration an option called “avatarsdir” where you can specify what directories to load relative to \avatars , useful for avatar sets / themed avatars.
+ added support for querystring parameters to set width and height. Example add ?width=xxx&height=yyy after the url, this should make it easier to adjust the width / height when using multiple browser sources in OBS / XSplit etc.
Blushyavatars small update / fix (20190628)
! fixed background right to left scrolling –> contextBackground.drawImage(bg,-scrollPosY, canvasBackground.height – bg.height,bg.width, bg.height); contextBackground.drawImage(bg, canvasWidth -scrollPosY, canvasBackground.height – bg.height,bg.width, bg.height);
! fixed avatar movement direction change with scaled images –> avatars that were at the corner of the screen didn’t reverse properly and after some checking it seems I forgot to include scaled images in the direction function –> avatarItem.CurrentPosX = canvasBackground.width – (avatarItem.Action.SizeX* avatarItem.Action.Scale);