HomeVideos

The Reality of Making Indie Games | The Standup

Now Playing

The Reality of Making Indie Games | The Standup

Transcript

1137 segments

0:00

Welcome to the standup. Today is a

0:02

extremely special episode. We have Adam

0:04

Ununice. We have Nolan Eie, EIO, and of

0:08

course, we have the master vibe coder,

0:10

Tee. What up?

0:14

Yeah. Yeah.

0:16

Uh anyways, sorry.

0:17

>> You guys mentioned offline not part you

0:20

know before we recorded just null and

0:22

some of how like you got in introduced

0:24

to making games and part of that was

0:26

through Adam which is part of the fun of

0:28

like we wanted to have you both on at

0:30

the same time. So I thought maybe you

0:31

could talk about that a little bit and

0:32

just uh give a little bit of that

0:34

backstory and just uh so you know so the

0:36

listeners out there could hear that side

0:38

too. Uh yeah, like back story to like

0:41

how I started making games or like and

0:44

any complaints about Adam and how he

0:45

teaches a sprite. You can throw that in

0:47

there if you need.

0:47

>> Both of those.

0:48

>> Uh let's see. So I started making games

0:49

maybe like three three years ago, almost

0:51

exactly three years ago. Um and uh

0:55

originally like this was not really a

0:57

thing that I was planning to do for

0:58

particularly long. Um it was mostly a

1:00

way to get back to coding. I love games.

1:01

I played tons of games my whole life,

1:03

right? Used to write about games. um and

1:08

started making games like really small

1:10

games in like GDAU. I think like one bit

1:11

of advice that you see a ton on the

1:13

internet. I think it's really hard to

1:14

give good advice about about game

1:16

development. But one I think very

1:18

broadly applicable often repeated bit of

1:21

advice is just make a ton of games,

1:22

right? Like make you know don't like the

1:24

classic mistake is that somebody makes

1:26

an MMO that takes them four years and

1:28

nobody plays it and you know they learn

1:30

so much along the way. Um, so I was

1:32

making these tiny little games in GDAU

1:34

and found Adam stuff because I was try I

1:36

like made all this pixel art and it all

1:38

looks terrible and I was like so like

1:41

there's this weird thing when you're

1:42

you're bad at something where you don't

1:44

understand why like you don't even have

1:46

the the like faculties to understand why

1:49

it's bad. You're just kind of like

1:50

looking at it and you're like this is

1:52

this is terrible and I don't know the

1:54

first step towards fixing it. Um, and I

1:58

never got I never got good at at pixel

2:00

art. I ended up kind of moving away from

2:01

making more more typical games into the

2:04

weird stuff that I do now. Um, but one

2:07

thing that I remember really enjoying

2:08

about Adam's channel, uh, and sorry Adam

2:11

to to compliment you live, is I think a

2:15

lot of the stuff that you see on YouTube

2:16

about making games is super

2:18

edutainmenty, right? like the audience

2:20

of people that kind of want to imagine

2:22

themselves as game developers is much

2:24

larger than the set of people that

2:26

actually have the time to sink into

2:29

making a lot of games. And I think also

2:31

probably the audience of people that

2:32

wants to talk about games is larger than

2:34

the audience of people that actually

2:35

makes games and can talk about those in

2:37

a compelling way.

2:38

>> Um, and so I think early on I was

2:40

watching all this other content, right?

2:42

And I would watch this video and I'd be

2:44

feeling like I was learning a lot and

2:45

then I'd try to think about like what

2:46

did I actually learn from this? And the

2:48

answer is like nothing, right? like

2:49

nothing applicable to making stuff.

2:51

>> But when you watch people that are

2:52

actually doing the work and talking

2:54

about their decisions, I think you learn

2:55

a lot more there.

2:56

>> Um, so that is that is how I ended up

2:59

finding finding Adam's work and I made

3:02

slightly better pixel art. Learned

3:04

things like your pixels should be the

3:06

same size and to use a consistent color

3:08

palette and other dead simple things

3:10

that I think are in literally my first

3:11

blog on the site. Um, but uh yeah,

3:15

that's that's that's the background. And

3:16

I think none no one played any of the

3:18

games that I made in that era. Not

3:20

literally nobody, but like

3:22

>> like I got like a hundred players for my

3:24

second game and I was like, "Oh, this is

3:26

this is incredible."

3:27

>> Mhm.

3:28

>> Broadtown, what happened? I don't know.

3:30

Did you push on a Friday?

3:32

>> Never. How are we going to figure this

3:33

out? How are we going to figure this

3:35

out? Did

3:36

>> I hear Broadtown? Do you guys need the

3:38

wheel?

3:47

Nev config.

3:48

>> That makes sense.

3:49

>> I'm going to spend a couple hours

3:50

refactoring. I'll leave the plugins.

3:55

>> Don't guess where your issues are. You

3:57

can see exactly where they are happening

3:59

with Century. Get all the context you

4:01

need to debug any problem because code

4:03

breaks. So fix it faster with Sentry.

4:05

It's funny because that's also basically

4:07

the way that I found Adam was I was just

4:09

playing around with making some games.

4:11

Uh just like the concept of making a

4:13

game and then I found Adam's channel and

4:15

I also really liked the art and then me

4:17

and Prime somehow found ourselves in a

4:19

scenario where Cursor was like, "Yeah,

4:20

you guys can make a video game. Go ahead

4:23

do it in a water tower.

4:24

>> Um just put the game in the bag, bro."

4:28

And I was like, "Well, I don't know what

4:29

to do." And we were both like, "I don't

4:31

know. We should." And I was like, well,

4:32

the coolest person I know that makes art

4:34

for games and makes games is Adam. I

4:36

don't know him at all. I've only watched

4:37

his YouTube videos. And he happened to

4:39

be in the US. What? In the first time,

4:42

since when? Adam?

4:44

>> That That was a year ago today, by the

4:45

way. That was literally today. A year

4:47

ago.

4:47

>> No, one year.

4:49

>> Oh, yeah. Yeah. I was right in this

4:51

area. Oh, yeah.

4:51

>> Oh, that's crazy.

4:54

>> That's cool.

4:54

>> Yeah. I was in I was in San Francisco

4:56

for GDC. Um, and you just you guys just

5:00

reached out and I was like, "Oh, I'm

5:02

going to be around." And I hadn't Yeah.

5:03

I hadn't been in the US since 2011.

5:06

Yeah.

5:08

>> Yeah. And then it was like, "Okay, well,

5:10

do you want to fly down and make a game

5:11

in a water tower with us? We're doing a

5:13

24-hour stream." And

5:16

>> and uh and that's how the friendship

5:19

started, which was awesome. So, Ken

5:21

second to Adam being really good at

5:23

making YouTube videos. If you guys

5:24

aren't following him, you definitely

5:25

should. and he makes really good pixel

5:27

art. It's addictive to watch.

5:30

>> Yes. Very true. Very true. He's the

5:32

pixel king. Okay. So then Nolan, so you

5:34

were starting off, you found some stuff

5:35

there and then like how did you kind of

5:37

transition out of like making some more

5:39

like GDO based stuff into like making

5:43

crazier things?

5:45

>> Yeah. So uh do you all know what the

5:47

Rehearsse Center is? Feels like

5:49

something you might know about.

5:50

>> I don't think so.

5:51

>> No. Okay. This is going to sound like

5:53

almost like an ad. I swear it's not. Um,

5:56

so early like middle of that year, I

5:59

went to this place called the Recurse

6:00

Center, which is like a thing in

6:02

Brooklyn that's kind of like a writer's

6:03

retreat, but for programming.

6:04

>> Oh,

6:05

>> like you show up for like 6 or 12 weeks.

6:06

It's free. They like make money with

6:08

like placing people in jobs or

6:09

something. It doesn't really matter.

6:10

>> Uh, but the point is like you're in this

6:12

room with other people that think it

6:14

would be fun to program for 6 or 12

6:16

weeks on stuff that isn't for their job,

6:18

right?

6:19

>> And I'd known about it for a while. It's

6:21

like 20 minutes from me. Um, but I was

6:23

there and I started kind of

6:24

experimenting with like doing weirder

6:26

things. I remember the first thing that

6:27

I did uh that was stranger was um do you

6:31

know the open search spec?

6:33

>> No.

6:34

>> Um this is okay. So you know like in

6:35

Chrome if you type in like a website URL

6:38

and you hit tab.

6:39

>> Yeah. Yeah. Yeah.

6:39

>> And then it like lets you search that

6:41

website directly, right?

6:42

>> Yep.

6:43

>> Uh so like you need a spec for that.

6:44

Like the browser like how does the

6:46

browser know what endpoint to hit in

6:48

order to like search that website? Open

6:50

search is that spec. It's just an XML

6:51

document you throw uh you mention it

6:53

like the the head of your your index

6:55

file

6:56

>> and um yeah no I mean it's old right

6:58

there's also like 14 things called open

7:00

search but this is the open search spec

7:03

>> so I happen to know um or I kind of like

7:06

remembered that there's this extension

7:07

to the spec that lets you offer search

7:09

suggestions

7:10

>> uh so like you can offer an alternative

7:12

endpoint and you like hit that endpoint

7:14

and uh the endpoint returns back like

7:16

suggestions for what you might be

7:18

searching for which makes a lot of sense

7:19

right

7:19

>> did you make a dungeon dungeon crawler.

7:21

>> I didn't make a dungeon crawler. Um, but

7:23

I was like, you know what? Like all you

7:25

need for a game is like you're typing or

7:27

like you have some input mechanism and

7:29

some output mechanism and this works,

7:31

right? Like you type a character, it

7:32

hits this endpoint, the endpoint returns

7:34

suggestions. The suggestions are

7:35

automatically displayed in the browser.

7:37

Like you can make a game there. And so I

7:38

made Wordle

7:39

>> um which I called I called Wardle uh not

7:42

knowing that that is Josh Wardle who

7:43

created Wle's last name. Um,

7:47

and then like met him like a year later

7:49

and that that was funny. But um, so I

7:52

made that and I was like in this

7:53

environment where instead of just kind

7:55

of making it and shipping it off into

7:56

the void, there are all these like nerds

7:58

around who are like, "Wait, this is like

7:59

this is kind of funny. Uh, this is this

8:01

is compelling." Um, and someone posted

8:03

on Hacker News. It's the first time that

8:04

I got on HackerNews.

8:06

>> And I think like that is how I started

8:08

kind of narrowing in on like, oh, I like

8:10

like it's funny to make computers do

8:12

weird things. It's funny to make jokes.

8:14

Um, and so I started noticing like I

8:17

went back and I made some more

8:18

traditional games

8:20

>> um, while I was there and I remember the

8:21

last thing that I made it was like a a

8:23

tiny little uh, Vampire Survivors clone.

8:25

>> Oh, nice.

8:26

>> Um, like you know, people were like

8:27

doing all sorts of things like Right.

8:28

Cuz Vampire Survivors had just popped

8:29

off. Yeah.

8:30

>> And I was showing it at this gameplay

8:32

test and people were giving me feedback

8:33

and I could like feel myself cuz I had

8:35

made some more weird stuff by then. I

8:36

could feel myself like not like being

8:38

like I don't want your feedback. Not cuz

8:40

like it's not good feedback, but because

8:41

like I'm in I don't want to make games

8:42

like this and like you're giving me

8:44

advice on like a thing that like I wish

8:46

I hadn't made cuz like everyone around

8:48

me it was at this uh this the bar that

8:50

we were talking about earlier.

8:51

>> Yeah.

8:51

>> Um had all these like weird interesting

8:54

experimental things

8:56

>> and I'm just not like I'm much better at

8:58

that than I am at building like a

9:00

beautiful wellthoughtout you know kind

9:02

of within genre game. So, that's kind of

9:05

where I uh I think that that was the the

9:08

thing that really pushed me towards

9:09

getting weirder and weirder and weirder.

9:12

>> I do have to say I thought it was the

9:15

most programmer description of a game of

9:17

all time was well, you just have some

9:18

inputs and then you have outputs. So,

9:19

it's like that's a game. You know,

9:21

>> it is. So, this is I think about this a

9:23

lot with like the the stuff when I'm

9:26

making a game that is running in another

9:28

application. So, like that or like I

9:29

have like Flappy Bird running in Mac OS

9:31

Finder or whatever. Um that is how like

9:34

the terms that I'm thinking of you like

9:36

find like a surprising way that an

9:38

application gives you input and output

9:40

like for example in Macfinder I can

9:41

query to determine that you have clicked

9:43

on a file

9:44

>> um and like that is that is sufficient

9:46

input right and then output can be

9:48

renaming files

9:49

>> um this is a terrible way to think about

9:51

like real games that people want to play

9:53

but it's a great way to invent games

9:55

that you can write blog posts about that

9:57

people read

10:00

>> which hey if That's uh that's a whole

10:03

new genre of games, but it it does work

10:06

and they are funny, so it makes sense.

10:09

>> Yeah. I think I think if I made if

10:10

that's all I did, I would get a little

10:11

sick of it. But it's really fun

10:12

sometimes.

10:13

>> Yeah.

10:15

>> Is there like a do you ever have like a

10:17

like a a personal win condition for a

10:20

game? Like is it, oh, I need for the

10:23

player to feel this, or is it more like

10:25

a personal expression thing? Like how do

10:27

you when do you know when something's

10:29

finished?

10:30

>> Oo. Oh, that's a good question. Um, and

10:33

I would I would love to hear hear your

10:34

answer uh to to this as well. Um,

10:39

I think it depends a lot um for like the

10:44

bigger multiplayer experimental stuff

10:47

thing. I think it's kind of vibes like I

10:48

think a lot about like how are people

10:50

going to ruin this? And I want to be

10:52

really confident that it's hard for

10:53

people to ruin it, right? because that's

10:55

just like

10:56

>> you get kind of get one shot and if like

10:58

a bunch of people go to the website and

10:59

it's just like slurs and porn or

11:01

whatever, you know, depending on how

11:02

people want to ruin something, it's just

11:04

like not that's just not fun.

11:06

>> That's very typical internet, too.

11:07

>> Yeah.

11:07

>> And it's Yeah. And it just like it just

11:09

happens, right? Like this and this this

11:10

sucks, but um if you don't do something

11:12

about it is what people do for kind of

11:14

the smaller like

11:16

>> the way I think about this is that I

11:18

make games and then I also make things

11:19

that aren't really games. Like the the

11:22

Wordle thing, no one's going to play

11:23

that. that exists so that I can write

11:25

the blog about it, right? And teach

11:27

people something interesting in this

11:29

cart mechanism.

11:30

>> Um, and there

11:35

I think it's kind of when there are no

11:36

more problems left to solve. Like I get

11:38

to a point where I'm like this

11:39

technology is not meant to run again.

11:42

Like it's, you know, Mac OS I pushed Mac

11:44

OS Finder to four frames a second. I had

11:46

to add like double buffering to it. It

11:48

was a lot of work and like this is like

11:50

where we call it. um I can't make it any

11:52

any faster. And so that's normally what

11:56

I'll do. And sometimes I get to that

11:57

point and like the game just isn't

11:59

interesting enough and so I just don't I

12:00

don't post about it.

12:02

>> Do you have like a lot of like ideas

12:04

that you started that just didn't just

12:06

didn't go anywhere?

12:07

>> Uh not that many. Like I'd say like more

12:11

often than not I finish what I start.

12:13

But

12:13

>> that's great.

12:14

>> I think it's like close. You know, it's

12:15

probably like 6040 or something.

12:17

>> Wow. That's a much better ratio than

12:19

anybody I've ever met in my entire

12:21

lifetime.

12:24

>> I was gonna say though, Adam, you can't

12:25

get away from the reverse question

12:27

though because Nolan wanted to hear your

12:29

answer and I want to hear your answer

12:31

too. So,

12:31

>> yeah. I'm also I'm curious. I know like

12:33

you've both done like game jam game.

12:35

Like I remember you you placed really

12:36

well at a at a Ludum Dar a while ago and

12:38

then you also have these really long

12:40

running things.

12:42

Yeah, I mean I I am such a like a uh

12:48

boring case of a gamer because like I

12:50

literally just have that the exact story

12:54

everybody else has of like you know I

12:55

grew up and I had a Super Nintendo and I

12:57

was obsessed with that and then I got a

12:59

PlayStation and I was obsessed with that

13:00

and you know by the time I was maybe

13:03

like 11 or 12 I was like I want to make

13:06

games. This is what I want to do. So, I

13:09

think I just for the big game, it's

13:12

really just me trying to channel the

13:14

feelings that I got playing like Final

13:17

Fantasy 10 um into a project and wanting

13:20

other people to feel that. And so,

13:22

because it's such a conventional shaped

13:24

thing that I'm making, it's done when

13:27

it's finished, you know, when I can get

13:28

to the credits and you can, you know,

13:30

it's got 20 hours of content and side

13:32

content, blah blah blah. Um, for the

13:34

smaller games that I feel like comes a

13:37

lot more from

13:39

a more like I I studied design at

13:41

university, so the idea of like hacking

13:45

stuff together and prototyping and

13:46

wanting to explore a concept um that get

13:50

that itch gets scratched by the smaller

13:52

projects. And so yeah, I feel like they

13:56

are two very different modes. Uh, and

13:58

I've tried sort of in the middle as

13:59

well. I had like a couple of six-month

14:01

projects. Um, those can be fun too. I

14:04

think the the tough part is then like

14:06

when a project needs to become a product

14:09

and you have to like support it as a

14:11

piece of software or something like

14:13

that, it becomes there's like a

14:14

threshold there you have to cross over

14:16

uh when you release something and the

14:18

more time you spend on it, the more it

14:19

has to sort of justify the time you

14:21

spend. So yeah, I tend to stick to one

14:25

end of the spectrum at a time. Yeah.

14:28

>> Yeah. I mean, I think like game jams are

14:31

so nice for the like I'm just going to

14:33

express this one idea, right? And then

14:35

like maybe a lot of people find it

14:37

compelling and you do something else

14:37

with that, but like having the freedom

14:39

to do that without the like

14:40

>> I worked on this for six months and so I

14:44

feel like I should get something out of

14:46

it

14:47

>> type of thing. It's really Yeah.

14:49

>> Oh, speaking of just as a fun aside, our

14:52

buddy Cakes, we should link it prime in

14:54

the description of this video, just he's

14:56

a longtime Twitch streamer friend. He

14:58

just released his tower defense game.

15:00

He's working been working on it at

15:02

Twitch for like four years. We should

15:04

just give it a shout out. I I am giving

15:06

it a shout out right now. The link will

15:08

be in the description for other people.

15:10

This is not an ad. It is just he's a

15:13

friend of ours who raids us a lot on

15:14

Twitch and I want to make sure we're

15:16

shouting him out everywhere cuz he

15:17

finished a project odd stream after four

15:20

years. So, it's awesome. Uh so people

15:22

should go check that out. That just

15:23

reminded them.

15:24

>> Cupcakes.

15:24

>> Yeah, cupcakes.

15:26

>> Yeah. And yesterday I was uh I opened up

15:28

Steam to play uh a game that you may

15:30

have heard of, Slay the Spire 2. And

15:32

when I opened it up, me and my son are

15:34

doing a little co-run together. And when

15:35

I opened it up, it said it said, "Hey,

15:38

Tower Defense Mania or something like

15:39

that." And I was just like, "See more."

15:41

And it said, "Here's a bunch of games of

15:42

Tower Defense." And it was like

15:43

balloons. And then Tangy was number six.

15:46

>> Nice. That's sweet.

15:48

>> Yeah.

15:49

>> Yes.

15:50

>> Stoked. So anyways, that was just a

15:51

quick aside that I wanted to make sure

15:53

because I was thinking, "Oh, we have a

15:54

friends on who make games. We also have

15:56

to talk about our other friend who just

15:57

released a game. So, um, anyways, Adam,

16:00

the question I was going to ask you

16:02

though was from any of your like smaller

16:04

projects where you're working on like

16:05

Game Jam or something else, you take any

16:07

of those ideas, put them in Insignia,

16:09

like any good examples.

16:12

Uh, actually, there was one recently

16:15

that's not from a game jam at all. Uh,

16:17

we we had like an onstream game we used

16:19

to play uh called Well, we'd call it

16:22

just clinkers. It's like a there's a

16:24

food. It's like a candy in Australia

16:26

that is covered in chocolate and there's

16:28

only three there's like three kinds in a

16:31

packet but you don't know what you're

16:32

eating because until you eat it because

16:34

it's covered in chocolate.

16:35

>> Uh so we we just use it as like gambling

16:38

in the stream. So people redeem points

16:40

and I bite into one and they guess and

16:42

if they guess correctly I put an Easter

16:43

egg in the game and we've we've we've

16:46

decided that uh we're not doing it

16:48

anymore because um one I don't think I

16:51

think they're phasing it out but also

16:53

like I can't stand the taste of them

16:54

anymore. Like I

16:57

over like six years now it's like

16:59

killing me.

17:00

>> So um it's in the game now or at least

17:03

it will be. we're gonna we're going to

17:04

put like an in-game uh it's like a one

17:06

in three chance thing.

17:08

>> So that that happened. Uh there were

17:11

times when I would do a game jam like

17:14

we've thought about specifically working

17:16

on like an insignia in-game miniame

17:19

through a jam.

17:20

>> Mhm.

17:21

>> Certainly like yeah a few different

17:22

ideas have sort of crept in actually.

17:24

Yeah. Like one of the main mechanics in

17:26

the game came from a jam.

17:27

>> So

17:27

>> Oh nice.

17:28

>> Yeah.

17:29

>> Say more about that.

17:30

>> Yeah.

17:31

>> Okay.

17:32

uh a game I made called Trauma back in I

17:35

think it was 20 22 maybe or 2020. One of

17:39

those one of

17:40

>> I think my therapist told me about this.

17:42

>> Yeah. Yeah. That's what it's it's kind

17:44

of like it's a platformer where you play

17:46

as a a a girl who's in therapy and the

17:52

way that you play it is it's a

17:53

platformer and you get like um abilities

17:55

that send you off in different

17:57

directions in the screen.

17:58

>> Uh so like to clear a jump like she

18:00

can't jump on her own. she can only move

18:01

around and you have to touch these like

18:04

specific like trauma points to like read

18:07

about or like to like prompt

18:09

conversations and then once they're kind

18:10

of like little puzzles and once you

18:12

solve a puzzle

18:14

>> uh and you kind of like heal the trauma

18:17

>> um you get to like you get like a card

18:20

and then you play that card to use the

18:22

ability. So, like at first you'll look

18:24

over a little node and it'll like throw

18:25

you away, but then like after you've

18:27

solved the little puzzle, like you'll

18:29

use that node and the card you get from

18:31

it to like this is a jump card or this

18:33

card thrusts you forward or and by the

18:35

end you get like six or seven cards and

18:37

you can chain like a really long jump

18:39

sequence just you're just pressing space

18:41

to play the cards,

18:42

>> but you're starting at one point and

18:44

sort of like clearing this crazy like

18:45

Celeste style gap. Um, so yeah, that the

18:50

ability of like like the concept of

18:52

chaining like directional style

18:54

abilities into like one big platforming

18:57

leap. Uh, that's kind of like what

19:00

Insignia's um ability system

19:02

>> kind of Yeah, that's how it works. So,

19:04

>> all right, I got I got I got something

19:06

for you, Nolan. Uh, so I my favorite

19:09

blog that you wrote was the 1 million

19:12

checkboxes blog. And the reason being is

19:15

that as you started off, you started off

19:17

with this like really simple concept. I

19:18

want to send a million checkboxes down

19:20

that people can like look at and and

19:22

click and it's a very like approachable

19:24

and consumable idea. You're like, okay,

19:26

I I get everything you're about to say.

19:28

But then you start going, okay, well,

19:31

how do I send the data down? Okay, like

19:34

this is actually a really big problem

19:35

because a million of anything is a big

19:37

is a big number, right? Like it's just

19:39

it's just a big number to send down. And

19:40

so I can't just send down like a JSON

19:42

map or an array that's encoded in in

19:45

JSON because it's just going to be huge.

19:47

And so you start kind of going through

19:48

this process of like working through and

19:50

sending down the data through binary

19:52

stuff through, you know, I forget if it

19:54

was websockets that you sent it down via

19:56

or whatever it was. And you ended up

19:58

having to pack everything down into

19:59

bits. And then you talk about, okay,

20:01

well at first my infrastructure was in

20:03

Python and then that just was not going

20:06

well. So, I switched to Go and things

20:08

went way better for whatever reason.

20:10

Magic, I guess. The magic of compiled

20:12

>> language. I don't know. I don't know

20:13

why. Yeah,

20:14

>> it's crazy how compiled languages are

20:15

just so much better at that kind of

20:16

stuff. And so, I just I love that

20:19

process of going from I'm going to build

20:21

an idea to this is actually how an idea

20:24

can realistically execute.

20:26

>> Uh how how often at this point do you

20:29

still run into a situation where you've

20:31

learned as much as you did say on a

20:32

million checkboxes? Cuz now you've seen

20:34

a lot. You you've seen some [ __ ] And so

20:36

now it's like, okay, well, I'm not going

20:37

to start off in Python on a single box.

20:40

I'm going to, you know, you kind of like

20:42

you pre-plan for some things to come

20:44

down.

20:44

>> Yeah. So, I've been thinking about this

20:46

a lot like the firefighting like that,

20:49

right? Like I launch one million

20:50

checkboxes. It's like a single small VM.

20:53

It's running in Python. It's like, you

20:56

know, people are going cra you know,

20:58

there are hundreds of thousands of

20:59

people trying to check boxes.

21:00

Firefighting like that is just really

21:01

fun, right? like you also learn a lot

21:03

but like it's super motivating right

21:06

like you learn exactly what you need to

21:07

do

21:08

>> to keep the site up for the next like

21:10

two hours

21:12

>> whereas these days I'm you know just

21:14

thinking a lot more about like okay like

21:16

let's imagine a number of people like

21:17

for the snake game right

21:19

>> I made like a game that you play over

21:20

SSH it's like a massively multiplayer

21:22

snake for something like that I'm like

21:24

all right what's a number that's insane

21:26

you know 2500 people are not going to

21:28

concurrently play my stupid SSH snake

21:30

game so let's make sure that we support

21:31

that out of the box and then like I did

21:33

that and like it we could I could

21:35

support that. Uh but it might have been

21:38

more fun to like launch that game

21:40

without really thinking about

21:42

performance at all and then seeing what

21:43

what broke. Um so I think like I don't

21:47

I don't want to say I don't I don't

21:48

learn anymore or anything like that. Um

21:50

for for the chess game that I made last

21:52

year, I still I still learned a lot. Um

21:55

but it's harder, right? like

22:00

in a way I'm pre prematurely optimizing

22:02

right and it's like hard to say because

22:03

I am putting things out on the internet

22:06

there are a lot of scary thing like I

22:07

don't want like a massive bandwidth

22:08

build that I wake up to or something

22:10

like that so there are things that like

22:11

you actually do really have to think

22:13

about

22:14

>> but

22:16

I don't know I kind of feel like I

22:17

should be moving a little bit faster

22:18

especially since sometimes the things

22:21

that I'm preparing for just like truly

22:24

don't matter or like they are just

22:25

content right like I think the decisions

22:27

that I made for the snake game that I

22:29

made recently were primarily because I

22:31

just wanted to learn a lot about how to

22:33

write a super efficient terminal

22:34

application. But I had to like make that

22:35

choice. My users didn't make it for me.

22:37

>> It was very it was a very good blog by

22:38

the way the SSH stuff. I really enjoyed

22:41

>> how you put together especially the unic

22:42

codes and the vertical the vertical

22:44

movement classic first problem of any uh

22:48

terminal game.

22:49

>> Yeah. Yeah. Yeah.

22:50

>> I thought you were going to say you

22:51

really liked how we gave Terminal a

22:53

shout out. That's what I thought you

22:54

were going to say for that was why you

22:56

really liked the blog post.

22:59

>> It was a good shout out. It was It was

23:00

real.

23:01

>> It is It is funny though like cuz you

23:03

would think, you know, from just like,

23:07

"Oh, I'm going to make something that

23:08

runs in the terminal." You're like, "Oh,

23:10

it can't take a lot of bandwidth or it

23:13

can't take a lot of data." But we ran

23:15

into this too in some of the early stuff

23:16

for terminal shop. And we ended up not

23:19

having to fix it to the same extent

23:20

because it's not like updating as often.

23:23

It just updates when people take action

23:24

so we don't have to redraw.

23:26

>> Um

23:26

>> I think at one point we were sending

23:28

down like the first hour it was like 60

23:29

frames a second no matter who was

23:31

coming. The thing that we did initially

23:33

that made us send an insane amount of

23:35

data was we had a big a huge React Miami

23:40

logo and it was saying like coming soon

23:43

and so you SSH in and it was just like

23:46

you know coming soon react but then we

23:48

had something in there that was like

23:50

spinning or some something that made it

23:52

so we had to like send a refresh or no

23:55

you know

23:55

>> it might have been my coffee cuz I did

23:57

build a particle system.

23:58

>> Uh no pretty sure we never put that in

24:00

the application. Um, so, uh, I actually

24:03

think it wasn't even we didn't even

24:04

redraw it. It was just something with

24:06

bub, uh, with one of the like charm

24:09

things where we had a timer running

24:11

somewhere. So, it just forced a refresh

24:13

of like their framework. So, it was like

24:16

counting down the seconds until we said

24:18

we would release. And so every second it

24:20

would send down or like a bunch of times

24:22

a second. I think the default ticker

24:24

would send out this huge I don't know

24:28

because we made you have to zoom out to

24:30

look at it because we wanted the picture

24:32

to look

24:32

>> it was like 10,000 by 2,000 something

24:34

like that. It was like huge

24:36

>> and then and well we took a picture and

24:39

we did the like picture to Ansie thing

24:43

right. So we took a physical picture I'm

24:44

saying right and so it had like a

24:46

million terminal escape sequences in it.

24:48

Right. Cuz it was like every every

24:50

character had its own to like make it a

24:53

different color and make some of them

24:54

bold.

24:54

>> Slowly going from pink to more pink.

24:57

Like it was just it was the worst

24:58

possible case.

24:59

>> So every every character had probably

25:02

like at least you know 10 to 15

25:05

characters we were sending, right? And

25:06

then we made you zoom out to be like,

25:08

"Oh, we can't show this at, you know, 40

25:11

by 80 or something like that. You had to

25:13

be at like 100 by 800." And then we just

25:16

were sending that like 60 times a second

25:19

for no reason. It was a static image.

25:22

>> I just remember that like Dax comes out

25:24

like, "Guys, we sent like a 100

25:25

gigabytes in the last hour." And we're

25:27

just like,

25:28

>> "Huh, how do we do that?"

25:30

>> At that point, we were like, "Is the

25:33

whole selling coffee over SSH thing, are

25:35

we just screwed?" We were like, it's

25:38

like maybe we can't even build this as

25:40

an application.

25:40

>> It's the coffee that's the problem.

25:42

>> It's the coffee that's the problem. I

25:44

thought for sure the problem with our

25:46

margins was going to be trying to get

25:47

good coffee to people and physical

25:49

products, but it turns out it's just

25:51

bandwidth.

25:51

>> Bandwidth.

25:52

>> Just bandwidth. It's just egress cost

25:55

from our container. Um, we did

25:58

eventually figure out, oh, when the time

26:00

when there's a timer running, it resends

26:02

this. So, we fixed that eventually, but

26:03

I was cracking up about some of it

26:04

because you just can't even imagine that

26:07

you're going to have this bandwidth

26:09

problem over SSH because it seems

26:12

absurd.

26:13

>> It's text. It can't be that big.

26:14

>> It's text. Turns out it can be. So, I

26:18

don't know, Nolan, if you want to talk

26:19

about uh for people who didn't uh who

26:21

haven't yet yet read the blog post uh

26:26

some of the like fun stuff you did for

26:28

the the snake game.

26:29

>> Yeah. I mean, my favorite thing that I

26:31

did was that I like patched the Go SSH

26:34

library.

26:35

>> Uh which I wrote like a whole a whole

26:36

separate library or a whole separate

26:38

blog post about because this was so wild

26:39

to me. Yeah.

26:40

>> Um, but like the gist of that, right, is

26:43

I'm working on the game, working on the

26:45

game, doing all this profiling because I

26:46

want the game to be super fast. And I

26:48

like on

26:51

this change and my CPU usage drops by

26:54

like half and like at this point I'm

26:56

running like I have like a harness with

26:57

like 500 bots that are connecting,

26:59

sending moves. Um, and uh, yeah, so CPU

27:03

usage drops by half and I'm like

27:04

thrilled, right? Like I'm like, "Oh man,

27:06

like this changed like I've done

27:07

something awesome."

27:08

>> So I start I'm exploring that. And I'm

27:09

trying to figure out like why cuz this

27:10

was not a change that was supposed to

27:12

make things faster. Like why why did

27:14

that work? And I realized like actually

27:16

all I had done was I had broken my

27:18

harness. Like instead of my bots getting

27:20

data, um they just got a single message

27:23

that said your screen size is too small.

27:25

>> Um I had like broken cuz like SSH

27:27

there's like TTY like whatever. You

27:29

know, the details here don't really

27:30

matter. But I had broken my testing

27:31

harness and that's why performance

27:33

improved because I wasn't really testing

27:35

my game. But then I'm like thinking and

27:37

I'm like, wait, if my bots weren't

27:40

receiving any data for my game, why did

27:42

performance only drop by half,

27:43

>> right?

27:44

>> Like why did performance not drop by

27:46

99%.

27:47

That doesn't make any sense.

27:49

>> Mhm.

27:49

>> So I start capturing packets and like

27:51

looking at all of that and eventually

27:54

like see that if you're just SSH to a

27:56

box and you press a single key, SSH

27:59

sends, you know, like about 90 packets.

28:02

uh and what's going on there is that um

28:06

there's the the SSH is doing something

28:08

called keystroke obuscation. The basic

28:09

idea is that if I see what letter or

28:13

what keys sorry the timing at which you

28:16

are pressing keys but nothing else like

28:18

all I have is like key press key press

28:20

key press pause key press well that

28:22

pause maybe that means that you're

28:23

reaching for like uh you know the number

28:25

pad or something like that like you're

28:26

pressing something that's harder for you

28:27

to get to.

28:28

>> So SSH just sends junk data all the

28:30

time. um to like obfuscate the actual

28:34

key presses that you're making. But it

28:36

sends like if you the way it works is

28:38

that it perpetually sends this junk data

28:40

as long as you whenever you press like

28:42

one key.

28:43

>> And that's really bad for games because

28:44

you're pressing like one key a second.

28:46

The junk data gets sent for about one

28:49

second. And so it's like one key press

28:51

turns into 101 packets. Um and this is

28:55

not something that you're supposed to be

28:56

able to disable. And I just like I found

28:59

the patch and I like read through the

29:00

the SSH code and was like if I just

29:03

pretend if I like claim to the client

29:06

that I'm just running an old version of

29:08

SSH that doesn't know about or of SSHD

29:10

the the you know serverside component

29:12

>> that doesn't know about this feature

29:14

maybe they won't send these these junk

29:15

packets to me. And that totally works.

29:17

>> Um so I did that and then I posted about

29:21

it and a bunch of nerds got really mad

29:22

at me because I wrote this whole blog.

29:24

Yeah. And I didn't acknowledge like the

29:26

blog starts out with like I am working

29:28

on a high performance game over SSH.

29:30

>> And I just like deadpan say that without

29:32

acknowledging that that's deranged. Um

29:35

but it like broke and it like broke

29:37

containment like it made it to people on

29:38

like Hacker News or Reddit or whatever

29:40

who don't know the type of stuff that I

29:42

normally do.

29:42

>> So all the right comments are just

29:44

people being like this, you know, this

29:46

dumbass vibe coder has no idea what he's

29:48

doing. Like what stupid he is. Yeah,

29:50

because people are typing in their

29:52

passwords to very secure uh boxes over

29:56

your connection to the snake game.

29:59

>> I don't even know. I I don't know what

30:00

they were mad at me about.

30:02

>> Well, we Yeah, it's funny cuz we had the

30:04

same not Well, we had this problem and

30:06

we chose to keep it in because we were

30:08

worried about someone actually some

30:10

somehow finding something you could

30:11

exploit over that way. But we had a

30:13

bunch of people complaining too of like

30:15

>> they're they're harvesting people's

30:18

public keys which was the funniest. That

30:21

was a real complaint when we lost. Yes.

30:24

>> Yeah. It's like Yeah. I'm going to What

30:26

am I going to do? Public key.

30:28

>> I know. It was the funniest complaint

30:30

and like tons of votes and people like

30:32

this is this coffee site is a scam to

30:36

from big data to get all of your public

30:39

keys. And you're like, what am I going

30:41

to do with h with only the public key? I

30:44

don't, you know, it was like,

30:45

>> do do you know what the first word of

30:47

public key is?

30:48

>> I know. It was like it was so funny.

30:52

>> Yeah. So I similar similar thing of

30:55

people getting very upset uh about this

30:58

when you're like, I think it's okay,

30:59

guys. Like it's it's fine. Yeah. Yeah.

31:02

Also, it's not like you tried to

31:03

upstream it back to go and get them to

31:05

remove it or like it's you know.

31:06

>> No, but I did ping. So the recurse, the

31:09

place I mentioned earlier, Fippo, the go

31:11

one of the go crypto maintainers is also

31:13

a recurse alum. And so I pinged him on

31:15

like the recurse chat to be like, "Am I

31:16

like is this really stupid? Like

31:18

>> am I fired if I do this?" And he was

31:20

like, "For your game, it's fine. Don't

31:21

worry about it."

31:22

>> Right.

31:23

>> Thank you, Fippo.

31:24

>> Had the official author's approval just

31:26

reply with a screenshot to all people

31:28

getting upset like, "I've got receipts.

31:30

I got receipts."

31:33

>> By the way, I do I can I make a quick

31:34

shout out for your SSH blog? So, if you

31:36

haven't checked it out, you should go

31:37

check it out. But this was my favorite

31:39

joke of the entire thing, which is why

31:41

does the snake game render strangely for

31:43

me? Snake snake snakes.Run makes use of

31:46

uni block unicode block elements. Since

31:48

these were added in 1991, your terminal

31:50

may not fully support them yet. For

31:52

example, Mac OS's terminal app renders

31:54

them poorly. Try using a different

31:56

terminal. It's like my favorite thing in

31:58

the universe is this thing right here.

32:00

This was I cannot tell you how many

32:03

issues I got in Neoim from people using

32:06

terminal app and being like Neoim's

32:09

broken. It can't do colors. And you're

32:11

like, I don't understand how. And then

32:14

turns out, oh, this the default terminal

32:17

Mac can't figure out how to update.

32:20

>> No, you can't update it. The technology

32:23

the the the private key to the repo was

32:25

lost and so they just have the same

32:26

thing since 1989.

32:28

>> It's so frustrating.

32:30

It's actually stuck in 1989. It's

32:32

>> It's old.

32:33

>> Prime that uh that site uh that that you

32:36

had up, I just want to note that um in

32:38

keeping with the SSH aesthetic, the

32:41

whole site uses tables for layout and

32:42

only HTML that was available in 1995

32:45

with no CSS.

32:47

>> Oh,

32:47

>> which I was very proud of. Um that was

32:50

tables for layout actually kind of sick.

32:51

Like kind of

32:52

>> tables for layout actually really good.

32:54

It's actually

32:54

>> it was like honestly you know what

32:57

really easy to think about.

32:59

You guys heard it here first. It's

33:00

coming back after this podcast. You're

33:02

going to start seeing tables for layout.

33:04

The Google search trends big. It's going

33:06

>> What about frames? Remember frames.

33:08

Bring those back.

33:09

>> Like first off, I frames are all over

33:11

the place. You go to any news. Okay.

33:13

Okay. Now we're Now you got me. Now

33:15

you're going to ruin my life and now I'm

33:16

going to be very upset. You go to any of

33:19

the news outlets we're talking about. It

33:20

doesn't matter what it is. Techrunch.

33:22

>> The only news outlet I go to is the

33:24

prime time. Okay.

33:26

>> Prime Time. Well, I synthesize this for

33:28

you, but if you go up on your tabs and

33:31

uh you you look at you can highlight and

33:33

hold something over and it'll tell you

33:34

how many megabytes. Like Twitter right

33:35

here, while having an actual video right

33:38

here of Doom being loaded and being

33:40

played is taking up about 211 megabytes.

33:43

It says it right there. If you go to any

33:45

news place, it will be 1.5 gigs every

33:49

single time. And then you go and you

33:52

start perusing their code and it's all

33:54

just these big videos being pushed into

33:56

iframes and it's just insanity going on

33:58

in the website. I frames the devil. I

34:01

just want to throw that out there.

34:03

>> But they're very fun to play with. You

34:04

could totally do that. I made an entire

34:06

business

34:07

>> game on uh Facebook, the old uh Facebook

34:10

apps they used to have way back in the

34:11

day. I'd load an iframe, do

34:13

authentication through an iframe and

34:14

through uh

34:15

>> the URL.

34:17

>> Quick uh quick proposal for a game. I

34:19

don't know what it needs to be, but we

34:20

need something about eye frames, but

34:22

it's like both the eye frame and the

34:24

internet way, but also the Dark Souls

34:25

way.

34:26

>> The Yeah. Yeah. Yeah.

34:27

>> Like both.

34:28

>> Oh, yeah.

34:29

>> You know what I'm saying? Something

34:30

about them makes you invincible. I don't

34:32

know how. I trust Nolan's brain to

34:34

figure that out in 6 months.

34:36

>> That's inputs and outputs right there,

34:37

Nolan.

34:37

>> That's inputs. Outputs. Inputs. Outputs.

34:38

>> Inputs. Outputs.

34:39

>> Input. Out. I frame. Output. I frame.

34:42

Think about it.

34:42

>> I had a friend, I don't know what

34:44

happened to this project, who was

34:45

working on a thing because Blue Sky

34:46

still has a fire hose, right? like you

34:48

can get all of the the data from Blue

34:49

Sky.

34:50

>> And so he had a site

34:51

>> um it's more than you'd think, right?

34:53

No. So it was he just made it was a site

34:56

that had an individual iframe for every

34:58

image and every video that anybody

35:00

posted to the site like scrolling like

35:02

as fast as it could.

35:04

>> It was like actually pretty sick. Like

35:07

it was fun to watch.

35:08

>> Yeah.

35:08

>> Um but I don't know. Maybe it's too

35:10

scary to put online. Spencer, if you're

35:12

listening,

35:13

>> there you go. New blog post as well.

35:15

>> Get that up.

35:16

>> Mhm. Well, there's definitely something

35:18

in uh like the game jam community. I

35:21

don't know why, but it's kind of like,

35:22

you know, that that thing about uh how

35:25

everything evolves into crabs. In game

35:27

jams, there's this thing where

35:29

guaranteed at least one entry in every

35:31

game jam is a game where the game is

35:34

being played across multiple like

35:35

viewports, like multiple windows or

35:37

multiple. It's like a platformer and you

35:39

your character jumps between the so

35:40

maybe there's an eye iframe idea there

35:42

where you have like multiple eye frames,

35:43

but it's one game being played across

35:45

them.

35:47

Oh, dragable eye frames to solve

35:50

puzzles.

35:50

>> That's something like that.

35:53

>> I was just

35:53

>> with eye frame souls like

35:55

>> it. It has to be. Yeah.

36:00

>> He's cooking.

36:00

>> Still pro. Yeah. Yeah. Yeah. All right.

36:02

No, he can't cook on stream. Can't cook

36:03

on stream. I have to think about that

36:05

one after.

36:05

>> That just reminded me.

36:06

>> You got Yeah, that like hit me. All

36:08

right.

36:08

>> It hit him. It hit him.

36:10

>> You just nerd snipe him. You just

36:11

changed his next six months, TJ.

36:13

>> Yeah. Yeah. Sorry. I apologize. I did

36:14

not mean to do that to you, but I am

36:16

excited for frame. I frame I frame

36:18

squared.

36:19

>> Yeah.

36:19

>> Hey guys, if you like this episode, you

36:21

can watch the rest of it on the Spotify.

36:23

And don't forget to like and subscribe.

36:25

Woo! See you later.

36:28

>> Boot up the day

36:31

five co errors on my screen.

36:35

Terminal coffee.

Interactive Summary

This video features a discussion with game developers Nolan Eie and Adam Ununice, focusing on their journeys into game development and their creative processes. Nolan shares how he initially got into game development to reconnect with coding, learned from Adam's tutorials, and eventually found inspiration at the Recurse Center. He highlights his experimental approach, including creating a game using the Open Search spec and the viral success of his Wordle-like game, 'Wardle'. Adam discusses his early passion for games stemming from his childhood console experiences and how he aims to evoke similar feelings in his own large-scale projects. The conversation also delves into the challenges of game development, such as managing scope, the importance of 'making a ton of games' early on, and the technical hurdles of creating performant applications, particularly in terminal environments. They touch upon unexpected issues like bandwidth limitations in SSH and the complexities of optimizing code, sometimes leading to surprising performance improvements. The developers also share insights on defining 'done' for a project, balancing creative expression with product development, and the unique culture of game jams.

Suggested questions

6 ready-made prompts