Git Product home page Git Product logo

esa-layouts's Introduction

ESA Marathon

The greatest speedrunning event Europe has ever seen

Requirements

  • Go
  • Docker / RethinkDB
  • Gulp
  • Npm

Local development

  1. Set up your local .env file base don the .example.env
  2. Download dependencies with go get and npm install (or yarn)
  3. Run docker-compose up -d to initialize the Database
  4. Migrate the DB by running go run cmd/dbinit.go (add --seed to insert default data)
  5. Compile styles, js and html with npm run gulp
  6. Run fresh or go run main.go
  7. Add some cool features

Production build

  1. Clone repository and set up .env file
  2. Run docker build -t esa:latest .
  3. Run docker-compose up -d
  4. (First time setup) Run docker exec -it {containerID} /bin/sh and go run cmd/dbinit.go --seed

esa-layouts's People

Contributors

btbn avatar cbenni avatar opl- avatar riek-lt avatar tomrish avatar zoton2 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

esa-layouts's Issues

Integrate players scanning their NFC tags

This can be used for multiple things, currently the list is:

  • Positioning the player on the correct area of the layout.
  • Tying the player to that specific button (so when they press it, it stops their timer).
  • Reading and using pronouns if needed.

Additionally we need to:

  • Make sure there is a backup if tags don't exist, cannot be scanned correctly or names do not match.

Extra Game Layouts for ESA Summer Online

  • 4:3 2 Player with split camera
  • 16:9 2 Player with split camera
  • GameBoy 2 Player Pokemon randomizer battleships (example)
  • 4:3 2 Player ALTTP randomizer (example, could reuse 16:9 2 Player?)
  • 4:3 2 Player SM64 randomizer (can use the normal one above)

Improve how bids are displayed in the omnibar

Currently bids in the omnibar are just text, either showing how much each choice has if it's multiple choice, or a "current" out of "goal" if a normal goal incentive. This should be changed to be a bit more graphically pretty and easier to read at a glance.

Allow this bundle to change the Twitch title, include current donation total

Basically we want to also include the donation total in the title somewhere, but can't do that in nodecg-speedcontrol alone, unless I was to change some logic in that. We don't have anything else in the title that changes for our events currently, so could simply just use speedcontrol's twitchUpdateChannelInfo message function and change it ourselves, although speedcontrol will still attempt to change it when changing runs so may need to add a way to disable that too?

Add better system(s) for testing content

For the runs themselves it's easy to test with nodecg-speedcontrol, but other data is harder to test with right now, mainly data pulled/pushed from the donation tracker.

  • Tracker API data (bids/prizes/donations)
  • Pushed donations from tracker
  • Pushed tweets
  • Pushed subscriptions
  • Pushed cheers
  • Pushed crowd control messages
  • Pushed "other stream" data (run information, game scene change)

Add xkeys implementation into this bundle

Currently code that does this stuff is in nodecg-esakeys but I'd like to rewrite it and bring it over to this bundle as they both go hand in hand right now.

There are also some issues on that repository too that if they are still applicable can be brought over to this one.

I am also waiting on obs-websocket v4.8 as it contains changes so I can refer to items by ID which should help with writing better code and not having to use virtual scenes within other scenes.

Add animated transition

We used to have this although it was probably not optimised well and was in an older bundle. I would like to bring this back, but may need a graphic designer to help make it instead of me attempting it.

I am also waiting on obs-websocket v4.8 as it contains a couple new events, TransitionEnd and TransitionVideoEnd which may be very useful in this case.

Host intro scene

Target event: ESA Winter 2022

Add an extra scene for the ‘host introduction’ where they do sponsor reads.

This scene should include the following

Game meta data from speedcontrol (
Game box art if available (maybe through twitch’s in house database provider)
Runner meta data from speedcontrol (hopefully oengus has avatars by then)
A manually advanced sponsor slideshow, which the donation reader will step through as they do their reads

further there should be a small control panel to do the following
A way for the host to advance to the game scene
A way for the host to send the show to break at the end of a run
A way to disable ads for the rest of the run
A way of seeing when the next ad is due to be run
If one is running, a full list of the video playlist in progress and the item currently playing

Scale graphics to work at 1440p

As per title, currently we're targeting 1080p (1920x1080) and that's hardcoded, either we need to just hardcode 1440p (2560x1440) instead now or somehow scale.

Change game layout camera areas for on-site events

For online events, in 2 player layouts we split the camera into two parts. The intention for on-site is to do something similar (as we'll have multiple cameras), although we also want to add a "room camera" area, as the audience will not be visible on the main cameras.

Here's a simple sketch of the idea.

Here's a screenshot from an event where they did something similar.
This is a video of the same event.

We may also want to make the "room camera" a toggleable option for times when there's less crowd presence. Links in with #52

List of important layouts to do:

  • 4:3 1 Player
  • 4:3 2 Player
  • 4:3 3 Player
  • 16:9 1 Player
  • 16:9 2 Player
  • GameBoy 1 Player
  • GBA 1 Player
  • 3DS 1 Player
  • DS 1 Player

List of less important layouts available but may need changing in the future:

  • 4:3 2 Player (Extra Space)
  • 4:3 2 Player (Extra Middle Space)
  • 4:3 4 Player
  • 16:9 1 Player (Large Camera)
  • 16:9 1 Player (2 Cameras)
  • 16:9 3 Player
  • GameBoy 2 Player (Extra Space)
  • GBA 2 Player
  • 5:2 1 Player
  • SM64 (Power Star Pathway 2P)
  • 2 Cameras Only

Improve/remove "Featured Channels" Twitch extension integration

I can either improve the way this works (currently it just listens for the FrankerFaceZ names to change, which isn't a very good idea when their servers have issues), use our external server with the esa-featuredchannels bundle, or build it into nodecg-speedcontrol (see issue speedcontrol/nodecg-speedcontrol#43). I feel the last 2 are the best ideas, and maybe the 2nd as a solution for now, as we have to use it for non-ESA marathons anyway.

Dynamic !prize command

This possibly isn't only a layout feature.

I'd like viewers to be able to trigger grand/large prizes in the media box with !prizes / !prize / [Twitch chat command].

With a reasonable cooldown so it's not spamming the media box.
If the cooldown is active, use the omnibar

Map game and camera feeds when player NFC tags are scanned

When the players scan their NFC tags, we also want the Game Captures and Camera Captures to be switched out correctly, as we'll have 1 input for game and 1 input for camera for each specific spot.

This will probably just hijack the xkeys implementation (see #16).

Create runner HUD

In time for winter.

Create runnerhud.html layout page

It must be built with a fixed resolution of 800x480 in mind

This page should simply display if there are donations ready to be read in the "read donations" screen

for example

Black background, white text: No donations currently
Red background, white text: Donations pending

If we want to do some more cool stuff on this page we could also show the current timer and how many $ of donations were raised since the last reset. That should encourage the runners to try and get the audience to donate.

Add support for donation total milestones

We want to be able to have a feature to specify "milestones". These are certain goal that the donation total can reach overall, which would then be displayed on the overlays in some fashion. These can sometimes be done during the marathon, or sometimes before, so should be editable whenever. A good example of a goal would be a previous event's donation total. These should have a toggle for visibility so they can be added in early and only shown when wanted.

A useful extra feature would be a way to make a goal be +$x on top of the current donation total, so when it is activated/made visible it calculates the required donation total goal itself.

In the future this sort of feature may want to be added to whatever external donation tracker is being used, but for now it can live in the layout bundle.

Integrate with "Spring" for merchandise sales

We want to be able to integrate with the service "Spring" where we plan to sell merchandise so when an order is placed, an alert can be displayed. We may also want to add something on the intermission that shows how much money has been made selling merchandise, for when this is for charity.

Link to a (maybe) relevant API endpoint that might be usable: https://api.teespring.com/docs#!/seller/getSellerV1Orders

Because of the heavy focus on media box integration, this may be more suited to be added into esamarathon/esa-layouts-shared?

Alternate layout depending on crowd size

Applicable for the most common layout styles:
4.3 / 16:9
4.3 race / 16:9 race

During graveyard blocks there's usually less people in the audience. During these times we may want to increase focus on the runner + couch and hide the empty seats.

Change/Evolve "Sponsor Logos" into "Media Box"

We want the box, besides sponsor logos, to also contain prizes (should be added into the cycle using the relevant dashboard panel) and also alerts about things like donations, subscriptions and cheers.

Also, one of the available items to add to the cycle should be a "random prize", which displays a random prize with it's name, image and a URL to the prizes website.

There is more information on the relevant card on our Trello board, if needed.

Media Components To Do:

  • Image
  • Prize
  • Prize Generic (is buggy on DS 1 Player layout)
  • Donation
  • Subscription
  • Cheer

Add support/modifications for Hekathon takeover

  • Add logo changes once designed for us.
  • Add some text to the omnibar rotation during their block to indicate what's going on.
  • Add some information next to the extra game information on the layouts that indicates what's going on.
  • Implement a layout for a relay race:
    • 4:3, 2 teams.
    • Team names (already supported in nodecg-speedcontrol) need to be displayed.
    • Will attempt to integrate relay control into nodecg-speedcontrol (speedcontrol/nodecg-speedcontrol#28).
    • Commentary bias meter, based off a donation tracker bid war.
      • Total values on each side should have a +/- showing how far ahead/behind that value is from the opposite.
    • There will be cameras, but we will be seeing commentators; this may be up to 3 people but yet to be confirmed.
  • Studio intermissions; if these aren't composited by their team and streamed to us, this will be a background with some green-screened cameras over the top. Shouldn't need much work in this bundle, but making a note of it for future reference if needed.
    • Videos after their studio bits: not sure yet, if needed we can use our own video player.
  • Add something to the schedule so we know to trigger the Hekathon changes in the layouts.

Improve padding/sizing/handling overflow in media box

(This may need moving to esamarathon/esa-layouts-shared if the code is moved there before this is finished.)

The current implementation was tested at ESA CR and the alerts displayed fine, but the sizing when they are displayed needs to scale based on the area they are in, and the length of any custom text (names/messages). This also needs to be done for the prizes too, and anything else I may have forgotten that can be arbitrary lengths of text.

Rewrite/improve logging.ts

I wanted to improve this file before but didn't get a chance, but it's very heavily linked into what gets sent to the RabbitMQ server and sometimes that's not all done for logging purposes, so maybe it's contents can just be spread around to other files where it's appropriate?

Integrate "mini credits reel"

The idea is during the intermissions after a run has finished, we show a list of all the people who have donated (and subs/cheers (if over a certain amount?) if those also go to the charity, which currently is the plan) during that run. We may also want to show the combined total of everything received too if not too low.

Another idea for these credits is to list runners/commentators/volunteers who contributed to the run too, but not sure how to do that currently.

Change commercial/video player logic

Currently we play a flat 3 minutes of commercials on the intermission scene, then switch to the video player, then back to the intermission.

What we want to happen is that after a run, we switch to the video player, which will play videos and commercials from the set playlist, and have no "flat" commercials at all.

There will be 2 kinds of commercials that can be put in a playlist:

  • "Disruptive" which will start playing and then continue on to the next playlist item, playing them over the top of a video
  • "Non-disruptive" which will start playing and then wait until they have finished until the next playlist item starts

Any time a video isn't showing, the regular intermission should show, even if this is in the middle of a playlist.

We also need to tweak/make a video player layout so they do not fill the screen and have some other information on them too.

Here is a sketch for reference that also may help: https://cdn.discordapp.com/attachments/145600678042009600/858355004661694524/unknown.png

Change Twitch commercial logic

  • If a run is 40 minutes or longer (estimate), run 60s of commercials every 20 minutes, up to 20 minutes before the estimate
    • e.g.: 40 minute estimate - 1 commercial at 20 minutes
    • e.g.: 60 minute estimate - 2 commercials, 20 minutes and 40 minutes
  • 3 minutes of commercials still need to be run during the intermissions as already done

Move "Player HUD" and related parts to another tool

I want to at least move the webpage part out of this bundle and put it on some external server so it can be used without NodeCG running. Maybe the Streamdeck part should be moved out too, although that's a bit more difficult.

The new tool may need other/different features which will not be discussed here, this is just a note that it needs to be moved/removed.

Add support for 2 player races/co-op for online marathons

There are some races/co-op runs that we need to support showing the streams for, which will be symmetrical so we can split them down the middle automatically. We will also need to add a dividing line to the camera space on the layouts themselves.

Re-importing schedule in overrode an active run manually marked as relay

(I was originally going to write this in the nodecg-speedcontrol repository, but it's more likely it is a fault in this bundle, so posting it here instead.)

I wasn't around when it happened, but I was told that during ESA Summer 2022, a run had been marked as relay manually (not sure if before it was the active run or not), and when the schedule was re-imported during that run, the relay option was overrode (set back to false) and the names were removed from the stream. Re-importing schedules in native nodecg-speedcontrol code should never touch the active run, so not sure how this would happen in there, so it more likely happened in this bundle.

The run it happened in and the time of when it happened is available here: https://youtu.be/JFgzwKmDs2U?t=8723

  • At first, the relay flag is removed, and the custom order of teams is lost, as the 2 teams swap.
  • Then, all the names disappear; this may have been the operator re-ticking relay and then no relay teams being set?

Rewrite/improve graphics code

(More notes to be added.)

Partially related to issue #4.

  • Better "theming system"; store sets of colours etc for specific events.
    • Load general colours via CSS stylesheets.
    • Find a way to change images (maybe also via CSS).
    • Needs a "default" file.
    • Any other changes that have to be made?
  • Combine all common.css files.
  • #60
    • Has been done on game layout only so far.
  • Prepare "sponsor logos" box for next changes (see #22).

Individual Graphics Notes:

  • omnibar
  • music-player (was removed in favour of external player)
  • twitch-players
    • Check usage of common.css/defaults.css
  • game-layout
    • Use some theming system (see point above).
    • Components
      • Donation Reader (next to commentator?)
      • Commentator
      • Donation Bar
      • Player
      • Run Info
        • Make sure text always fits
      • Timer
      • Finish Timer (should go inside the game view instead).
        • Also include if it was a forfeit if applicable.
    • Individual Layouts
      • 4:3 3 Player
      • 4:3 4 Player
      • 16:9 2 Player
      • 16:9 3 Player
      • 4:3 1 Player
      • 4:3 2 Player
      • 16:9 1 Player
      • 16:9 1 Player (Large Camera)
      • GameBoy 1 Player
      • GBA 1 Player
      • 3DS 1 Player
      • DS 1 Player
      • 4:3 2 Player (co-op) (no longer need a separate co-op layout)
      • 16:9 2 Player (co-op) (no longer need a separate co-op layout)
      • 4:3 4 Player (co-op) (no longer need a separate co-op layout)
      • 16:9 4 Player (MonHun) (will bring back if ever needed)
      • 16:9 2 Player (bingo) (will bring back if ever needed)
  • intermission
    • This will probably be stripped of some features as the intermission will go through a redesign soon.
  • intermission-hosts
  • donations
  • tts-player
  • video-player
  • player-hud (will be removed in the near future, see #21)
  • host-dashboard (will be removed in the near future)

Allow game captures/players to be "reversed"

For any on-site events, it's useful to have the game captures/players in the reverse order, for example on a 2 player layout: left: player 2 | right: player 1. This should be a toggle-able option though as in some cases we don't want it.

Allow intermission slides to be controlled/have a playlist

Kind of like how we do it for the "media box", we want to be able to have an editable playlist of what is displayed in the big area on the intermission graphic. Either add in specific images/videos or even specific types of slides like upcoming runs, bids and prizes.

Allow video player graphic to have multiple videos queued for playback

Currently you can select 1 video, and when switching to the graphic it will play that one back, then switch scenes. We want to have it possible to be able to select multiple, or to be able to make a playlist, and have them all play back before switching. The playlist should also be able to set via a run's custom data.

Game Layouts Needed For ESAS19

Will be updated if/when I find out what we need.

Regular Cases:

  • 4:3 1 Player
  • 4:3 2 Player
  • 4:3 3 Player
  • 4:3 4 Player
  • 16:9 1 Player
  • 16:9 2 Player
  • 16:9 3 Player
  • GBA 1 Player
  • DS 1 Player
  • 3DS 1 Player
  • GameBoy 1 Player

Special Cases:

  • Some 2p layouts need to work for 1 team 2 player co-op!
  • 16:9 2 Player for Minecraft: Java Edition Bingo
  • Monster Hunter World Showcase, need a 4 player 16:9 layout too, only 1 "player" name.
  • SWAT 4 (2 teams of 2 will be shown) [Thursday]
    GeoGuessr (2 teams vs) [Friday]
    16:9 1 Player but 2 cameras [? I forget which run this is for]
    I wanna Find my Destiny (is this 5:4?)
    I Wanna Take The Timemachine 2 (not actually sure)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.