►
From YouTube: Scalable Multiplayer Game Design with OpenShift (E7)
Description
This monthly series explores what it takes to design a scale-out multiplayer video game architecture using containers and OpenShift. There will be live coding, philosophical design discussion, and everything in between.
Host:
Erik Jacobs
Guests:
* Derek Reese
* Michael Clayton
* Roderick Kieley
* Jared Sprague
A
Hello,
everyone
thank
you
for
joining
in
another
live
stream
of
the
scalable
multiplayer
game
design
joining
me
today
are
roddy
kylie,
hey
folks.
Did
I
get
that
right
this
week.
A
I
remembered
and
derek
hey:
hey
yeah,
so
today
we
we've
all
made
we've
all.
We've
made
a
little
bit
more
progress,
not
a
lot.
Things
have
been
a
little
busy
crazy
here
share
my
screen.
Real
quick
can
y'all
see
my
screen.
B
C
A
Nice
here
watching
watching
you
watch
yourself,
let's
see
terminal,
I
know
this
is
really
tiny.
I'm
going
to
make
it
bigger
in
a
sec,
moves
many
things
to
config
and
sets
explicit
rotation
right.
Okay.
So
if
we
go
to.
A
Github.Com
or
that
game
dev
srt
game
server,
that's
curious
that
that's
the
first
thing!
That's
there
all
right
am
I
still
working
in
a
branch.
A
That
explicit
rotation
okay,
so
we
had
some
challenges
with
rotation
that
we
were
playing
with
last
week
or
last
show
where
I
was
trying
to
use
box
2ds
like
apply
rotational
force
mechanism
and
and
derek
essentially
suggested
like
well.
Maybe
just
like
do
pretend
physics
and
it'll
be
more
fun
and
I
said
oh
well.
I
guess
I
guess
that's
a
good
idea.
Oh,
let
me
make
sure
that
zoom
is
working
right
here.
A
Yeah,
I
I
don't
know
I
I
think
I
usually
have
to
make
some
kind
of
change
or
whatever
anyway,
so
so
derek
suggested.
You
know,
make
physics
fun
again
and
I
I
got
very
frustrated
because
I
didn't
understand
how
to
do
that
and
then
I
sort
of
said
well.
A
Let
me
let
me
do
my
what
I
give
is
my
own
frequent
advice
normally,
which
is
try
it
and
see,
and
so
one
thing
that
had
been
done
previously
by
jared
who
didn't
join
us
today
was
he
he
made
this
configuration
class
that
would
read
stuff
out
of
a
yaml,
and
so
we
had
some
things
that
weren't
in
the
config.
So
last
episode
I
had
turned
the
ship
into
a
cigar
shape
by
giving
it
a
length
and
a
width.
I
made
those
configurable.
A
I
gave
the
the
physics
body,
a
density
which
is
how
box
2d
calculates
mass.
It
actually
looks
at
the
area
of
the
2d
object
and
the
density
of
the
object,
and
then
it
calculates
the
mass
that
way.
You
don't
actually
set
a
mass,
so
I
made
that
configurable
and
then
I
added
some
command
line
flags
for
that
config
and
then
what
we
didn't
have
was
we
had
nothing
that
actually
told
you
what
it
had
done
if
it
pulled
files
in
so
I
made
the
logs
barf
out
the
actual
config
settings.
A
So
this
is
just
adding
stuff
to
the
headers
file.
I
changed
a
bunch
of
log
message,
log
levels
around
because
it
was
acting
kind
of
bizarre.
It
was
really
difficult
to
like
we're
going
to
have
constantly
be
tweaking
what
logs
get
spewed
at
what
log
level,
but
it
was
like
it
was
either
too
verbose
or
it
didn't
tell
you
anything
more
log
messages,
and
so,
let's
go
down
to
the.
A
I'm
gonna
find
where
I
actually
did
the
turny
thing:
okay,
so
here's
here's
the
turny
thing
so
we
had
played
with
some
of
this
last
episode.
We
applied
force
to
the
center
and
you
know
it
did
its
thing,
and
so
here's
where
I
did
the
new
tourney
thing,
and
so
basically,
what
I
said
was
derek
had
done
some
math
back
in
the
envelope
a
couple
of
episodes
ago,
and
I
think
you
had
said
something
like
180
degrees
in
a
few
seconds
or
whatever,
and
so
I
said
all
right.
A
Well,
let
me
let
me
turn
that
into
per
second,
which
was
45
degrees
per
second
and
then
I
said
well,
if
the
server
sleep
cycle
is
really
slow
like
every
time
we
tick
through
this
calculation,
if
we
turn
the
ship
45
degrees
like
it's,
it's
going
to
turn
in
like
in
instantly
in
circles,
and
so
I
said
all
right.
Well,
let's,
let's
just
kind
of
hack
that
down
and
divide
it
by
the
sleep
cycle
in
milliseconds
and
whatever
then
I
said.
A
A
And
so,
if
you
multiply
one
or
negative
one
by
the
number
of
degrees,
you
either
get
positive
degrees
or
negative
degrees,
depending
on,
if
you're
turning
left
or
right
annoyingly,
I
shouldn't
say:
annoyingly
box
2d
wants
things
in
radians
and
the
way
to
convert
degrees
to
radians.
Is
you
multiply
by
pi
over
180?
I
probably
should
have
created
another
variable
here.
That's
not
called
degrees
once
it's
radians,
so
bad
bad
on
me,
but
whatever,
and
then
we
just
transform
the
position
of
the
object
by
rotating
it
to
the
new
number
of
degrees.
A
A
C
C
A
All
right
pseudo
pod
man
start
artemis,
so
I'm
using
podman,
which
is
red,
hat's,
cryo,
oci,
run
c
implementation
of
a
container
engine
payment.
There's
not
really
a
daemon.
It's
it's
daemon-less!
That's.
A
Well
and
it's
just,
it
only
tries
to
do
one
thing,
so
it's
super
lightweight
right,
pseudo,
pod
man,
our
tennis
grab,
address
all
right
1088.05.
A
A
Don't
need
to
make
files
yeah,
okay,
so
that's
there!
So
that's
good!
I
should
just
be
able
to
run
the
server
then.
D
D
Srt
boogers
open
folder
so
come
on
really.
C
A
A
Yeah
and
it's
moving
in
the
direction
that
the
ship
is
pointed
and
then,
if
I
turn
the
ship
and
apply
thrust,
it's
moving
still
in
the
direction
that
the
ship
is
pointed
and
if
I
turn
it
like
that,
it'll
eventually
go
in
the
right
direction,
so
it
actually
functions
like
it
does
exactly
what
it's
supposed
to
do
now.
This
is
pretty
fast.
We
might
want
to
might
want
to
tweak
that.
But
the
other
thing
is
that
we're
also
just
kind
of
trying
to
get
to
some
basics
stuff
here.
A
So
one
thing
we
could
do
to
make
the
ship
faster
just
for
giggles.
Stop
this
I'll
change
I'll
triple
the
force
multiplier
to
is
that
one
hundred
thousand
million?
So
this
is
nine
million
newtons,
because
box
2d
wants
things
in
newtons,
so
that
is
the
thrust
force
multiplier
for
the
main
engine
of
the
escape
pod,
if
you
will-
and
so
now,
if
I
go
to
local
hosts
and
we
get
a
new
ship,
if
I
hit
the
up
button,
we
I
guess
we
move
three
times
faster.
A
C
There's
no
speed
limit
in
space.
Well,
besides,
you
know
the
speed
of
light.
A
Yeah,
you
would
think
that
if
you
keep
applying
thrust
that
you
would
just
keep
going
faster
and
faster
and
faster,
but
maybe
but
I
guess
box
2d
is
like
well,
you
you're.
Applying,
I
don't
know
whatever
whatever
is
the
problem
is
the
problem.
If
I
press
the.
B
A
C
E
Is
because
we
have
c
plus
plus.
A
B
So
the
pb
stuff
is
all
related
to
protobuf.
A
B
B
Fixture
pointer
right
there
well,
the
one
that
has
the
friction
setting
in
it
right,
so
it's
either
the
body
depth
or
the
fixture.
A
D
B
D
Right
refresh.
A
All
right
here
we
go
same
same
thing,
so
it
reaches
some
top
speed
and
then
and
then
stops
doesn't
go
any
faster.
B
So
this
this
work
is
this:
on
master
at
the
moment,.
A
I
want
to
pull
up
this
to
make
sure
okay,
oh
you
know
what
I
think
this
is
the
pod
density
mass.
A
A
A
D
D
E
D
A
A
E
A
C
A
A
C
A
Set
the
pod
dependencies
which
is
doing
pod
dependencies
and
then
here's
where
we
do
b2d
pod
dependencies,
so
b2
d-pod
dependencies
is
the
constructor.
Is
this
function,
which
is
where
we're
setting
the
fixture
def
so
we're?
Probably
inheriting
some
kind
of
default
friction
create
the
pod
using
the
dependencies.
We
don't
care
about
the
pod,
because
that's
not
the
b2d
stuff.
We
set
the
mass
data,
push
the
pod
onto
the
list
of
pods,
so
what
we
can
do
is
probably
is
there
a
get
friction.
D
A
D
B
C
That's
how
you
do
it
where
the
heck
do
we
set
any
damping
stuff.
A
E
C
So
we
have
linear,
damping
and
angular
damping
set
at
51
and
50
and
those
that
seems
high.
That
seems.
A
A
The
proto
is
just
how
we
send
messages
across
the
wire.
I
would
assume
that
it
has
to
be
somewhere
in
the
creation
of
either
the
body
object
or
the.
A
B
A
Well,
yes,
so
I
was
just
about
to
say,
like
the
damping
get
angular
damping,
where
do
you
set
the
damping
that
looks
to
be
on
the
body
itself
set
linear,
damping.
E
B
D
A
A
E
A
I've
I've
asked
both
jared
and
michael
to
review
the
leave
button
and
they
have
yet
to
you
have
to
do
so.
Let
me
push
my
thrust
changes.
I
don't
know
if
I
actually
pushed
him.
A
A
C
This
is
the
spaceship
california
game
now.
A
Give
me
a
second
here
all
right,
so
I
just
pushed
thrust
rotation
branch
to
this
web
client.
Okay.
So
if
you
merge
your
buttony
stuff
into
there,
that
that.
C
What's
super
fun
here
is:
if
I
can
get
this
working
in
2,
then
I
can
take
this.
My
server,
my
laptop
and
a
raspberry
pi
turn
that
into
a
cluster
and
then
try
to
scale
this
up
in
kubernetes
in
my
house,
which
is
totally
going
to
be
a
waste
of
a
weekend.
But
you
know
I
got
vaccine
number
two
coming
up
soon,
so
what
else
am
I
gonna?
Do.
D
D
B
B
We
have
16
divided
by
1000
times,
45,
that's
a
small
degrees
predict.
It
could
take
forever.
Hang
on
a
second
to
maybe
that's
my
problem
here,
let's
jack,
that
back.
B
D
A
A
E
D
A
Share
again
there
we
go.
I
wanted
to
stop
this,
that's
the
stop
button.
I
wanted
all
right.
So,
let's
reset
that,
so
you
said,
the
challenge
was
the
math.
B
A
B
Put
float
in
front
and
then
put
it
in
parentheses,
that's
the
old
school
c
style
cast.
We
should
be.
B
A
Oh,
do
you
want
to
push
yours,
or
should
I
push
mine?
Oh.
B
A
C
C
A
D
A
Why
it's
funny
it's
been
mute.
I
don't
even
know
why
it's
not
muted
or
why
it
is
muted,
on
mute
site,
but
there's
no
sound
because
my
laptop.
C
That's
the
joke.
I
made
last
time
the
only
working
linux
device
with
actually
functioning
audio
is
on
mars.
A
Right
now
right
all
right,
so
I
can
stop
the
server.
So
that's
cool
okay,
so
you
said
you
want
me
to
push
mine
rod.
Yep
go
redhead
all
right,
so
gear
checkout,
dash
b,
damping
and
floaty.
A
A
Cool,
oh
so,
going
back
to
the
the
game
thing.
So
we've
been
trying
to
build
essentially
a
battle
royale-ish
space
game
where
you
start
in
an
escape
pod
and
as
you
fight
with
other
players,
you
pick
up
the
detritus
that
gets
dropped
and
you
can
sort
of
firefly,
reverse
style,
strap
it
on
to
your
ship
and
eventually
you
become
this
big,
lumbering
mass
and
that
pulls
you
closer
to
the
center
of
the
game.
E
B
My
my
rebase
commandeer
is
giving
me
trouble
saying
invalid
upstream,
I
don't
know
what
that
is.
Maybe
I
just
don't
have
it
the
name
that
anyhow,
I
will
go
ahead
and
just
let
me
make
sure
it
works
and
then
I'll
go
ahead
and
share
so.
E
B
Yeah
what
I
was
looking
at
doing
a
while
ago,
we
had
raised
an
issue
upstream.
Let
me
grab
the
link
here
and
I'll
dump
it
in
chat.
B
B
Way
of
joining
I.e,
just
running
the
code
and
you
would
automatically
the
client
would
automatically
try
to
join
right.
Yes,
so
at
some
point
we
need
to
be
able
to
click
the
button
and
some
gooey
stuff
happens,
and
maybe
we
type
a
login
and
we
get
a
password
from
like
your
ruby
stuff
and
eventually,
then
we
connected
with
the
client
to
the
server.
A
B
Right
so
in
the
in
the
way
things
are
laid
out
here
in
the
structure.
We
have
scenes
kind
of
like
a
unity
scene,
but
they're
phaser
scenes,
and
we.
A
A
B
A
B
Because
part
of
the
question
was
like
hey
like
beforehand,
we
did
all
this
space
or
two
stuff.
At
least
this
was
my
my
understanding
from
the
client
side
of
things.
We
did
all
this
phase
or
two
stuff
in
the
past.
The
people
who
are
writing
the
client
code
like
jared
and
michael
and
stuff
and,
like
hey,
you
know,
adding
buttons
used
to
be
really
easy
used
to
be
straightforward.
To
do-
and
I
remember
you
said
you
know,
I
looked
at
the
documentation.
B
Phase
or
three
so
right,
so
I
was
like
well
this
when
I
started
looking
at
this
again,
I
was
like
oh,
I
can
dig
into
something
like
on
the
server
side
and
kind
of
scratch,
my
head
for
a
bit
or
maybe
I'll,
do
something
quite
cool
easy
because
in
my
case,
like
I
wrote
my
first
gui
from
scratch,
using
triangles
like
over
20
years
ago
now,
and
I've
written
a
number
of
things.
A
E
B
Spaces
and
places
so
not
exactly
great
when
you
don't
know
what
you're
doing
and
you're
kind
of
messing
about
right.
Sorry,
I
spent
a
little
bit
of
time
cleaning
up
but
either
way.
Let
me
get
it
up
and
running
here
show.
C
C
Javascript's
kind
of
funny,
because
at
the
base
level
it's
kind
of
understandable,
right,
everything's,
an
object,
simple
programming,
paradigm
right
and
then
at
the
high
level.
It's
like!
Okay!
I
understand
you
know
this
set
of
apis
that
I
can
use
to
do
stuff,
but
in
between
that
is
the
biggest
stack
of
shenanigans
you
can
ever
possibly
imagine.
B
Alright,
so
in
theory,
if
I
run
this
thing
up
here,
let's
go
ahead
and
share
my
screen.
Yeah.
B
All
right,
so,
let's
just
go
ahead
and
share
my
empty
tab.
B
B
D
A
It
took
me
it
took
me
forever,
but
now
that
I'm
doing
a
lot
more
like
coding
and
I've
been,
I
was
playing
with
godot
over
the
weekend
and
doing
stuff
there.
Oh
man,
you
figured
out
how
to
write
text
on
the
screen.
Yeah.
B
E
B
But
in
this
case
we've
only
got
one
and
it's
connected
to
the
keyboard
and
not
yet
to
the
mouse.
So
if
I
hit
space
on
join
here,
we
go
and
I
gotta
turn
down
the
music,
because.
A
C
B
Yeah,
so
let's
just
stop,
and
so
what
I
don't
see
is
the
green
button
here
for
some
reason
either
I
don't
know
is
that
still
on
a
branch
do
we
need
to
get
all
that
stuff.
B
E
B
B
C
B
When
technology
works
the
first
time
all
right
so
as
we're
saying
button,
selector
yeah,
so
so
okay,
so
I
got
to
give
a
nod
to
the
kenny
series
of
assets.
So
in
this
tutorial
there's
this
guy,
I
see
his
assets
all
over
the
place,
so
I'm
looking
for
game
stuff
kenny.nl,
and
so
he
has
a
ui
pack,
space
expansion,
which
sounds
very
appropriately
themed
in
this
case
and
the
tutorial
uses
this
glass
panel
and
the
cursor
hand
right
so
free.
B
Yeah
and
he
does
a
ton
of
them,
there's
opengameart.org
and
he
does
a
ton
of
stuff
there
space
kit.
So
basically
he
has
this
little
in
in
the
sprite
map,
there's
a
little
hand.
So
right
now,
I'm
just
using
the
hand
and
then
there's
like
a
box.
That's
translucent
with
a
border
and
it's
squared,
and
we
just
stretch
it
out
and
use
it
for
a
button
right
and
then
we
just
change
the
color
to
green.
When
we
when
we're
selecting
the
right
one.
B
Right
so
in
our
preload
scene,
like
we
have
the
scene,
that
kind
of
happens
before
the
main
scene
and
the
main
menu
scene
happens
where
we
load
up
our
background
and
our
ship
images.
B
So
like
this
one
of
those
things
where
quick
and
dirty
is
just
throw
an
image
in
there
and
get
to
use
it
in
the
future.
What
we'd
want
to
be
doing
is,
you
know
basically
using
like
texture,
packer
to
pack
sprite
maps
and
that
kind
of
stuff,
but
you
know
I
don't
think
efficiency
is
not
necessarily
our
our
main
purpose
here.
At
the
moment,.
B
So
I
knocked
out
the
the
client
initialization,
so
basically
we
we
create
a
new
amqp
client
on
the
broker
endpoint
using
the
game
model,
but
then,
in
this
case
we're
no
longer
doing
asynchronous
initialization.
B
And
then
here
we
create
an
array
for
our
buttons
and
we
have
a
button
selector
which
is
going
to
be
an
image,
and
then
we
have
a
selected
button
index.
So
essentially
we
have
an
array
of
three
items:
we're
currently
on
one
of
those
three
and
as
you
move
your
keys
up
and
down
it
just
changes
your
index
and
it
changes.
D
A
Okay,
that's
cool.
B
So
basically,
like
literally,
I
just
lifted
the
code
and
put
it
in
the
right
places
and
then
cleaned
it
up
a
little
bit
to
fit
our
structure
a
little
bit
better
right,
yeah.
So
there's
like
select
button
and
you
can
see
when
you
select
button
you
say,
set
the.
B
And
then
set
the
newly
selected,
so
then
you
get
the
new
button
right,
based
on
the
indexes
being
handed
in
that
you're
selecting,
and
then
you
set
the
tint
for
that
to
green,
which
is
the
code
for
green
right
there
right
and
then
separately.
Then
it
moves
the
hand
icon
up
and
down
so
so.
What's
interesting
is
that
that
I
found
about
phaser,
so
phaser
2,
I'm
assuming
based
upon
the
conversations
previously
had
like
this
nice,
like
kind
of
ui
thing
to
get
up
and
running
really
quickly.
B
Maybe
it
might
not
have
been
like
production
ready
to
go
into
your
game
as
a
final
thing.
But
you
know,
like
a
button,
is
a
pretty
basic
thing.
You
want
to
use
like
pretty
much
out
of
the
gate
right
for
doing
stuff,
visual,
but
like
we're
back
here
to
like
this
is
kind
of
the
same
type
of
stuff
that
I
was
doing
you
know
20
years
ago
to
build
my
button
class
out
of
triangles.
You
know
what
I
mean.
E
B
A
square
we're
going
to
put
the
text
on
it,
I'm
going
to
change
the
color
we're
going
to
watch
where
our
keys
go.
We're
going
to
count
our
indices,
then
we're
going
to
flip
stuff
around
and
then
we're
going
to
redraw
right
so,
like
basically
like
this
tutorial,
just
basically
went
through
those
basic
steps
using
phaser.
Three.
So
like
we
have
select
next
button
and
you
know
you're
iterating
through
you
make
sure
you
don't
go
past
your
length
of
your
array,
all
that
kind
of
stuff.
B
You
know
you
don't
want
to
blow
yourself
up,
at
least
in
native
land.
You
blow
yourself
up,
you
might
get
away
with
it
in
javascript,
maybe
and
then
in
the
confirm
selection
like
if
you
look
in
the
console
log
of
your
browser,
like
it
emits
a
selected
event
and
we
log
like
where
we
are
and
what
we're
doing
that
kind
of
thing.
B
So
we
grab
the
currently
selected
button.
We
emit
the
selected
event
and
then
we
say
well
hey.
This
is
really
hacky.
If
zero
is
the
selected
button
index,
because
I
know
that
join
is
my
first
button
in
in
our
array,
then
go
ahead
and
initialize
the
client
and
start
main
scene
and
then
pass
through
the
data
objects
that
we
want
to
be
keeping
track
of
to
utilize
in
other
scenes
that
are
going
to
be
shared,
which
is
our
client
for
amqp,
and
then
the
game
model
itself,
where
the
data
is
going
to
be
kept
right.
B
And
I
wasn't
sure
like
if
that
was
going
to
blow
it
up
or
not
so
because
I
like
it
like,
I
literally
just
got
this
to
work
a
little
while
ago.
So
we
probably
want
to
do
that
at
some
point.
But
for
now
we
have
our
basic.
Like
here's
the
play
button,
you
add
an
image
you
set
its
size.
The
texture
is
this
glass
panel.
It
came
from
kenny's
work.
B
We
set
the
size
of
pixels
on
the
screen,
so
one
of
the
other
things
here
that
we
that
we're
completely
ignoring
from
a
gui
point
of
view
is
that
we're
talking
about
pixels
right
we're
not
talking
about
points
we're
not
talking
about
like
percentages
of
your
screen.
So
like
I'm,
we're
assuming
like
1920
by
1080.
B
If
somebody
was
on
a
mobile
device
or
if
they
had
a
smaller
screen
like
the
results,
are
not
going
to
be
correct,
right,
they're,
correct
for
me,
but
they're,
probably
not
going
to
be
correct
for
somebody
who
runs
like
a
4k
display
or
anything
like
that.
Right.
D
B
So
there's
a
whole
bunch
of
calculations
between
percentages
and
points
and
pixels
and
stuff
that
goes
on
to
scale
your
displays
and
stuff
and
to
make
sure
all
your
gui
parts
get
put
where
they're
supposed
to
be
so
we're
ignoring
all
of
that
stuff.
We're
just
sticking
an
image
up
there
or
putting
some
text
on
it.
So
this
play
button
that
we
created.
We
push
it
on
to
the
array
and
then
we're
saying
on
play.
B
Button
selected
log
join
message
in
the
console
and,
like
I
said
up
above,
we
actually
handle
on
the
confirm
that
we
actually
execute
and
go
to
the
main
scene
itself
right.
So
it's
actually
a
surprising
the
lot
of
like
low
level
work
to
do
buttons
at
the
moment
that
I
that
I
wouldn't
have
expected.
I
guess
because
phaser
was
in
version
two
and
for
some
reason
they
decided
in
version
three.
B
It
wasn't
going
to
be
part
of
the
core
offering
of
the
library
right,
so
I
mean
maybe
there's
maybe
there's
a
bunch
of
great
awesome
community
gui
libraries
for
phaser.
Now
maybe
that
was
the
idea
was
to
spin
off
the
responsibility
out
of
the
core
right,
like
that.
Could
that
could
make
sense
so
yeah
and
then,
basically,
after
that
point
in
time,
really
once
you
get
to
the
main
scene
at
this
point,
it's
basically
exactly
like
it
was
right.
So
so,
ideally
what
you
would
have
you'd
either
have
like
a
another
party.
B
Third
party
library,
open
source
plugs
into
phaser
3d,
and
you
can
just
call
and
say,
create
me
a
button
here
right
and
we
would
do
that
again
in
the
main
scene
and
we'd
have
like
the
leave
button
up
in
the
corner,
or
maybe
when
you
we'd,
you
know
we
look
for
the
escape
key
being
pressed
when
the
escape
cave
was
pressed
little
gui
would
pop
up
like
this
is
our
quit
menu
and
then
you
can
either
set
your
settings.
It
goes
on
you.
B
Exactly
right,
so
yeah
very
much
like
baby
steps,
learning
how
to
crawl,
create
like
the
basic
buzzing
kind
of
thing
and
look
for
better
options.
At
this
point.
A
So
I
have,
I
have
found
many
many
references
to
in
phaser
three
like
use
a
container
to
hold
your.
B
Yeah
cause
like
in
in
godot
right
when
we
were
doing
the
pod
escape
thing,
and
I
don't
know
if
you
you
were
using
godot
this
weekend
to
do
some
work
right.
Yeah
godot.
B
So
you
can
like
drag
and
drop
your
pieces
and
you
can
hook
them
up
to
your
code
and
so
it's
a
different
environment
to
develop
in,
whereas
in
here
we
were
like
hey,
let's
load
an
image.
Let's
turn
it
green.
Let's
put
some
text
on
it,
so
I
guess
it
all
depends
on.
If
you
know,
if
you're
really
fast
hyper-
and
you
know
your
library
really
well-
you
can
be
more
efficient
than
you
can
be
with
a
gui,
sometimes
right.
B
But
if
you
don't
know
what
you're
doing
like
jumping
into
godot
would
probably
be
a
little
bit
easier.
Oh
look
it's
that
gooey
thing.
Let
me
drag
and
drop
that
thing
over
here.
It's
like
yeah.
I
really
like
that.
Draggy
droppy
thing
like
that
works
easier
when
you
don't
know
what
you're
doing
right,
which,
when
I
started
doing
good.
Oh,
I
didn't
know
what
I
was
doing
either
so
everybody
starts
there
at
some
point.
E
B
B
C
C
C
A
So
what
was
your
oh
so
are
we
I'm
going
to
merge
damping
and
floaty
okay.
B
D
B
A
B
Although,
truly,
though
I
do
think
that
since
I've
been
working
at
red
hat
and
more
more
on
infrastructure
than
games,
I
think
I
think
in
games
as
a
developer.
My
certainly
as
an
indie
developer,
I
think,
being
focused
on
the
happy
path
when
you're
trying
to
prioritize
your
hours
of
development
working
on
the
happy
path
and
looking
for
the
fun
is
very
important
and
the
error
path
and
the
stuff
that
goes
wrong
is
less
so
because
hey
they
can
always
restart
it.
B
B
B
B
So
because
it
got
imported
from
my.
E
D
C
D
A
Okay,
hey
look,
oh,
and
I
can't
use
the.
B
E
B
You
got
the
join
message
and
by
message
I
mean
on
the
console
log.
A
D
A
So
preload
scene-
that's
where
oh,
the
preload
scene
still
has
the
client
in
it
in
it.
On
my
side,.
D
B
In
the
main
menu,
rather
than
the
it
used
to
be
in
the
preload
and
then
the
init
gets
called
hang
on,
let
me
open
the
source
again,
I'm
just
looking
at
something
else.
There.
A
A
B
A
Well,
because
it
can't
just
be
around
confirm
selected
because
it
would
need
to
be
if
they
selected
the
specific
button.
A
E
D
A
A
A
D
B
A
B
A
That's
fine,
so
let
me
maybe
it
was
just
the
server
was
not
actually
happy.
So,
let's
try
again.
D
B
C
E
A
A
A
E
E
D
A
A
So
here's
here's
the
here's,
the
difference
right.
The
model
holds
the
entirety
of
the
game
state,
including
the
player's
array.
The
model
doesn't
know
who
you
are.
A
B
A
B
B
A
D
A
So
it's
working
now
so
that's
cool.
We
got
in
through
the
menu,
we
have
our
quit
button
and
if
I
click
the
quit
button,
it
quits
hooray
and
on
the
server
side
we
see
a
security
leave
command
that
the
player
has
quit.
A
Progress
almost
yeah,
the
only
thing
we
couldn't
figure
out
is
like
there.
There
is
a
supposedly
there's
a
way
to
intercept
when
the
user
closes
the
browser
tab.
A
E
A
A
Oh
I'm
in
a
detached
head
state,
good,
let's
check
out
dashb
main
what'd,
you
call
it
main
menu
ui.
B
Main
menu
yeah
camo
case.
B
And
in
the
main,
in
the
menu
scene,
javascript
one
of
the
things
got
ad
that
got
added
in
from
the
tutorial
was
a
line
that
says:
this.events.once
phaser,
scenes
events,
shutdown
and
then
has
like
a
lambda
function.
A
Don't
actually
shut
down
referred
to
yeah,
I'm
not
sure
what
you
were
talking
about
all
right,
so
here's
red
hat
game,
dove
srt,
I'm
just
going
to
create
a
pr
to
merge
it
into
master,
because
it
sounds
fine
to
me
and
I've
got
my
little
fix
for
the
uid
squash
and
merge
off.
We
go
all
right
done.
A
I
haven't
made
a
typo.
I
could
check
get
blame
on
that
one,
let's
see
so
next.
I
really
want
to
get
some
text.
D
A
A
A
A
A
So
we
need
the
player
and
the
text
to
be
in
a
container
new
container,
the
scene
to
which
it
belongs:
children,
an
array
of
game
objects
to
add
to
the
container.
Okay,
that's
cool!
How
do
we
add
objects
after
the
fact
to
the.
E
C
C
Yeah
yeah,
let
me
move
all
of
this
over
to
a
monitor
that
you'll
be
able
to
see
it
on.
That's
the
secret.
B
I've
been
slowly
incrementally
growing,
right
like
over
over
the
course
of
years.
Like
I
started
out
like
with,
like,
I
don't
know,
19
inch
monitor
and
then
I
moved
to
like
a
24,
and
then
I
moved
to
another
24,
and
then
I
moved
to
another
24
and
just
like
within
the
last
two
years.
I
added
a
fourth
and
then
my.
B
C
Yeah
my
perfect
setup
is:
I
have
an
ultra
wide,
which
is
usually
for
documentation
or
whatever
it
is,
I'm
working
on
be
able
to
move
stuff
around
where
I
want
to,
and
then
I
have
a
vertical
24-inch
code
monitor,
which
is
an
ips
screen,
yep
and
yeah.
C
C
It
running
localhost
inside
wcl2
and
you
can
see
here
in
the
the
debug
console
it's
actually,
it's
got
the
keys.
C
You
try
to
open
in
wcl2
and
I
don't
know
what
the
blocker
is
to
doing
it.
I'm
assuming
it's
because
the
network
translation
layer
is
so
low
level.
They
have
to
probably
write
a
ton
of
code
to
get
that
stuff
to
play
nicely.
But
yeah
I
mean
here
it
is
it's
working.
It's
connected.
I
don't
have
the
ship
you
know
appearing
or
moving
around
yet,
but
you
know
everything
else,
all
the
assets
load
and
everything
and
let
me
actually
drag
over
the
windows
terminal
here.
C
So
I
actually
have
the
artemis
cloud
item
broker
running
and
then
the
game
server
here-
and
this
is
in
wcl2
and
then
same
thing
with
the
client
running
from
wsl2,
and
so
both
of
those
are
getting
served
from
linux.
But
are
you
know
running?
The
client
is
running
in
a
web
browser
in
a
windows,
environment.
B
C
Yeah
and
in
order
to
get
that
all
running,
it
was
just
a
bit
of
a
simple
docker
compose
setup
here
and
a
couple
of
minor
tweaks
to
the
docker
file,
but
I'm
just
using
the
docker
networking
automated
links
system.
So
I
can
give
artemis
cloud
the
you
know:
dns
entry,
artemis,
cloud
and
docker
networking
takes
care
of
all
the
rest
of
it.
So
I
don't
have
to
worry
about
copying
ip
addresses
around
or
building
my
own
network
or
anything
like
that.
It
just
it
all
just
works.
B
E
C
Oh,
my
god,
what
a
what
a
terrible,
terrible,
awful
equal
question
with
the
disclaimer
that
windows
drives
me
up
a
wall
for
a
lot
of
different
reasons,
mostly
around
the
lines
of
it's
not
open
source.
So
I
can't
fix
stuff
when
it
breaks
and
then
you
know,
there's
there's
a
lot
of
legacy
business
decisions
so
in
linux,
there's
a
lot
of
stupid
legacy
decisions,
but
you
have
the
source
code
to
go
figure
out.
Why
and
windows
like
you
get
to
the
end
of
the
google
pile
and
it's
some
developer
commenting
from
1998.
C
B
E
C
Yeah-
and
you
don't
want
to
run
that
craft
like
on
top
of
linux
like
linux,
you
know
it
has
its
issues,
but
in
most
cases
like
it's
pretty
clean
and
in
the
cases
where
it's
not
you
kind
of,
can
research.
Why
and
doing
it?
The
other
way
around,
where
most
of
the
primary
pass-through
windows
are
still
incredibly
optimized,
even
though
it's
there's
all
this
craft
in
there
running,
linux
is
kind
of
that
simple
layer
on
top
of
that
is
is
much
much
easier.
C
B
C
C
B
B
The
last
couple
of
years
they've
open
sourced
a
ton
of
stuff.
I
don't
know
that
they're
there
on
all
fronts,
but
certainly,
I
think
their
approach.
You
know
it
is
correct.
At
least.
C
Absolutely
and
we're
kind
of
as
time
goes
on
we're
kind
of
seeing
you
know
red
hat's
whole
value
proposition
of
we
swear
open
source.
Is
you
know
it's
the
better
way
to
do
business
right?
It's
eclipsed
proprietary
software
in
terms
of
velocity,
even
with
the
difficulties
in
communication
and
maintainership
and
all
of
the
you
know,
issues
that
are
endemic
to
an
open
source
community.
At
the
end
of
the
day,
you
still
have
the
source
code,
and
so,
at
the
end
of
the
day,
you
can
still
get
what
you
need
to
do
done
and
you're,
not.
B
A
B
A
Yeah,
and
so
it's
like
you
can't
add
a
child
to
something
anymore,
you
you
have
to
add,
like
a
you,
have
to
put
stuff
in
a
container
basically,
and
so
I'm
trying
to
figure
out
how
to
construct
a
container
that
holds
the
physics
object
and
the
thing,
but
to
do
it
in
a
way
that
works
with
it's
like
a
major
overhaul,
sadly,
to
change,
to
have
a
container
of
physics
groups
and
not
the
physics
groups,
so.
C
I'm
just
like
believe
it
or
not.
Yesterday
when
I
was
teaching
programming
to
a
friend,
I
was
actually
going
over
like
what
is
the
scene
graph,
and
you
know.
Why
would
you
want
to
build
that?
And
why
do
you
have
different
nodes?
And
why
do
you
have
a
node
with
a
transformation?
That's
just
2d
for
the
screen
for
your
hood
versus
a
node,
that's
the
3d.
C
C
C
Slides
and
slides
of
equations,
it
takes
me
like
10
minutes
to
look
at
each
one
and
go
right.
That's
what's
happening,
yeah
and
like
granted.
If
I
am
working
in
this
stuff
every
single
day
like
when
I
was
writing
a
renderer,
you
know
like
seven
eight
years
ago,
it
was
way
easier
like
I
would
look
at
it
and
be
like.
Oh,
I
know
what
this
equation's
doing.
I
know
what
it's
saying.
That's
super
easy,
but
it's
man,
it's
not
like
riding
a
bike.
C
So
yeah
they
kind
of
come
around
to
what
you
were
talking
about
with
like
text
and
rendering
systems
and
stuff
like.
I
was
looking
into
what
is
out
there
like
what's
standard
in
the
industry
right
now,
because
scale
forms
deprecated
like
using
flash
for
any
sort
of
ui
drawing
like
you
would
have
seen.
You
know
back
in
the
day
in
crisis
or
something
like
that
or
99
of
all
the
other
games.
C
C
Yeah,
so
it
turns
out
there
actually
is
a
company
out
there.
That
is
solving
the
problem.
Besides
me,
epic,
shout
out
to
my
tiny
one-man
project,
for
you
know,
writing
game
guise
or
whatever,
but
yeah.
There's,
there's
really
not
too
many
other
people
in
that
space
that
are
kind
of
doing
those
sorts
of
things.
So.
C
So
the
open
source
project
that
I
have
is
just
literally
like
an
example.
Project
of
hey
grab
these
like
seven
things
and
stick
them
together
and
it
works,
and
all
it
is,
is
basically
a
renderer
for
webkit
that
renders
to
the
gpu
right.
It's
the
same
thing
that
ea
uses
internally,
except
I
think
they
do
all
of
their
rendering
on
the
cpu
and
that's
expensive.
So
translating
those
most
as
many
calls
as
possible
to
the
gpu
is
better
and
in
fact,
mozilla
has
an
experimental,
firefox
renderer.
C
E
C
A
A
D
D
D
A
You
know,
I
honestly
don't
even
know
if
we
need
physics
groups
because
we're
not
using
oh,
but
we
may
need
them
for
angles
and
stuff
like
for
set
rotation
and
synthetic
anyway.
So
player
group
is
a
physics
group
create
okay,
so
we're
going
to
have
a
physics
group
and
then
we're
going
to
create
a
sprite
in
it.
So
we
have
his.
D
A
A
D
D
A
A
B
Yeah,
because
in
some
of
the
other
sections
where
the
text
is
used,
the
font
is
not
specified.
A
So,
basically,
we're
we're
using
a
physics
group
and
we're
creating
a
air
quotes
a
sprite
in
the
physics
group,
and
then
we
manipulate
the
b,
which
gives
you
a
body
basically
right.
So
we
create
the
physics
group
body
thing
and
we
put
it
into
an
array
of
all
the
player
physics
groups.
Then
we
set
the
rotation
on
the
body.
Then
we
set
the
angle
on
the
body,
hey
that
that's
great
right.
A
Physics,
arcade
group:
it's
way
to
collect
objects,
but
if
we
look
at
container
a
container
says
it
can
contain
other
objects,
so
I
don't
it'll
be
removed
from
the
display
list
and
added
to
the
container's
own
internal
list.
That's
fine
position
of
the
game.
Object
becomes
relative
to
the
position
of
the
container.
A
That's
fine,
so
I
don't
understand
why,
when
we
had
the
physics
group,
why
we
couldn't
add
a
physics
group
to
a
container.
D
C
Yeah-
and
I
mean
it's
a
hud
item
right,
so
that's
not
unheard
of
in
game
development
where
you
have
to
you
know,
translate
a
point
in
3d
space
or
in
this
case
right.
It's
2d
space
from
one
world
view
to
another.
That's
a
simple
matrix
transformation
right!
It's
just
down
to
the
you
know
the
library
you're,
using
how
simple
that
makes
it.
A
A
No
player
uid,
which
is
text,
oh
god,
here
we
go
oh,
but
I
need
a
player
at
that
point.
Damn
it
which
means
I
need
the
server.
Oh
man,
this
just
gets
more
and
more
complicated.
All
the
time
see,
we
really
need
a
debug
mode
where
we
don't
need
the
server
to
have
a
player.
You
know
what
I
mean:
yep
yeah,
all
right
I'll.
Try
to
refresh
this
again.
A
A
D
A
A
D
A
The
position
I
just
set
the
position
set
x
and
set
y
okay.
A
A
C
A
It's
nothing
like
the
pressure
of
doing
it
live
by
the
way.
If
anybody
is
paying
attention
to
the
chat,
it's
not
me.
It's
just
rowdy
paying
attention
to
the
chat.
D
E
A
A
C
D
A
You
so
we
want
javascript
string
length.
C
A
Yeah
yeah,
so
this
is
gonna,
be
where's
the
text
how
to
write
this
add
text,
player
uid,
so
we're
gonna
do
const
short
short,
oh
boy,
short
player,
uuid
equals
player,
uuid
slice.
C
Yeah,
okay,
one
thing
to
note:
substring
is
kind
of
terrible
support,
wise,
but
latest
chrome.
It
will
always
be
the
fastest.
I
don't
think
we
should
use
it
right
now,
because
it's
still,
I
don't
think
best
practice,
but
five
years
from
now,
substring
will
be
better
and
more.
B
E
A
A
Have
text?
Okay?
So
I'm
gonna?
Oh,
that's
fine!
I
don't
mind
stopping
share
because
we
need
to
end
the
stream
I'm
going
to
push
this
as
a
branch
as
a
like
kind
of
a
work
in
progress,
and
so
we
should
also
add,
like
the
velocity
and
some
of
the
other
information.
B
Yeah-
and
I
think
I
just
found
that
I
am
gui-
has
a
javascript
implementation-
am
gui
is
like
a
really
awesome
native
c
library,
like
a
really
immediate
mode,
really
easy
to
use
for
like
building
quick
and
dirty
guise
for
doing
debugging
stuff.
E
B
So
be
really
cool
to
connect
this
to
our
configuration.
So
then
we
could
have
our
values
listed
and
then
you
could
go
in
and
like
grab
a
slider
and
like
modify
it
on
the
fly
right.
So
when
you're
trying
to
like
test,
does
this
feel
good?
Does
it
not
feel
good,
like
that'll,
be
a
really
great
way
to
do
it
wouldn't
even
have
to
restart
the
server
to
do
the
settings
anything
of
that
nature
right?
We
just
do
it
all
like
right
there
on
the
screen.
B
We
get
like
a
little
input
mechanism
where
we
tap
a
key
and
brings
up
our
little
debug
menu,
and
then
we
got
our
little
sliders
and
our
input
values
right
and
then
we
can,
you
know
more
quickly,
tweak
things
and
then,
like
you
said,
once
you
can
see
them
on
the
ship,
you
can
tweak
them
with
a
little
debug
window
and
then
obviously,
like
you
can
do
that
whole
round
trip
of.
Does
this
feel
good?
Does
it
not
feel
good
to
play
well
a
whole
lot
quicker.
A
C
Surprisingly,
come
on,
you
gotta
have
more.
A
That's
cool
all
right!
Well,
thanks
for
joining
everybody
who
who
suffered
through
this
whole
thing,
this
was
a
fun
one,
so
we
will
catch
you
next
time
next
month.
Cheers
bye,
folks
have
a
great
news
time.