00:00:13.440
um so drag Ruby game tool kit Lessons
00:00:16.560
Learned um the engine is currently free
00:00:19.800
throughout the conference so Dragon
00:00:22.480
ruby. doio you can grab your uh license
00:00:26.160
there and um quick addendum to my
00:00:29.439
abstract between the time I wrote it and
00:00:33.160
today uh we have two more
00:00:36.760
monsters um that's princess donut she
00:00:39.360
eats an hour every day like every hour
00:00:41.879
she'll eat something and then Freddy
00:00:43.719
mukal so uh tips and donations are
00:00:46.520
welcome because she eats a
00:00:50.399
lot um but yeah so let's let's briefly
00:00:54.840
let's talk about uh about the game
00:00:56.760
engine it is uh one of the top rated
00:00:59.559
game on itch.io and currently I think
00:01:02.960
it's the most popular tool on itch.io
00:01:06.159
and top sellers so a pretty good uh
00:01:09.360
pretty good representation there with
00:01:11.520
respect to Ruby um the engine's been in
00:01:13.680
development for about six years now um
00:01:16.840
we we've got 400 plus games on it iio so
00:01:19.560
the community our Discord Community is
00:01:23.119
pretty phenomenal and uh they'll hold
00:01:25.240
game jams and and uh people just started
00:01:28.240
to build games with it um this also
00:01:30.680
includes a my commercial titles I've got
00:01:33.119
commercial titles on iOS Android
00:01:35.439
Nintendo switch steam recently released
00:01:38.920
uh released my title to steam so fully
00:01:42.200
crossplatform game engine from that
00:01:44.520
perspective um performance always comes
00:01:46.960
up with Ruby so quick slide on that 5K
00:01:50.320
many to many collisions and dragon Ruby
00:01:51.960
we get 60 frames per second you need it
00:01:54.000
gets three frames per second uh
00:01:56.399
rendering 20,000 moving Sprites just uh
00:01:59.159
to show off render limits 60 FPS un need
00:02:02.280
to gets almost 10 uh binary size Dragon
00:02:06.159
Ruby is at 6.8 for a universal binary un
00:02:08.800
need comes in at 60 for
00:02:11.520
x86 so those objective F facets of of
00:02:15.760
the engine are nice but for me it's I
00:02:19.560
don't want to be miserable building
00:02:21.000
video games right that's and and that's
00:02:24.440
the Lynch pin of of the rationale with
00:02:26.680
respect to using Ruby and for me Ruby
00:02:30.160
beg's Innovation right and I think it's
00:02:33.200
intrinsic to the language itself and um
00:02:36.840
with respect to that I'm already like
00:02:38.720
winded I started I practiced this
00:02:40.319
presentation last night I'm like why am
00:02:42.040
I so
00:02:43.519
winded it's like Colorado I swear why do
00:02:47.120
you have to be oh God so it's the
00:02:51.879
altitude this really serious I'm and I'm
00:02:54.280
on this Podium it's
00:02:56.760
terrible
00:02:58.280
um so um so Ruby beets Innovation and um
00:03:02.760
these aren't actually slides this is
00:03:04.879
actually the game
00:03:06.000
engine and
00:03:08.000
um I didn't have a clicker so I decided
00:03:10.760
to use a PlayStation 4 controller to
00:03:12.720
control my
00:03:14.519
slides but um this is one of our Tech
00:03:19.239
demos within the within the engine
00:03:22.319
itself it was pretty interesting
00:03:24.280
creating PowerPoint slides in a in a
00:03:27.120
game engine um we actually have a
00:03:30.400
built-in
00:03:31.319
reppel so I can go in and set my
00:03:35.840
scene back to
00:03:39.120
zero and that takes us back to the first
00:03:43.280
slide so let's go back to our
00:03:46.000
game um and uh this environment is
00:03:49.000
actually hot
00:03:50.319
loaded so I can go in and let's change
00:03:53.640
the boat acceleration to 50 or the max
00:03:56.799
speed to 50 and the acceleration
00:04:01.400
to 0.5 let's see how that affects the
00:04:12.120
game yeah I think that's
00:04:14.480
working um but this is what I mean by
00:04:18.519
Ruby B get
00:04:20.120
Innovation
00:04:24.880
right okay back to slides I think um so
00:04:30.639
with respect to lessons learn and the
00:04:32.120
context behind them it's it's one of the
00:04:35.280
facets of of Ruby itself like you start
00:04:37.280
using language and it feels magical like
00:04:40.280
it's hard you feel that magic in the
00:04:42.199
language and um one interesting facet
00:04:45.080
with doing Ruby for game development in
00:04:47.039
the Discord Community was that we got an
00:04:49.360
influx of new people using the language
00:04:52.240
they've never used Ruby some of them
00:04:53.680
never programmed before and it's it
00:04:56.680
reminded me what it felt like to f l
00:04:58.680
magic for the first time because I get
00:05:00.280
to see other people feel that magic and
00:05:03.320
um with respect to the Lessons Learned I
00:05:06.919
I was reminded what it felt like to be a
00:05:09.560
developer from you know from the very
00:05:12.080
beginning and not knowing anything and
00:05:14.440
that's something that I obviously after
00:05:16.280
you do it for 20 years now gee 25 oh man
00:05:20.080
that's also probably why I'm winded
00:05:21.360
right now um but you do it so long and
00:05:24.199
you forget what it means to to be a
00:05:26.160
beginner and so a lot of these lessons
00:05:27.800
learns are contextually around
00:05:30.720
experience okay so one of the terms that
00:05:34.400
uh that I found really useful is called
00:05:37.120
a progressive disclosure of
00:05:40.160
complexity uh is that font size
00:05:43.000
good mostly legible all right so this is
00:05:45.840
a Hello World Dragon Ruby
00:05:49.039
application and um you have a tick
00:05:51.039
function and if I want to render a blue
00:05:53.360
square on the screen you have XY width
00:05:56.080
and height a PNG and then you shovel
00:05:59.280
that information into an array and you
00:06:01.960
get a you get a blue square in the in
00:06:04.520
the corner of the
00:06:05.800
screen and the funny thing is that this
00:06:08.520
has tripped people up this this very
00:06:10.880
first slide has made people go what what
00:06:13.720
is what is going on here you have to
00:06:15.520
learn what a method is the or equal
00:06:17.599
operator has tripped tripped up C dos me
00:06:21.000
being one of them I used to I did C for
00:06:23.080
13 years before coming to Ruby and I
00:06:24.479
said what what is that thing um uh array
00:06:28.360
literals that is not too terrible you
00:06:30.840
kind of really figure out that it's an
00:06:32.240
array and um but this is this kind of
00:06:35.360
like your minimal understanding of a
00:06:37.000
syntax and language that you need to
00:06:38.759
have uh we've got positional the
00:06:42.080
positional arguments aren't great so the
00:06:44.400
question is like how do we transition
00:06:45.800
into something more interesting okay so
00:06:49.400
the next step of this disclosure
00:06:51.599
Progressive disclosure of complexity is
00:06:53.759
we introduce the concept of a has curly
00:06:56.160
brace new
00:06:57.520
token uh the symbols for sorry the
00:07:01.319
symbols for the keys aren't too terrible
00:07:03.639
because it's kind of Representative of
00:07:05.520
of of Jason and jav and and JavaScript
00:07:08.720
so not too much trip up around that the
00:07:12.960
the challenge comes when you uh when you
00:07:15.400
want to update that information so here
00:07:17.919
I'm adding I've got the concept of an
00:07:19.960
angle that will cause the the Sprite to
00:07:23.160
rotate so this function is is called 60
00:07:26.560
times a second so every time you've got
00:07:28.560
the reentrancy in there
00:07:30.080
you're going to see the sprad rotating
00:07:33.400
and I don't know if you'll remember but
00:07:35.560
the first time you encountered your
00:07:37.000
symbol when you don't have a language
00:07:38.280
that doesn't have some you're like what
00:07:39.680
is
00:07:40.800
a and it's so amazing but it's like how
00:07:44.319
do we explain that to it to people and
00:07:47.280
uh so this this is a challenge that you
00:07:51.919
I became cognizant of when it with
00:07:54.080
respect to learning a new language and
00:07:57.280
and trying to be productive in it
00:08:00.080
okay well how do we where do we take it
00:08:02.879
from there what if I want to have two
00:08:05.120
squares okay we create a function now
00:08:07.639
we've got these Splat ARS where the heck
00:08:09.560
did that come from how do we explain
00:08:11.919
that
00:08:13.919
um it's it's only one it's only one
00:08:16.560
Arrow but it's it's a it's pretty you
00:08:19.000
know you can see the distance of the
00:08:21.159
arrow it's a little bit
00:08:24.080
longer and then and then once you get to
00:08:27.000
multiple arguments what is the next step
00:08:29.039
is it it's a class it's a class isn't
00:08:35.320
it new
00:08:37.200
syntax Capital case class macro
00:08:41.080
initialized correl correlation to new
00:08:43.360
look how long that arrow is it's
00:08:45.720
just um Ivars
00:08:49.000
how how do we how do we fix this how do
00:08:51.640
we fix this this big jump um so one of
00:08:55.600
the things that Dragon Ruby does and is
00:08:58.640
introduce this idea of like maybe we can
00:09:00.240
use a module in between so you pull in
00:09:04.680
Dragon R is actually based off of 3.0
00:09:07.399
syntax so we don't have to have the
00:09:08.519
Splat arcs to to assign to um the option
00:09:12.399
parameters or the name parameters which
00:09:13.880
is nice another caveat that we Chang is
00:09:16.480
that in Dragon Ru be um hash responsive
00:09:19.440
method missing so the idea of you can
00:09:22.920
access a key property using using it
00:09:26.279
quacks like an attribute accessor so you
00:09:28.480
can use that in instead of introducing
00:09:30.160
consecutive symol trying to defer that a
00:09:32.200
little bit further and this has helped
00:09:35.399
and the the idea of each one of the
00:09:38.560
aspects of syntax within Ruby is that
00:09:41.000
Progressive disclosure of complexity and
00:09:43.399
then retaining that entire spectrum is
00:09:46.600
what I I like to call continuity design
00:09:49.800
so it's so easy to say you know all
00:09:52.399
those arrays hashes all those things at
00:09:54.040
the beginning we're going to just throw
00:09:55.040
it all the way and just say this is how
00:09:57.720
you're going to do a Hello World
00:09:59.839
but it it's not great it's not great if
00:10:03.160
you do that and U as a you know as an
00:10:06.120
experienced Ruby Dev it feels obvious to
00:10:09.320
to maybe start at this point but then
00:10:11.720
you leave out all the newcomers and
00:10:13.600
that's one thing that I that I learned
00:10:16.320
one frustrating aspect of of the module
00:10:18.480
based approach is that self keyword I
00:10:20.800
tried many different ways you know you
00:10:22.920
can do the class scope here but now you
00:10:25.440
have another indentation
00:10:27.320
level you can repeat the module name so
00:10:29.920
you can do something like this you do
00:10:32.000
square equals module. new and then you
00:10:33.880
flatten out the structure
00:10:35.680
completely I mean what options do we
00:10:38.279
have there and uh so I decided to stick
00:10:41.920
with the uh the self- construct and it
00:10:45.480
it it has eased the transition from from
00:10:48.680
uh dysfunctions operating on hashes to
00:10:51.399
modules to
00:10:52.600
classes and um there's a facet of of
00:10:56.639
other program languages that have dealt
00:10:58.120
with the same problem C++ being one of
00:11:00.440
them so there's concept of a nominal C++
00:11:03.000
for orthodox C++ and what they say is
00:11:04.760
that we're gonna throw away all the new
00:11:06.120
stuff we're gonna use c as our
00:11:09.200
Baseline small subset of C++ but
00:11:12.320
everything else we're not going to touch
00:11:13.720
and never going to use it ever and I
00:11:16.279
don't know if that's the best approach
00:11:18.600
to to adopting language and I thought
00:11:21.720
about it I was like well what does it
00:11:22.760
look like in Ruby so nominal Ruby
00:11:26.000
parentheses required everywhere you do a
00:11:28.120
put statement as parentheses
00:11:30.240
method with no parameters you add
00:11:31.639
parentheses to it no symbols use strings
00:11:34.720
no trailing of statements because that's
00:11:36.200
confusing if is on the wrong side right
00:11:39.000
uh don't use implicit blocks uh use for
00:11:41.000
loops and W Loops only no no means uh no
00:11:44.399
land land Expressions one liners this or
00:11:47.160
equal and equal safe operator don't use
00:11:49.959
those um the the the punctuation on
00:11:53.519
methan names now that's gone too uh
00:11:55.720
class class macros use get get set
00:11:58.200
methods none of the none of this class
00:11:59.720
my Christ um I think I've I think I've
00:12:02.560
described python here at this
00:12:05.560
point um and and that's the thing it's
00:12:09.639
like if if you told me to do that this
00:12:11.959
is this is what exactly would happen
00:12:15.519
right the coordination of this was
00:12:17.720
completely by
00:12:19.320
accident that was we can watch that
00:12:21.760
again
00:12:29.880
yeah that's
00:12:32.279
good and um and so I I wanted to figure
00:12:37.000
out what we can put as a why why do we
00:12:40.320
feel that way and I think for us uh
00:12:42.600
skill skill expression is a is an
00:12:44.880
important pass fac of the language so
00:12:47.320
this is Yas yasu from League of Legends
00:12:49.560
for those that have played the game I'm
00:12:50.880
sorry try to quit maybe you know join
00:12:53.959
like a you know addicts group um I'll be
00:12:58.160
there right with you but uh the
00:13:00.600
difficulty scale for Theo is really high
00:13:03.560
and here's kind of like a graph of of
00:13:06.440
the number of games played based on win
00:13:08.920
ratio and it's a little bit tough tough
00:13:11.480
for yes so but once once we get to
00:13:13.880
enough level of experiences they start
00:13:16.160
surpassing uh these other these other
00:13:18.240
characters that are flatlining this is
00:13:20.399
the facet of skill skill expression that
00:13:22.440
I think is putting a name to this
00:13:25.240
feeling that I that I that I have with
00:13:26.959
respect to the language okay
00:13:29.680
so Zen of python says there should be
00:13:32.000
only one and preferably only one way uh
00:13:35.639
one obvious way to do it there should be
00:13:37.800
one and preferably only one obvious way
00:13:39.720
to do it although that way may not be
00:13:42.120
obvious at first unless you're Dutch
00:13:45.079
and that always that always well first
00:13:48.839
it gets rid of that Progressive
00:13:49.959
disclosure of complexity and that
00:13:51.880
continuity of design and saying like
00:13:53.839
this is the one way we should do
00:13:55.199
everything and uh that statement just
00:13:58.360
really really went against my my mental
00:14:01.759
facets of my of uh what I feel is
00:14:04.079
valuable for the language so as an
00:14:05.880
example here's unity and this is the
00:14:07.639
obvious way to render a Sprite uh you
00:14:11.600
you have a prefab you inherit from mono
00:14:13.480
behavior um C is a statically typed
00:14:16.519
language very good thing so I'm going to
00:14:18.880
design Define something called object of
00:14:21.160
type Sprite and uh the compiler is not
00:14:23.839
going to catch unfortunately this this
00:14:25.800
compiler error and then the
00:14:28.079
instantiation of the this Sprite is you
00:14:30.199
pass in the uh Square prefab and of
00:14:33.920
course this parameter is object also a
00:14:36.680
vector 3 and then a quan
00:14:39.480
identity and uh this is exactly I me
00:14:42.920
it's obvious right imagine being a
00:14:44.839
beginner and uh and
00:14:46.959
seeing inheritance um type safety with
00:14:51.480
object uh Vector 3 and quer identity and
00:14:55.199
I don't know if that's that's something
00:14:57.839
that's I I still don't know what a quter
00:15:00.360
that identity is um so I don't I don't
00:15:03.440
know if this is IDE do and so just
00:15:07.199
thinking about the Zen of Ruby this idea
00:15:09.720
of progressive disclosure of complexity
00:15:11.279
continuity design skill impression skill
00:15:13.639
expression um putting terms to that and
00:15:16.320
then reframing conversations around the
00:15:18.720
language around these terms has has been
00:15:20.680
helpful and one interesting thing with
00:15:23.120
the respect to game development is that
00:15:24.959
they value these things it's an artistic
00:15:27.199
medium they don't want to be a cog and
00:15:29.759
wheel that can be replaced right swapped
00:15:32.319
out another person uh put back in So
00:15:35.000
this idea of skill skill expression and
00:15:38.680
your your skill increasing and not being
00:15:41.000
limited by the language that you use is
00:15:43.279
something that has resonated with in the
00:15:45.759
context of the game
00:15:47.240
community so that's I wanted to do we
00:15:50.839
have time for questions
00:15:52.199
hopefully lots of questions good um so
00:15:56.160
that's the context of the of the slides
00:15:58.079
and the talk and then I wanted to open
00:15:59.800
it up and make sure we have enough time
00:16:01.759
for for all the
00:16:03.480
questions so questions thank
00:16:10.920
you so good 13 minutes for questions I
00:16:14.959
think so 10 minutes about 10
00:16:17.880
minutes questions we can we can actually
00:16:20.040
look at the slide code if you want yeah
00:16:21.440
I'd love to see the SL we love
00:16:23.880
PowerPoint
00:16:25.759
code right
00:16:29.759
trying to make
00:16:31.360
this
00:16:36.279
bigger there we
00:16:40.079
go all right so um in a I kind of pushed
00:16:45.240
all the uh all the like control and
00:16:47.199
nuances into into a separate f file and
00:16:49.480
we can just look at what the slide code
00:16:51.319
looks like but the idea is that every
00:16:53.160
function um in my my slide returns an
00:16:55.839
array of Primitives that need to be
00:16:57.440
rendered okay
00:16:59.639
so um there's a there's a layout engine
00:17:02.199
in uh dragon Ruby and we can uh we can
00:17:04.520
actually take a look at uh what that
00:17:07.120
looks
00:17:09.640
like so
00:17:12.799
layout
00:17:14.760
dot debug
00:17:18.280
Primitives and
00:17:20.360
then add our
00:17:24.839
comma save the file
00:17:29.720
sorry I shut down my game or
00:17:35.200
slides all right and so this is kind of
00:17:38.039
the layout engine right
00:17:39.720
here and um let me invert the colors on
00:17:48.160
it
00:17:50.480
invert
00:17:54.280
colors true
00:18:00.320
and
00:18:04.120
save so you've got a 12 x 24 um I guess
00:18:09.960
cell layout so 24 ac across 12 up and
00:18:13.559
down and then based on that you can
00:18:15.480
decide where you want specific things to
00:18:17.200
be laid out on your environment right so
00:18:22.039
every function returns an array of
00:18:23.760
Primitives I use that uh layout grid to
00:18:26.440
kind of uh layout all my uh all my
00:18:29.360
specific p uh pieces of uh of the of the
00:18:33.240
scene uh for pets I add a PNG so I saved
00:18:38.559
all those to a PNG and then threw it on
00:18:41.400
threw it on the screen that takes us to
00:18:44.600
our this slide right here right um as
00:18:48.760
far as defining the alpha I've got a top
00:18:51.760
level uh top level variable on my on my
00:18:54.880
state itself that gives me the the frame
00:18:57.159
that the scene was changed at you divide
00:18:59.440
that by 60 it gets you the elapse time
00:19:01.320
and then I interpolate across this
00:19:03.240
that's what that's how you get the the
00:19:04.320
fade animation from
00:19:06.080
there like so PC um with with respect to
00:19:11.280
the rest of
00:19:12.400
slides this this common pattern ended up
00:19:14.880
showing up where I've got this title the
00:19:18.039
current index that I'm on the array of
00:19:19.600
images that I want to show maybe some
00:19:21.600
subtitles and things like that so you
00:19:24.360
see like uh when I go in between we've
00:19:26.600
got the different layouts and and and uh
00:19:29.400
things fading in and uh iterating to the
00:19:32.919
next slide so that's kind of what I did
00:19:35.000
here the same structure is used except
00:19:37.400
for the current index changes for each
00:19:41.960
one right and then some of these have
00:19:44.960
the have additional information like uh
00:19:47.280
let's see where was that where was that
00:19:49.600
I have one called
00:19:52.400
Revolt so that
00:19:55.039
was that was H this
00:19:57.480
slide right
00:20:00.480
and so the idea there is that we've got
00:20:02.240
some functions in Dragon Ruby that
00:20:03.440
basically says uh give me this is kind
00:20:06.400
of like a p page frame by frame
00:20:09.000
animation Give me the give me a point in
00:20:11.559
time the number of frames how long to
00:20:13.200
hold them and I'll give you back an
00:20:14.640
index for uh for which animation to show
00:20:18.440
so that's that's basically it the first
00:20:21.640
PNG has a or the first animation has 144
00:20:24.360
PL 44 frames at 4 frames per second four
00:20:29.000
frames per tick and then the other one's
00:20:31.520
at 70 frames at 8 frames per
00:20:34.159
tick um and then the meat of the code is
00:20:37.640
is this a very large function here sorry
00:20:40.559
for
00:20:41.480
that I I did this at the last second I
00:20:43.880
didn't run the gems just look
00:20:46.960
away um so we we've got the we've got
00:20:50.240
the as far as like the final positions
00:20:52.200
for each one of the uh each one of the
00:20:54.320
thumbnail images and uh with respect to
00:20:58.919
uh with respect to each one of the um uh
00:21:02.200
the rectangles and how they move across
00:21:03.720
the screen the moving rectangle is the
00:21:06.039
is the previous index and it and it's
00:21:08.320
got a linear interpolation to to get to
00:21:11.120
the final position where it's supposed
00:21:12.919
to be at our title free prefab is two
00:21:16.240
labels offset by a little bit so we have
00:21:18.120
a drop shadow so uh so there there's
00:21:21.559
like the white label on top and then a
00:21:23.000
little bit of um a little bit of a black
00:21:26.000
font below that subtitle prefab is uh
00:21:28.799
works the same way and then your your
00:21:31.400
main slide it's either if it's the main
00:21:33.400
slide then it goes in the center if it's
00:21:36.559
if it's a a previous slide then we're
00:21:38.919
going to and and I haven't disabled
00:21:41.080
movement then it's going to use the
00:21:42.640
movement animation if it's less than
00:21:44.880
then use the th thumbnail and if it's
00:21:46.600
greater than then don't show it and so
00:21:49.120
there's your slide prefabs
00:21:51.240
and more uh more layout stuff with
00:21:54.120
respect to labels and then all that is
00:21:55.919
shown so that is what gets you this this
00:21:59.320
layout right here so all that codes in
00:22:01.840
there and then every all the other stuff
00:22:03.080
is data structures can we stop talking
00:22:05.480
about
00:22:07.880
PowerPoint of your users are not Ruby
00:22:11.080
developers what percentage the question
00:22:12.840
was what percentage of my users are not
00:22:14.200
Ruby
00:22:15.400
developers I I can only speak uh respect
00:22:18.799
to the Discord Community but it's it's
00:22:21.640
it's pretty high surprisingly um so at
00:22:25.200
least a 50/50
00:22:26.640
split Ju Just for my gut we've got quite
00:22:29.400
a few people that have used Ruby and
00:22:30.760
said oh I've been using Ruby for for a
00:22:33.760
while now and and I want to get into
00:22:36.320
game development and that's that's a
00:22:39.520
portion of our population but there are
00:22:41.240
people that say this is the first time
00:22:42.480
I've ever used the language and and it's
00:22:45.120
it's a nice split which is nice
00:22:48.960
yes yep so the question was uh is that
00:22:52.799
our our binary size is extremely small
00:22:55.559
and then I'm sure when you do Brew stall
00:22:57.640
Ruby or you know pseudo appet install
00:22:59.720
Ruby or download Ruby from the website
00:23:04.000
you're dealing with a very large 2
00:23:05.600
gigabyte B binary and uh with respect to
00:23:08.200
Dragon Ruby our Baseline is actually
00:23:09.679
based off of M Ruby and so we're we're
00:23:12.039
using the the embedded runtime and um uh
00:23:15.720
my rubycon presentation from I think
00:23:18.000
2022 we go into a lot of details with
00:23:20.559
with respect to like how the runtime
00:23:21.919
Works how what extensions and like
00:23:24.480
enhancements we made to the language but
00:23:26.679
uh that was one of the facets of making
00:23:28.640
a work crossplatform was that we needed
00:23:31.039
a zero dependency runtime and so M Ruby
00:23:33.400
became our make became our Target
00:23:35.760
runtime for
00:23:37.000
that question yes uh the question is is
00:23:40.039
there support for three render uh 3D
00:23:41.679
rendering right now we're only doing 2D
00:23:44.480
and so the couple of idea the primary
00:23:47.840
reason for that is that I don't I
00:23:49.360
haven't built a 3D game and um with
00:23:52.320
respect to experience and you know this
00:23:53.919
idea of like continuity D Progressive
00:23:56.520
disclosure I could only speculate on the
00:23:58.480
the obvious way to render a 3D model to
00:24:01.039
the screen and um it's a it's a
00:24:03.679
deficiency uh for my for my skill set um
00:24:07.760
we've we there have been multiple times
00:24:10.480
where we're like we could totally do 3D
00:24:12.640
and um we we do have the ability to
00:24:14.880
render triangles on the screen so you
00:24:17.159
could do you could do like array casting
00:24:19.880
and Ray tracing stuff uh with dragon
00:24:21.960
Ruby but we're we're sticking to 2D
00:24:23.960
games from the just from the domain
00:24:25.799
expertise perspective
00:24:28.720
questions yes yeah but then you have you
00:24:30.880
introduce extend so the question was
00:24:32.320
like if you want to get rid of self you
00:24:33.720
can you've got the self Dot and then the
00:24:35.360
function name so what's another way you
00:24:37.240
can get rid of it well you can you can
00:24:39.200
do an extend or you know and eventually
00:24:41.600
take that module and do an include in a
00:24:43.039
class but then you're introducing the
00:24:44.720
concept of an extend so and then it's
00:24:46.600
self- referencing which
00:24:49.000
is I don't
00:24:52.760
know uh yes yeah so the question was do
00:24:55.840
we have any substantial open source
00:24:57.480
games that someone pick apart uh let's
00:25:01.159
go to the Disco community so the game
00:25:04.159
engine actually releases
00:25:07.320
with
00:25:09.960
internet please uh the game engine
00:25:13.240
releases with 150 somat sample apps so
00:25:17.279
you've got a you get kind of like a a
00:25:20.799
progressive disclosure of complexity
00:25:22.399
even in the sample apps they're ordered
00:25:23.960
by easiest to most complex yes there we
00:25:27.440
go
00:25:28.919
so um inside of the Discord Community uh
00:25:31.600
we have I usually post uh Point people
00:25:35.679
to uh open it's an open source project
00:25:38.600
it's called Rog likee uh Rog likee
00:25:40.799
tutorial
00:25:41.919
2021 and that's a that's a pretty
00:25:44.919
full-fledged reference implementation
00:25:46.520
including testing uh multiple files and
00:25:49.720
the rendering aspects and a large uh
00:25:52.840
large swats of the system but um this
00:25:56.640
Rog life tutorial 2021 is is a is a
00:25:59.399
pretty a pretty good reference
00:26:02.600
implementation any other questions
00:26:05.039
that's a good question um so the
00:26:07.320
question was is there like a online or
00:26:10.240
anywhere a conversation happening with
00:26:12.360
respect to Nal Ruby or the the ideas
00:26:14.840
around maybe you know easing easing that
00:26:18.080
ramp up and there is an outside of our
00:26:20.080
Discord server so we we get new we get a
00:26:24.039
lot of newcomers and that's that's one
00:26:26.399
of the facets of being able to have
00:26:27.720
these these conversations but it's been
00:26:30.039
our it's been on our Discord server and
00:26:31.679
there have been situations where you
00:26:33.440
have people that come in experienc Ruby
00:26:35.640
deaths trying to help a a beginner and
00:26:38.039
they fire host them he like oh you can
00:26:39.840
do this thing where're you use an
00:26:41.080
implicit block and instead of using this
00:26:42.960
and it's it's it scares some people away
00:26:46.080
and um it's it's something I'm trying to
00:26:49.480
discover but but yeah it feels like it's
00:26:51.799
kind of like a rare rare occurrence in
00:26:53.679
in the Ruby language yeah and and I and
00:26:56.200
I agree I think it's important to help
00:26:57.640
help that ease process and uh I think a
00:27:00.039
facet of that is also within our domain
00:27:02.120
and our libraries themselves is once
00:27:04.600
we're in that exploratory phase and
00:27:06.200
trying to figure out what this APA and
00:27:08.240
function will look like with respect to
00:27:10.760
the continuity of design maybe it's okay
00:27:12.960
to leave that point on the spectrum of
00:27:15.760
solutions and and not just you know and
00:27:18.240
not just deleted out you look at a rails
00:27:20.520
project and you do rails new scaffold
00:27:22.520
it's you know all these files and I I
00:27:25.440
wish there was an environment that took
00:27:26.679
me from Sinatra with the continuity of
00:27:29.159
design with valid points on the Spectrum
00:27:31.440
all the way to rails and the fact that
00:27:33.480
we when rails was built and said ah we
00:27:35.480
don't need all this stuff it hurts it
00:27:38.640
really hurts a
00:27:40.120
lot okay I think uh we're at we're at
00:27:42.640
time