Mark Sweeney
Author Archives: Mark Sweeney

Minimum Gaming Subtitle Options

Screenshot ofWebGL app showing what the minimum subtitle options games should have.

After talking with a number of people on Twitter, and given the awful, or limited gaming subtitle options for PC and console games, I decided to set up an app with the minimum subtitle options games should have.

I used Unity3d to create the WebGL app. You may need to install the Unity3d Web Player plugin available for Windows and Mac browsers.

The background image and subtitle is from Wolfenstein: The New Order. The starting subtitle size is approximately the same size as it appears in game, but I’ve split the subtitle into two lines. The original was on one line, breaking one of the primary closed captioning/subtitle guidelines of no more than 42-45 characters per line.

If there had been options to increase the size of the subtitles in the game, you wouldn’t have been able to make them much bigger without the caption getting cut off on either side of the screen. Splitting the caption to proper lengths gives you room to make subtitles much bigger.

Some people may think subtitles cover up too much of a game screen, but that’s irrelevant. The whole point of subtitles is communication. If players can’t read them, they will miss vital gameplay information and story.

Making subtitles readable to a wide range of players is what’s key with subtitle options. Some people don’t need subtitles at all. some like small subtitles. Others need high contrast between subtitles and backgrounds. Some have low vision and need them as large as possible.

Game companies need to expand the range of options available for subtitles. I’ve set what I think should be the minimum standard for subtitle options for games.

One other important thing about subtitle options – the player should be able to see exactly what they’re getting in the subtitle options with a full screen sample. Having a small sample image with subtitles on them to illustrate is not enough. The sample should be full screen right in the options menu so players can set subtitles up exactly the way they need to so they can read them as easily as possible.

Options include, font size, sans-serif, serif, and monospace fonts, background, font transparency, background transparency, font color, background color, outline, and drop shadow.

To start, click the Options button in the top right corner in the WebGl app below.

For a fantastic article on gaming subtitles by Max Deryagin, check out on “What Video Game Subtitling Got Wrong In 2017

Timing Close Captions with Aegisub

Timing Closed Captions with Aegisub

If you’ve ever needed to add closed captions to YouTube or FaceBook, Aegisub is a great, free program for creating closed caption Subrip files (.srt). Subrip files are what you upload to FaceBook or YouTube to add Closed Captions to videos.

Aegisub is available from Aegisub.org, and it’s free.

Here’s a tutorial on how to time closed captions from a transcript using Aegisub.

How to Add ‘Apply Changes to Prefab’ to right-click menu in Unity3D

 

It’s extra steps and work to keep going to the GameObject window in Unity3d to select ‘Apply Changes to Prefab’ after selecting the prefab. Now you can do it just by right-clicking the prefab and selecting ‘Apply Changes to Prefab’ from the context menu. Just download the editor file here and add it to a folder named Editor (as seen in project folder in the video).

Apple ‘Clips’ app

 

 

It looks like this app will create ‘open captions’ using iOS’s speech recognition. Open captions are captions which are ‘burned’ into the video, which would be a great for adding captions to videos on Twitter. Twitter currently has no Closed Caption api to add, or display closed captions in videos embedded in tweets. (Note – video above has no audio).

So Clips could be good for embedding open captioned videos to tweets, making them more accessible to deaf and hard of hearing. This would have been great for Vine. RIP.

This feature will also upload clips to Twitter, FaceBook, Youtube and Instagram, and requires iOS 10.3, which will be coming soon as well.

Via Apple:
“Live Titles let you easily create animated captions — just by talking as you record. Choose from a variety of styles, all perfectly timed to the sound of your voice.”

More on the Clips App from Apple.

N.B – ‘open captions’ can’t be turned off, they’re ‘burned’ into the video frames of videos, whereas ‘closed captions’ can be turned on or off.

Adjusting Subtitle timing for Subrip (.srt) Closed Captions.

If you have an iTunes movie that isn’t Closed Captioned, you can often find a subrip subtitle file online (.srt file). Sometimes the subtitle timing is off, either showing captions before characters speak, or after.

You can fix this using free programs, and build the captions right into the iTunes file. This won’t strip FairPlay DRM, but it will allow you to add your own captions, since Apple/iTunes can’t be bothered to ensure all movies and shows are Closed Captioned outside the US.

I use Jubler subtitle editor for adjusting the timing on subrip (.srt) files, and Subler for adding the subtitle file to iTunes movies.

 

Using AnimationCurves in Unity3D

Another use for AnimationCurves in Unity3D is to adjust the speed of things without changing variables, or adding complicated curves. The variable we want returned is the Y-Point (a float from 0.0 to 4.0), based on time (from 0.0 to 1.0, going left to right).

As time gets closer to 1.0, the Y-point decreases from 4.0 to 1.0.


1
powerbarReverse.fillAmount += Time.deltaTime / powerCurveStart.Evaluate (powerbarReverse.fillAmount);

powerbarReverse is a UI Image whose image type is filled. As you change the fill amount from 0.0 to 1.0, the image fills in, in the Fill Origin type specified in the inspector.

powerCurveStart is the Animation curve below. As time goes on, the image will fill faster, as Time.delta time gets divided by a smaller number.

AnimationCurve used when the Power Bar is moving forward (increasing).

AnimationCurve used when the Power Bar is moving forward (increasing).

 


1
powerbarReverse.fillAmount -= Time.deltaTime / powerCurveEnd.Evaluate (powerbarReverse.fillAmount);

powerCurveEnd is the Animation curve below. It will start at 1.0, and the image will unfill as time goes on. It starts fast, and slows down. When it reaches 0.33 is the speed will stay constant. The speed stays slow and constant at this point so players can decide if they want to add spin to the bowling ball to make it hook left or right.

AnimationCurve used when the Power Bar is reversing (decreasing).

AnimationCurve used when the Power Bar is reversing (decreasing).

 

To add spin or hook the ball, the player would stop the power bar on either side of the “bump” in the left side of the power bar meter. If the player stops it where shown below, the ball will have no spin and roll perfectly straight down the alley.

Power Bar Meter

Sample code is below. A UI.Button calls the SwingClub() routine, which starts, reverses and stops the power bar with each press.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<span style="font-family: Menlo;"><span style="color: #009695;"><span style="font-family: Menlo;"><span style="color: #009695;">private</span><span style="color: #333333;"> </span><span style="color: #009695;">int</span><span style="color: #333333;"> </span><span style="color: #333333;">pbDirection</span><span style="color: #333333;"> </span><span style="color: #333333;">=</span><span style="color: #333333;"> </span><span style="color: #f57d00;">0</span><span style="color: #333333;">;</span></span>
public</span><span style="color: #333333;"> </span><span style="color: #3364a4;">Image</span><span style="color: #333333;"> </span><span style="color: #333333;">powerbarForward</span><span style="color: #333333;">;</span>
<span style="color: #009695;">public</span><span style="color: #333333;"> </span><span style="color: #3364a4;">Image</span><span style="color: #333333;"> </span><span style="color: #333333;">powerbarReverse</span><span style="color: #333333;">;</span></span>
<span style="font-family: Menlo;"><span style="color: #009695;">public</span><span style="color: #333333;"> </span><span style="color: #3364a4;">AnimationCurve</span><span style="color: #333333;"> </span><span style="color: #333333;">powerCurveEnd</span><span style="color: #333333;">;</span>
<span style="color: #009695;">public</span><span style="color: #333333;"> </span><span style="color: #3364a4;">AnimationCurve</span><span style="color: #333333;"> </span><span style="color: #333333;">powerCurveStart</span><span style="color: #333333;">;</span></span>
<span style="font-family: Menlo;"><span style="color: #009695;">public</span><span style="color: #333333;"> </span><span style="color: #009695;">enum</span><span style="color: #333333;"> </span><span style="color: #3364a4;">swingType</span><span style="color: #333333;"> </span><span style="color: #333333;">{</span><span style="color: #333333;"> swingInactive</span><span style="color: #333333;">,</span><span style="color: #333333;"> startSwing</span><span style="color: #333333;">,</span><span style="color: #333333;"> stopSwing</span><span style="color: #333333;">,</span><span style="color: #333333;"> endSwing</span><span style="color: #333333;">,</span><span style="color: #333333;"> BallThrown </span><span style="color: #333333;">}</span><span style="color: #333333;">;</span>
<span style="color: #009695;">public</span><span style="color: #333333;"> </span><span style="color: #3364a4;">swingType</span><span style="color: #333333;"> </span><span style="color: #333333;">actionstate</span><span style="color: #333333;">;

<span style="font-family: Menlo;"><span style="color: #009695;">public</span><span style="color: #333333;"> </span><span style="color: #009695;">void</span><span style="color: #333333;"> </span><span style="color: #333333;">SwingClub</span><span style="color: #333333;">()</span>
<span style="color: #333333;">{</span>
 <span style="color: #333333;">    </span><span style="color: #009695;">switch</span><span style="color: #333333;">(</span><span style="color: #333333;">actionstate</span><span style="color: #333333;">)</span>
 <span style="color: #333333;">    </span><span style="color: #333333;">{</span>
 <span style="color: #333333;">        </span><span style="color: #009695;">case</span><span style="color: #333333;"> </span><span style="color: #3364a4;">swingType</span><span style="color: #333333;">.</span><span style="color: #333333;">swingInactive</span><span style="color: #333333;">:</span><span style="color: #333333;"> </span><span style="color: #333333;">StartSwing</span><span style="color: #333333;">()</span><span style="color: #333333;">;</span><span style="color: #333333;"> </span><span style="color: #009695;">break</span><span style="color: #333333;">;</span>
 <span style="color: #333333;">        </span><span style="color: #009695;">case</span><span style="color: #333333;"> </span><span style="color: #3364a4;">swingType</span><span style="color: #333333;">.</span><span style="color: #333333;">startSwing</span><span style="color: #333333;">:</span><span style="color: #333333;"> </span><span style="color: #333333;">StopSwing</span><span style="color: #333333;">()</span><span style="color: #333333;">;</span><span style="color: #333333;"> </span><span style="color: #009695;">break</span><span style="color: #333333;">;</span><span style="color: #333333;">     </span>
 <span style="color: #333333;">        </span><span style="color: #009695;">case</span><span style="color: #333333;"> </span><span style="color: #3364a4;">swingType</span><span style="color: #333333;">.</span><span style="color: #333333;">stopSwing</span><span style="color: #333333;">:</span><span style="color: #333333;"> </span><span style="color: #333333;">EndSwing</span><span style="color: #333333;">()</span><span style="color: #333333;">;</span><span style="color: #009695;">break</span><span style="color: #333333;">;</span><span style="color: #333333;">    </span>
 <span style="color: #333333;">    </span><span style="color: #333333;">}</span>
 <span style="color: #333333;">}</span>
 
 <span style="color: #009695;">void</span><span style="color: #333333;"> </span><span style="color: #333333;">StartSwing</span><span style="color: #333333;">()</span>
 <span style="color: #333333;">{</span>
 <span style="color: #333333;">    </span><span style="color: #009695;">if</span><span style="color: #333333;">(</span><span style="color: #333333;">playerReadyButtonActive</span><span style="color: #333333;">)</span><span style="color: #333333;"> </span><span style="color: #333333;">{</span><span style="color: #333333;"> </span><span style="color: #009695;">return</span><span style="color: #333333;">;</span><span style="color: #333333;"> </span><span style="color: #333333;">}</span>
 <span style="color: #333333;">    </span><span style="color: #333333;">actionstate</span><span style="color: #333333;"> </span><span style="color: #333333;">=</span><span style="color: #333333;"> </span><span style="color: #3364a4;">swingType</span><span style="color: #333333;">.</span><span style="color: #333333;">startSwing</span><span style="color: #333333;">;</span>
 <span style="color: #333333;">    </span><span style="color: #333333;">pbDirection</span><span style="color: #333333;"> </span><span style="color: #333333;">=</span><span style="color: #333333;"> </span><span style="color: #f57d00;">1</span><span style="color: #333333;">;</span>
 <span style="color: #333333;">    </span><span style="color: #333333;">StartCoroutine</span><span style="color: #333333;"> </span><span style="color: #333333;">(</span><span style="color: #333333;">MovePowerBar</span><span style="color: #333333;">())</span><span style="color: #333333;">;</span>
 <span style="color: #333333;">}</span>
 
 <span style="color: #009695;">void</span><span style="color: #333333;"> </span><span style="color: #333333;">StopSwing</span><span style="color: #333333;">()</span>
 <span style="color: #333333;">{</span>
 <span style="color: #333333;">    </span><span style="color: #333333;">powerbarForward</span><span style="color: #333333;">.</span><span style="color: #333333;">fillAmount</span><span style="color: #333333;"> </span><span style="color: #333333;">=</span><span style="color: #333333;"> </span><span style="color: #333333;">powerbarReverse</span><span style="color: #333333;">.</span><span style="color: #333333;">fillAmount</span><span style="color: #333333;">;</span>
 <span style="color: #333333;">    </span><span style="color: #333333;">pbDirection</span><span style="color: #333333;"> </span><span style="color: #333333;">=</span><span style="color: #333333;"> </span><span style="color: #333333;">-</span><span style="color: #f57d00;">1</span><span style="color: #333333;">;</span>
 <span style="color: #333333;">    </span><span style="color: #333333;">actionstate</span><span style="color: #333333;"> </span><span style="color: #333333;">=</span><span style="color: #333333;"> </span><span style="color: #3364a4;">swingType</span><span style="color: #333333;">.</span><span style="color: #333333;">stopSwing</span><span style="color: #333333;">;</span>
 <span style="color: #333333;">}</span>
 
<span style="color: #009695;">void</span><span style="color: #333333;"> </span><span style="color: #333333;">EndSwing</span><span style="color: #333333;">()
</span><span style="color: #333333;">{</span>
 <span style="color: #333333;">    </span><span style="color: #333333;">pbDirection</span><span style="color: #333333;"> </span><span style="color: #333333;">=</span><span style="color: #333333;"> </span><span style="color: #f57d00;">0</span><span style="color: #333333;">;</span>
 <span style="color: #333333;">    </span><span style="color: #333333;">actionstate</span><span style="color: #333333;"> </span><span style="color: #333333;">=</span><span style="color: #333333;"> </span><span style="color: #3364a4;">swingType</span><span style="color: #333333;">.</span><span style="color: #333333;">endSwing</span><span style="color: #333333;">;</span>
 <span style="color: #333333;">}</span>
 </span> </span></span>
IEnumerator MovePowerBar ()
1
{
1
    while (pbDirection != 0)
1
    {
1
         if (pbDirection == 1)
1
         {
1
          powerbarReverse.fillAmount += Time.deltaTime / powerCurveStart.Evaluate (powerbarReverse.fillAmount);
1
             if (powerbarReverse.fillAmount &gt;= 1.0f)
1
             {
1
                 pbDirection = -1;
1
                 powerbarForward.fillAmount = 1f;
1
                 actionstate = swingType.stopSwing;
1
             }
1
         }
1
         else
1
         {
1
             powerbarReverse.fillAmount -= Time.deltaTime / powerCurveEnd.Evaluate (powerbarReverse.fillAmount);
1
             if (powerbarReverse.fillAmount &lt;= 0f)
1
             {
1
                 pbDirection = 0;
1
                 actionstate = swingType.endSwing;
1
             }
1
         }
1
         yield return null;
1
     }
1
 }

 

Arcadia Slots HD for Apple TV

Arcadia Slots on AppleTV, iPad, iPhone

Arcadia Slots HD – now available for Apple TV along in addition to iPhone, iPad and iPod. 

Apple-TV-iPad-Air-2-iPhone-6s-horizontal AS1

Downloadontheappstore

Wild Jackpots:
Win 2 to 5,000 credits – Wild! symbol matches any other symbol on the payline. Hit three Wild! symbols in a row to win the Jackpot.

24 Carat Double Sevens:
Win up to 10,000 credits – ‘Double’ symbol matches any other symbol on the payline, and doubles your payout. Two Doubles on the same payline quadruple your payout! Hit three ‘Double’ symbols in a row to win the 10K Jackpot.

Wild Gold Silver & Bronze:
17 different ways to hit a winning payline, from any three different symbols of the same color, to three ‘Wild!’ symbols in a row. Any combination of a Gold, Silver, and Bronze symbol in order gives an even bigger win. Hit the jackpot for 5,000 credits!

Double Paycheck:
Wilds not only matchany symbol on the payline, it doubles the winning payout too! Hit two ‘Double’ symbols on the payline, and your winning combination is quadrupled! Win up to 2,500 credits in one spin!

Black Gold Double Jackpot:
10,000 credit jackpot – the ‘Double Jackpot’ Wild doubles all winning pay lines. Two Doubles on the same payline multiply your win by 4X! See if you can hit those Lucky Sevens!

Triple Payday Bonus:
We can’t triple your paycheck, but we can triple your wins, or even multiply your winning payout by 9X! Bars, Sevens, and Triple bonus multiplier.

Double Gold Silver & Bronze.
Similar to Wild Gold Silver & Bronze, but with bonus multipliers. Double or even quadruple your winning paylines, and a jackpot work 4,000 credits!

Hi Five Jackpot.
Cherries, Bars, Sevens and a Five Times multiplier that stacks with your winning payouts. Get two ‘5X’ symbols on the same line, and increase your win 25X!

Lies Companies tell Deaf and Hard of Hearing Canadians about online Closed Captions.

“We’re working on it.”

“It’s on our roadmap.”

“Thanks for making us aware of the issue.”

“We’re working towards providing closed captions.”

This is just some of the BS told to deaf and hard of hearing Canadians when it comes to the lack of closed captions in online content on Canada. It’s been going on for years. In June of 2012, I received an email from CTV’s Executive Producer Mark Sikstrom:

CTVEmail

After 6 years and 9 months CTV still does a terrible job of close captioning online news videos. Often there a no close captions, or they reuse live captions without cleaning up the mistakes.

Spacechannel

Space.ca wants to thank me for letting them know about the “closed captioning issues” on their site. Almost 6 months later, they still haven’t ‘solved the issues’. It took me one day to figure out how to make online Closed Captions work on OS X, Windows 8 & 10, Windows 8 Mobile, Android, and iOS.

For weeks, they advertised a new show, “The Expanse”, and that you could preview the first two episodes online at their website. Except there’s no closed captions, so deaf and hard of hearing Canadians are screwed. The sad part? Syfy, the producers of this series also has this show on syfy.com, and it’s closed captioned (but only available to to watch if you’re in the US). Almost 6 weeks later (as of this posting date), and there’s still no closed captions on the episodes on Canada’s Space.ca.

Telus has been telling me about how they’re ‘working on it’ as well, when it comes to close captioning live streaming television in their Optik TV Go app. I’ve asked about this several times over the years:

Telus

Still no closed captions for their live streaming tv on their app.

Every time a broadcaster or telecom tells me, “They are working on it!”, I always think of this scene from the movie Shooter:

“Working on it” is the new version of, “The check is in the mail.”

Time to end the BS, and #GetCaptioning.