There are a lot of examples of the integration of broadcasting and viewers, but new technologies allows more interesting implementations. Perhaps those who participate in this contest will come up with new game genres. We also decided to try. We decided to create the integration of the game and the audience during the broadcast. We started by analyzing problems and limitations that may interfere with a good experience. Following problems were identified:
- Stream delay. This prevents us from creating some interesting integrations with instant effects. We know that twitch supports "low-latency" broadcast, but we're not sure that this variant suits every streamer and viewer.
- Small and large channels. The extension should work well on channels with a different number of subscribers.
- A lot of streamers play multiplayer games, it's difficult to add interaction to multiplayer, because it can be considered as a cheat.
After analyzing these problems, we chose a game with a roguelike survival genre and many different mechanics. The game also supports multiplayer. It’s called "Don't Starve Together" by Klei Entertainment. The work of our extension is based on periodic voting, which allows viewers to be involved in game process.
How it works
Our main interaction is voting for events that will occur in the game. Channel viewers interact with the game through collective voting. There are several types of voting:
- Single. Single votes have 2 choices: "Yes" or "No". The event will be executed if the majority selected the Yes option.
- Multi. In such votings, users select one of several events. When the voting ends, the event with maximum number of votes will be executed.
- Challenges. Challenges have a list of tasks and a list of rewards. The viewer chooses the сhallenge and the reward for it. When the voting ends, the challenge with the maximum number of votes will be activated and reward for challenge will be the one for which most viewers voted.
For viewers, we have an information panel where they can familiarize themselves with the fully described events. If the channel supports bits, viewers can send an event without voting.
Another part of our integration is followers. When the viewer follows the broadcaster’s channel, we create a small bird in the game, and the character calls the name of the new follower. This bird can help streamer in the game.
We have 2 types of config. First is the extension config, the second one is in the game mode. In the configuration of the extension, broadcasters can choose the events that will participate in their stream, and how deep interaction with the game should be. In the game mode, broadcasters adjust the frequency of voting.
How we built it
We have developed a system of communication between: Twitch Extension, game mod, EBS.
Game mod. Game modification developed in Lua language. Game mod communicates with our EBS using the long-polling technique because we have access only to GET and POST requests in the game.
EBS. EBS was developed in TypeScript language. Server is the heart of our integration. The server is processing, analyzing and recording all data.
Challenges we ran into
Creating modifications for the game. If you don't know what legacy code is, just try creating a modification for the game. Also, the task was complicated by the lack of any documentation.
Antispam system. We have follow events and bits events and it was necessary to come up with communication that would not turn the gameplay into hell for the broadcaster.
Accomplishments that we're proud of
We have localization for our extension, which depends on the viewer’s language. Our localization stores on the EBS, so we can add new languages or make small changes without review process.
Our EBS chooses the next event isn't completely random. Our EBS knows state of the game like player’s hp, game’s time and a lot of other metrics. Depending on these metrics we choose events that suits the current state of the game. For example, we won't initialize voting for the beginning of the winter if it's already winter. Also as with localization, all information about events stored in our EBS, so we can add or modify events fast as well.
We got a good mobile version, I like interacting with it more than with the browser version.
We have different presets of how difficult interaction can be for broadcasters. For example, some new player in “Don’t starve together” will die if viewers will send strong bees on the first day. At the same time, it won’t be a problem for an experienced player. So in our config, a broadcaster can select how difficult events can be for him. We want to provide great experience both for casual and hardcore players.
We actively communicated with broadcasters so that they could gain a useful integration experience with their viewers. We also listened to feedback from the community and made appropriate changes.
One of our main goals is to provide a great experience for all types of broadcasters. Our extension will be fun for everyone, regardless of how many viewers you have and your skill in the game. And I hope we have done enough to achieve this goal.
What we learned
- This is the first time we have developed an extension and game modification.
- Of the programming languages, we first tried to work with: typescript, lua.
What's next for Let's play together
We have created a roadmap for ourselves:
- The increase in the number of localizations.
- Increase in the number of events and challenges for voting.
- Creating a New Event for Christmas.
- We also want to develop a mission quests for the viewers.