Konsoll 2018: Oskar Stålberg - Developing The Bad North Look — Transcript
Full transcript
- 0:00we are ready for the last talk of today
- 0:04and our next speaker has experience from
- 0:07companies like Ubisoft and us too he is
- 0:11the technical artist turned indie to
- 0:13create a very interesting game that
- 0:15North please welcome Oscar strolling
- 0:26yeah yeah as you can see I'm Oscar Saul
- 0:31Berg I'll just start by introducing
- 0:33myself I used to work for Ubisoft
- 0:35massive where I among as a technical
- 0:38artist where I did a bunch of shader
- 0:40work and among other things made the
- 0:42cool like holographic 3d map in the
- 0:45division I'm like one of my big
- 0:49interests is procedural generation and
- 0:51this talk is gonna be a lot about
- 0:53procedural general oh that's very
- 0:55interesting
- 1:01that is very there we go okay let's keep
- 1:04tabs on that yeah this talk is gonna be
- 1:08a lot about procedural generation
- 1:09because bad north is all about
- 1:11procedural generation basically all
- 1:12aspects of the game are procedurally
- 1:14generated in some kind of way here are
- 1:17two like earlier examples of procedural
- 1:19procedurally generated demos I've done
- 1:21one of them you get to build a little
- 1:23red brick house and one of them you get
- 1:25to terraform a sort of medieval era
- 1:28planet both of these you can find online
- 1:32and play in your browser if you just
- 1:33google my name and brick block for that
- 1:36one and just plan it for that one
- 1:38you'll find more just google my name
- 1:39you'll find them and that sort of so
- 1:43those I did on my spare time so that got
- 1:45me started round like thinking about
- 1:46procedural generation and more
- 1:47specifically thinking about kind of
- 1:50content driven
- 1:51tile based procedural generation in 3d
- 1:54worlds which sent the which later would
- 1:57turn into stuff that would become bad
- 2:00north so that's enough about me so what
- 2:04I'm gonna do in this talk is I'm going
- 2:06to assume gonna open up unity and take a
- 2:09poke around
- 2:10look at like what bad North looks like
- 2:12in the scene view in unity and like what
- 2:15happens when we tweak a bunch of values
- 2:16and stuff like that but we'll take with
- 2:19us some like core design principles or
- 2:22sort of aesthetic principles that I
- 2:25think permeates the design of bad north
- 2:28and these are mostly like these aren't
- 2:29things I came up with before it well
- 2:31some of them are but most of them aren't
- 2:32things I came up with before I started
- 2:33working on the game but things I kind of
- 2:35discovered and found work well as I was
- 2:38making the game so we'll just go through
- 2:40them quickly one of them that's pretty
- 2:42simple one
- 2:42borders not textures or like smooth
- 2:46gradients crisp lines so it's like
- 2:49instead of using like a tiling grass
- 2:51texture for example telling you over and
- 2:53over this is grass this is also grass
- 2:55this is also grass this is also grass
- 2:57you do most of your work defining areas
- 3:01like around the edges of the areas
- 3:03instead of like in the middle of the
- 3:04areas because that's that's really
- 3:06interesting is how things happen where
- 3:08different areas meet and that's where
- 3:10you want to put it like you can still
- 3:11have a texture but like tone it down and
- 3:13put some focus on the border since that
- 3:14the other one quite obvious symmetry
- 3:17like the idol game has an island in the
- 3:20middle that the camera rotates around so
- 3:22very natural we get the symmetric
- 3:23feeling for it and that's also a thing
- 3:25we try to play within like the
- 3:27iconography on the game and a lot of the
- 3:29like the art of the game and stuff like
- 3:31that it's kind of like a this kind of
- 3:34shining city on a hill feel to it
- 3:37the other one more sort of dramatic one
- 3:40order and chaos which sounds very
- 3:42dramatic and in a lot of ways we also
- 3:44have that very dramatically represented
- 3:46in bad north but if we sort of pull it
- 3:48down a notch we get something more like
- 3:50establishing patterns and breaking
- 3:52patterns or sort of make rules break
- 3:54rules which i think is a quite
- 3:56fundamental design principle and like
- 3:58all kinds of thing in game design in in
- 4:01art in music as well right like do
- 4:04things in a certain pattern and like
- 4:05twist it up a little bit and then when
- 4:07you get used to that you twist it up a
- 4:08little bit and there are a lot of that I
- 4:09think in the esthetical aspect of bad
- 4:12north to both on quite low levels and on
- 4:14slightly higher levels the next thing
- 4:17respect abstraction that sounds quite
- 4:19abstract it is will get some very very
- 4:21concrete examples of that though and
- 4:23it sort of ties into the idea of not
- 4:26seeing the forest for all the trees and
- 4:28striving to do the opposite of that and
- 4:30of course the next one is quite obvious
- 4:32minimal labour cost especially minimal
- 4:35repetitive labor because we are a very
- 4:38small team is me and one other guy
- 4:40full-time and then audio guy half time
- 4:42so like we don't have a lot of time to
- 4:44put into laborious workflow so the whole
- 4:48game is designed around everything being
- 4:50very fast to produce not necessarily
- 4:53like because sometimes obviously it can
- 4:55take longer time to build the system
- 4:57then build like do everything manually
- 4:59and so we don't always save time from
- 5:01that but it's also that very very
- 5:02repetitive tasks tend to get quite
- 5:04boring and they're also harder to tweak
- 5:05in the end I think that if you build
- 5:07very systems based things where you can
- 5:09like tweet individual variables and
- 5:10everything changes yeah so those are
- 5:14sort of the basic things that hopefully
- 5:15will keep coming back to us we take a
- 5:17look inside the game so yeah this is bad
- 5:20north how many here have played bad
- 5:22north so a few people how many people
- 5:25have seen bad north more people okay
- 5:28well everyone who roasts that had the
- 5:30second type but not the first byte yeah
- 5:34so this like the campaign view it's
- 5:35changed a little bit from the version
- 5:37that's out there right now and from the
- 5:40campaign we can enter one of the many
- 5:42islands and of course this is
- 5:44procedurally generated so we'll start
- 5:46taking talking a little bit about what
- 5:48goes into making these islands as I said
- 5:51they're procedurally generated they use
- 5:53an algorithm called wavefunction
- 5:57collapse which I didn't name it it's
- 5:59quite a weird name but it comes from
- 6:01sort of an idea of like building a
- 6:03possibility space and then sort of
- 6:04collapsing it until you have one final
- 6:06solution so the way but the way I
- 6:11interface with it which is actually
- 6:12quite easy to understand is I just give
- 6:14it a bunch of like tiles that I build in
- 6:16Maya 3d tiles that looks like this and
- 6:18then the algorithm figures out how to
- 6:20assemble them into complete levels that
- 6:23also ties into the very I guess I said
- 6:26minimal work for minimal workflow thing
- 6:28where I can just throw in new tile
- 6:31assets generate new levels and I'll get
- 6:33to see what those look like
- 6:34so obviously right now I have like quite
- 6:37a few tile
- 6:37going on here I think there's 400
- 6:40something like that which obviously like
- 6:41took a long time to build but I did that
- 6:44over two years time but when I was just
- 6:47trying out the algorithm in the
- 6:49beginning and like trying to nail down
- 6:50the basic feel of the shape of the
- 6:53island like how big are my bevels what
- 6:56are like how frequent are my detail
- 6:58stuff like that basically everything I
- 7:01worked with was like these tiles over
- 7:03here something like that so I needed
- 7:05like 10 tiles and then the algorithm
- 7:06figures out how to build that into
- 7:08separate levels so a benefit you have
- 7:11from that is you don't have to like
- 7:13sometimes with procedural content you
- 7:15have to make a lot of different
- 7:16permutations of things before it starts
- 7:18working but with this algorithm you
- 7:20don't which makes it much quicker to
- 7:22work with and you don't have to make all
- 7:23the weird like diagonal fitting pieces
- 7:26to work with every single use case
- 7:28because the kind of the tiles themselves
- 7:30restricts what kind of levels it can
- 7:32build out of them again of course if you
- 7:36build a game out of tiles like this or
- 7:38any game out of tiles that again ties
- 7:41into the sort of order thing where like
- 7:43you establish very very clear pattern so
- 7:45you have a tile based game grid based
- 7:47game and that's something we've
- 7:48obviously largely leaned into it is a
- 7:51very gridded island it looks like a like
- 7:53it's a more blocky than an island would
- 7:55look like in real life
- 7:56and obviously the basic gameplay of the
- 7:59game as well like the grid squares you
- 8:02move your units to are on the same grid
- 8:05as the game is being generated on but
- 8:07then of course make patterns break
- 8:09patterns we do a bunch of little small
- 8:11things just to make it like to break up
- 8:14the super obvious blockiness of it one
- 8:17of the things we do is to implement it
- 8:20and this is like one of also one of my
- 8:21contributions I think to to this because
- 8:23I didn't invent this algorithm but one
- 8:25thing that I brought to the algorithm is
- 8:27adding these sort of tiles that span
- 8:29across multiple grid squares so here's a
- 8:32good example of that this little tile
- 8:35here like actually consists of our
- 8:39module we call them this little module
- 8:40actually spans across across the two
- 8:42tiles which makes that we can put like a
- 8:44little bit more of a crack into it that
- 8:46like makes it a little bit larger sort
- 8:48of rounds off the shape a little bit
- 8:49more
- 8:50removes that super obvious sort of grid
- 8:53size from the rest of the game so that's
- 8:57a quite subtle way of doing at that that
- 8:59also means that we can sneak in stuff
- 9:02like this like this little sort of
- 9:03tunnel here or yeah we have some like
- 9:10bridge just going about some caves and
- 9:13bridges going on and of course having
- 9:14things stretch across multiple tiles
- 9:16also means that we can do stairs which
- 9:19you like you need so the game doesn't
- 9:20all play on take place on one level also
- 9:25just like from making this tool as I
- 9:27said workflow is very very important and
- 9:28when you make procedural content
- 9:31especially if you're not the same person
- 9:33writing the algorithm and doing the
- 9:36producing the art for it you might end
- 9:38up with tools that require you to put in
- 9:40a lot of custom data like you make some
- 9:42tiles export them to the game and then
- 9:44you have to say import them into the
- 9:45engine and then like mark things up to
- 9:47tell them what's going on in different
- 9:49tiles but that's all been automated here
- 9:50so as you see if I highlight an edge
- 9:54here it will highlight in yellow all the
- 9:56other edges that look the same so that's
- 9:59just like the import algorithm like
- 10:01looking through the mesh looping through
- 10:03the edges and see what fits where yeah
- 10:07and if I like I like this side you'll
- 10:08see everything with a straight edge
- 10:09everything with a straight horizontal
- 10:12edge stuff like that
- 10:13another little fun thing that I'm it's
- 10:16quite tiny but I'm quite proud of it
- 10:17that big breaks up the repeted
- 10:19repetition a little bit is like if you
- 10:22know is this very basic corner here it's
- 10:25not entirely symmetrical like this is
- 10:28not a 45-degree edge it's like slightly
- 10:29slanted which means that if you put
- 10:31together like a sort of pillar it will
- 10:38end up having slightly different like it
- 10:40can be a bit pointy like this or it can
- 10:42be a little bit duller or like it can be
- 10:44a little bit a symmetrical stuff like
- 10:45that this is a very very basic thing to
- 10:47break up that they're the most common
- 10:49parts of the level without adding
- 10:51additional clutter to it because that's
- 10:53another important thing and in addition
- 10:56to that I have another very tiny thing
- 10:58which is like these little right because
- 11:01that you want to intimate some
- 11:02additional detail too so this is a
- 11:03little sort of
- 11:04dr. piece that has a little bit of a
- 11:06crack in it and it flips the asymmetry
- 11:11so you can have like a plane going one
- 11:13way and then this little crack shows up
- 11:15and then the play goes another way so
- 11:16it's a way to introduce like a little
- 11:18bit of extra detail almost kind of a
- 11:20little bit of a texture to the cliff and
- 11:23again the tech the sort of texture crack
- 11:25here appears on the edge not on the side
- 11:28of the cliff because the site isn't an
- 11:30interesting place what's interesting is
- 11:31what happens when the cliff bends but it
- 11:34also produces some meaning in that it
- 11:35flips the the side so it sort of creates
- 11:37a bigger pattern than than just the
- 11:39crack itself this is a very small thing
- 11:42another thing we do to break up the
- 11:47tiles that's actually not in the
- 11:49released version of the game right now
- 11:51but we'll see in an update fairly soon
- 11:53because I've just made this the other
- 11:54day and I'm quite happy to show you it's
- 11:56quite subtle again like a lot of things
- 11:58in this game
- 11:59is this little thing here oh yeah yeah
- 12:08so it's very very subtle but it's a way
- 12:11to just like smooth out the island a
- 12:13little bit so this is what the release
- 12:14version looks like now so all the edges
- 12:16are straight and of course like if you
- 12:18work with these kind of tile based
- 12:20things you're like that can easily
- 12:22happen because of course this piece here
- 12:24doesn't know that the that there's going
- 12:27to be a like an end to it here right so
- 12:31it has to be purely straight but then I
- 12:34add this little effect afterwards and
- 12:37this also like it's a way to smooth out
- 12:39the entire thing but it does very much
- 12:40tie-in to the fact that the game is like
- 12:43voxel-based and gridded from the
- 12:44beginning because what happens is if we
- 12:47just look at the island generation and
- 12:50then we'll find the right Island here's
- 12:52the island there's like a voxel space
- 12:57yeah we create a voxel space from the
- 13:01island some of it's quite obvious it
- 13:03happens from the pieces but also as you
- 13:05can see here the trees add a little bit
- 13:07of sort of voxel coverage to them this
- 13:09is used for lighting as well we'll get
- 13:11more into that later but if you have a
- 13:13voxel space space that means that you
- 13:15can also drip drive normals from that
- 13:16and those normals you can use
- 13:18for the lighting but you can also use
- 13:20them to push the edges a little bit of
- 13:23the entire thing to sort of smooth out
- 13:24the entire thing this is quite a nice
- 13:27little thing very small bit quite nice
- 13:33yeah and to this sort of abstractions
- 13:36part there's a like I've tried to be
- 13:38very very limited in what kind of things
- 13:40I put into the island right there's very
- 13:42very few colors going on in the base
- 13:44island there's basically three elements
- 13:45here there's walkable areas non walkable
- 13:48areas and cliffs and that's it
- 13:50right so that's because that's what you
- 13:52care about when you play the game you're
- 13:53like where can my troops go where's the
- 13:56like and where are the where are the
- 13:58different layers and where are the paths
- 13:59between the different layers so I don't
- 14:01need to have a rock texture telling you
- 14:03over and over again there's a rock here
- 14:04Rock here Rock here Rock here what
- 14:06you're interested in it's like breaking
- 14:08it down what's walkable what's not
- 14:09walkable so that's like all I'm playing
- 14:11towards with yeah but the colors here
- 14:18and also the the forests of course play
- 14:25into this as well and we here we also
- 14:26have a very clear case of this sort of I
- 14:28mean in a very literal sense trying to
- 14:30avoid not seeing the forest for all the
- 14:32trees because it's a common area you can
- 14:33do especially maybe I said quite junior
- 14:35artist is you would make a very
- 14:36beautiful detailed tree but then you put
- 14:39it into an environment and then that
- 14:40tree is like way too complex and if you
- 14:43put a thousand of those trees around it
- 14:44becomes a very very cluttered whereas as
- 14:46a player you're probably just interested
- 14:47in like there's a forest here so my
- 14:49trees are like deliberately like they
- 14:51have a little bit of a texture to them
- 14:53and if you look very very closely you
- 14:54can see you know what kind of trees they
- 14:56are and you see that from the silhouette
- 14:57as well but mostly they just blend
- 14:59together in this larger blob which helps
- 15:02you read the entire environment faster
- 15:04and that also ties into the lighting
- 15:06where like you can see if we just get
- 15:11back the sunset yeah when the side comes
- 15:16into the side that from the side the
- 15:18trade again they use these kind of
- 15:19normals from the voxel space so when the
- 15:21light comes from the side they light up
- 15:24the trees as a blob instead of lighting
- 15:26up each individual tree just again a way
- 15:29to sort of build these larger
- 15:30abstractions and Shea
- 15:31rather than focus on the individual
- 15:33components another very tiny thing of
- 15:37sort of make patterns break patterns
- 15:38thing is how the when we have this
- 15:43little slopes in the grass here these
- 15:45are way patcher than the rest of the
- 15:47grass right we have these very calm
- 15:49areas that sort of marks the main areas
- 15:52of navigability the plains but then you
- 15:55have these more patchy areas that sort
- 15:56of draw your attention a little bit more
- 15:58that mark out the places where you can
- 16:00navigate between the different levels
- 16:01there's an easy way to sort of mark up
- 16:03those slightly more important this is
- 16:05also a thing that we are it doesn't look
- 16:08exactly like that in the released
- 16:10version of the game but this is coming
- 16:11out in a patch quite soon sort of being
- 16:14a bit more consistent in how we use
- 16:15grass and not grass to to communicate
- 16:20navigability yeah and of course another
- 16:26interesting like as I said the a very
- 16:29like in the borders not texture thing we
- 16:33have the smooth gradient sharp outlines
- 16:35so there's a bunch of different ways our
- 16:37clients are getting generated here
- 16:40there's a bunch of different techniques
- 16:41to do outlines but one thing I do for
- 16:43the trees here for example and this is
- 16:44also a thing I added very recently is we
- 16:46just turn off the voxels base you'll see
- 16:53that the like here in the perspective it
- 16:55looks a little bit weird but you see
- 16:56that each tree has like a little bit of
- 16:57a shadow behind it so that's that means
- 17:00it's drawing each tree twice and the
- 17:03first time it draws it it draws a darker
- 17:05pushed back a little bit and one pixel
- 17:07further out and then it draws it again
- 17:09in the right place and one pixel further
- 17:11in in the right color so that means that
- 17:14the outlines of the trees they will kind
- 17:16of form a common outline sometimes so
- 17:18here you can I don't know how Oh
- 17:19actually I think I implemented a thing
- 17:21too
- 17:22does that work yeah it kind of works so
- 17:31you can see that the yeah the treat like
- 17:33they form a common outline here and you
- 17:35yeah they form more of a yeah of a
- 17:37common blob more than individual blobs
- 17:38because I push them like that yeah and I
- 17:43mean obviously here we see also all the
- 17:45kinds of other
- 17:45techniques I use for like for the island
- 17:48itself I use this very I mean it's a
- 17:50basic very old-school technique where I
- 17:52just draw the mesh twice once inside out
- 17:55and once right side out one pixel pushed
- 17:58out the first time in one pixel pushed
- 17:59in the second time obviously when you
- 18:02have the pushed out as far as this this
- 18:04looks very artifacting you get these
- 18:05weird like spiky triangles at the other
- 18:07edges but if you pull it back to just be
- 18:10one pixel effect it looks it looks good
- 18:13especially with some interior icing on
- 18:15it and even more so this is a trick I'm
- 18:18quite proud of - you see the actually
- 18:21put a separate slider on that one you
- 18:23see the little like the shadow under the
- 18:26grass so that's also all done in shader
- 18:28and it uses a a trick like it's a it's a
- 18:32shader function called dvy which
- 18:34measures how a pixels value changes in
- 18:38the vertical axis of the screen and you
- 18:40can use that like to do things like put
- 18:43a tiny bit of shader underneath a tiny
- 18:45bit of shadow underneath something in
- 18:47just one pass in the shader without
- 18:48drawing drawing like the shadow in one
- 18:51polygon and then the the grass on top of
- 18:53that on another polygon that's also the
- 18:55like that also breaks up a ton around
- 18:58the edges of the triangles but you don't
- 19:01really know is that if you pull it down
- 19:03to just one pixel like that this is
- 19:06quite neat so it produced an outline but
- 19:07the outline gives also gives a
- 19:09three-dimensional feeling to it
- 19:10a lot of the a lot of the art in bad
- 19:13North tries to blur the line between 2d
- 19:16and 3d and that's one way we do it quite
- 19:20technically also for the forests and
- 19:23also for the units in the game we use
- 19:27like they of course billboard which is
- 19:29also something you don't really notice
- 19:30because they're so subtle in themselves
- 19:33but they are just billboarding planes
- 19:34and we do that billboarding in the
- 19:38vertex shader instead of doing it in
- 19:40c-sharp because that would be that would
- 19:41be quite slow but doing in the vertex
- 19:43shader is very very fast yeah and so we
- 19:49have the sharp lines and of course what
- 19:50produces most of the soft gradient in
- 19:52the game is the lighting which is a
- 19:54quite a specialized way of doing
- 19:57lighting that birds really well
- 19:59if you have a voxel-based game
- 20:00especially if you have very low res
- 20:02voxel-based game so this is what it
- 20:04would look like without lighting there's
- 20:06still a bit of normal lighting going on
- 20:08but I think if we because we can put in
- 20:11a bit of an overcast and some cloud
- 20:13coverage then you see there's almost
- 20:15there's still a tiny bit of normal
- 20:17lighting happening but it's very little
- 20:18but if we add the lighting to it like
- 20:20there's a nice bit of AO to it the way
- 20:22the AO is done is we do a sort of ray
- 20:26marker but a very very simplified ray
- 20:28marcher from a bit a little visualizer
- 20:30actually yesterday for it so if we
- 20:33sample from a position here you'll see
- 20:36how it's sort of a tree going out from
- 20:40that position so it's actually not ray
- 20:43marching in sharp in straight lines but
- 20:45it doing it in a tree structure so if it
- 20:47stops early it doesn't have to keep
- 20:48branching out from there so it doesn't
- 20:50produce perfect lines but it's perfectly
- 20:53good enough for something as soft as the
- 20:55shadows we use in bad north so that's
- 20:58also a way we're like the technical
- 21:00aspects of it and the technical
- 21:01limitations of the specific game we're
- 21:03making sort of tie that into the the art
- 21:07in a way that doesn't yeah that sort of
- 21:09makes them all come together as one so
- 21:13you'll see if I put it put that one down
- 21:14here you'll see how that area is darker
- 21:16and it is darker but because this sort
- 21:18of tree structure gets blocked and that
- 21:21also gets baked down into an AO texture
- 21:25so this is like a 3d texture so these
- 21:27are like the slices you can see the
- 21:28shape of of the island here and you see
- 21:32it's like darker here because this like
- 21:33underwater this is the lowest level and
- 21:35then it gets brighter and brighter and
- 21:37fewer and fewer obstacles as you as you
- 21:38go up from there and having having that
- 21:41lighting information in a very low res
- 21:433d texture also mean that it's really
- 21:45cheap to sample the lighting in all
- 21:47kinds of things apart from the static
- 21:50environment so in like the unit's
- 21:52walking around I can just sample the 3d
- 21:54textures to get their lighting the
- 21:55particle systems can sample this all the
- 21:58little rasp it's can sample this so it's
- 22:01a very it's very fast to to generate
- 22:04because it's so low resolution and it's
- 22:06very it's very fast to calculate as well
- 22:09because you just have to sample that and
- 22:11then map it to like an inn
- 22:13the value and then you have the lighting
- 22:14so that's one way to produce very soft
- 22:17gradients that give you a sense of the
- 22:20three dimensionality of the island
- 22:22without taking a lot of attention from
- 22:24like sharp shadows and weird shapes
- 22:26keying getting created by that yeah and
- 22:32now I thought we were gonna take a look
- 22:34at the units of the game it's of course
- 22:38a very very important part of the
- 22:39gameplay here we have the three or no
- 22:42the four basic unit types of the game so
- 22:44it's like you can hear a little bit get
- 22:48them walking around - so we got some
- 22:50archers we got some pike men we've got
- 22:52some sword and shield guys again they
- 22:56there's a very basic thing here tying
- 22:58into the idea of abstractions where the
- 23:00units move around in groups and they
- 23:04stand around in squares so it's all
- 23:06about trying to make the unit's read as
- 23:08a group and not as individual units most
- 23:11of the time though a lot of the time
- 23:13they do break up in individual units
- 23:14fighting together and that's sort of
- 23:16when you start to lean into the more
- 23:17chaotic aspects right so when
- 23:18everything's going well for you your
- 23:20strategy is working your defense is
- 23:21working your units stand around in nice
- 23:25squares work in unison like the the
- 23:27archers fire in synchrony stuff like
- 23:30that but when your defense strategy
- 23:32starts to break up like and I mean
- 23:33individual units are like all fending
- 23:35for themselves in all kinds of different
- 23:37part of the maps and it becomes quite
- 23:38like hard to read the battlefield so
- 23:40that's a fairly central thing of the
- 23:44basic drama but also to of course the
- 23:46design of the units is just like what
- 23:48the trees are they're supposed to be
- 23:51very simple of just a very simple
- 23:53silhouette so that when they stand
- 23:55together in a group they like blend
- 23:57together as a square there also because
- 24:01this was like making the units was
- 24:03actually one of the early on and like
- 24:05doing the basic R&D for this game
- 24:07figuring out a good workflow for making
- 24:09the units was actually one of the bigger
- 24:10hang-ups but it was quite difficult to
- 24:13figure out how to do that in a way that
- 24:15doesn't require a lot of work doing a
- 24:16lot of different animations require a
- 24:18very sort of labor-intensive export
- 24:20pipeline where you like have to do a
- 24:22bunch of different animations for
- 24:23different styles of units and export
- 24:25them that important
- 24:26unity mark up the sprites and I put the
- 24:28sprites into different animations stuff
- 24:30like that and also take like a lot of
- 24:33texture space doing all the animations
- 24:35wanted to do so we where I came up with
- 24:38a what I think is a fairly clever
- 24:41solution there were all these units the
- 24:45sprites they use all look like this and
- 24:48they are that low resolution so there
- 24:52are three different like animation sets
- 24:55being used for all units in the game
- 24:56it's units with no shield no sword like
- 25:02the guys with my archers do actually
- 25:05have yeah my archers and there are and
- 25:07my Spears and there are units with a
- 25:09sword in the back hand so those are the
- 25:11guys have a shield in the front hand and
- 25:12there are the units with just disorder
- 25:14and those get reused like throughout the
- 25:17game and you see that the colors are all
- 25:19weird here and they have like a big
- 25:20square blobby heads that's because the
- 25:23colors here are actually UV coordinates
- 25:25that I then used to look up a deed a
- 25:29more detailed texture that contains
- 25:31stuff like the yeah the helmet here and
- 25:35so the specific style so these units are
- 25:38all like using the same basic animations
- 25:40but then I swap out what texture I'm
- 25:42mapping to those UV coordinates that
- 25:44also means that I can have quite high
- 25:45resolution helmets and specific things
- 25:50that are like unique for each character
- 25:52but I can have very low resolution
- 25:55especially since they're so blobby in
- 25:56the shape I can have very low resolution
- 25:59sprites that I need to animate and of
- 26:02course the ones I have to animate I have
- 26:03to export like a bunch of different
- 26:04versions of so that that's really
- 26:05helpful yeah and also since they are so
- 26:11blobby in the shape we actually were not
- 26:13doing we're just animating them in two
- 26:15different directions or in one direction
- 26:17and then mirroring them or not doing
- 26:19like towards the camera and away from
- 26:22the camera not back in front as you can
- 26:25see them like as you turn the camera you
- 26:26see them you see these guys flipping
- 26:28their swords like that which is like if
- 26:31you are looking for it you do know is it
- 26:33happening but when you're playing the
- 26:34game you don't think about it and I've
- 26:35had a lot of people playing the game and
- 26:37when I tell them the units are too
- 26:39they were like okay I didn't know is
- 26:41that so that's quite neat because they
- 26:44read more as a group and the group is of
- 26:46course three-dimensional because there
- 26:47are like units and spread out in
- 26:49three-dimensional space in the group and
- 26:51because some of the units like these
- 26:53shield guys here also have some parts of
- 26:56them that are not two-dimensional but
- 26:58there are three-dimensional you see the
- 26:59shield's here just floating in front of
- 27:01them you're sort of tucked into them
- 27:03kind of clipping them but that's also
- 27:05since there's just one color you don't
- 27:07really notice that they don't have an
- 27:09arm properly or stuff like that and
- 27:11that's also because the like just the
- 27:14silhouettes of a guy with a sword in one
- 27:16hand the sword like the guys kind of
- 27:18symmetrical the sword is kind of
- 27:19symmetrical if you mirror that one you
- 27:21don't really know is it especially if
- 27:22you're standing in a group but stuff
- 27:24like the shield that's very very
- 27:26important in again sort of trying to
- 27:28play to the right abstractions
- 27:29expressing the sort of directionality of
- 27:31the entire group like where's the group
- 27:33looking what kind of enemies are the
- 27:35group caring about how are they moving
- 27:37stuff like that so that's why the the
- 27:40it's much more important that the three
- 27:42that the shield is three dimensional and
- 27:44the character is three dimensional and
- 27:45that's the same with with the arrows and
- 27:49the bows to like the bows are 3d because
- 27:54the like with the sword you can I don't
- 27:57know if how many of you have animated
- 27:58mellow things but with a sword
- 28:00you can get away with a lot like you
- 28:02just do a quick swipe in the air and it
- 28:04doesn't really matter in what direction
- 28:05and then a guy gets hit by that and you
- 28:07kind of buy it but with a thing like a
- 28:09bow if you aim pick up the bow aiming
- 28:11one way and release it and then the
- 28:12arrow fires that way like it looks it
- 28:14looks really weird but if we have a
- 28:16three-dimensional bow then that solves
- 28:18that quite easily
- 28:19another more extreme example of that is
- 28:22of course the spears which we've done
- 28:24with a separate sprite for the spear
- 28:26itself so we can aim it in different
- 28:28direction with the spear is like it's
- 28:30even more difficult than a boat because
- 28:32the bow is kind of like a gun you just
- 28:33need to aim it and shoot it but a spear
- 28:35has to have a lot of weight to it to she
- 28:38like aiming it in one direction and then
- 28:39if the unit comes from another direction
- 28:42you don't want it just twitching around
- 28:43with this pew you want to keep it in one
- 28:44direction you want to point in the right
- 28:46direction before you hit and keep
- 28:48pointing about the direction afterwards
- 28:49stuff like that so that's why the spear
- 28:51is a separate thing but not the sword
- 28:54this approached units comes with one
- 28:56very interesting limitations is I
- 28:58haven't actually figured out how to do
- 28:59good looking axis in the game which
- 29:02might sound like a word thing if you're
- 29:03making a very Viking themed game like
- 29:05you might want axes in there but I and a
- 29:07lot of people have said that I've tried
- 29:09several times but it's been really hard
- 29:10making good looking axes work because if
- 29:15you just put them into the sprite like I
- 29:17do with the swords they it becomes super
- 29:19obvious that all the accents in the game
- 29:21are either pointing that way or that way
- 29:23and you really see them flipping around
- 29:26you could do it in 3d possibly probably
- 29:28but then like when you animate things
- 29:31that are three-dimensional you need to
- 29:33put a lot more work into them looking
- 29:36nice and feeling weighty
- 29:37than when you do two-dimensional things
- 29:38so it's possible that an axe could work
- 29:41like possibly with a big enemy like a
- 29:44boss character something like that could
- 29:46possibly have a 3d axe he drags around
- 29:47and does some animations with then it
- 29:49could be more gimmicky or stuff like
- 29:50that but they're very like axis for
- 29:52regular units has been it has been very
- 29:54hard so we've just skipped it we do have
- 29:55axe throwers though but that's easier
- 29:57because then the axes just throw flying
- 29:59in the air yeah another thing that kind
- 30:05of ties into this abstraction idea as
- 30:07well is that since the game is kind of
- 30:10zoomed out most of the most of the kind
- 30:14of animation or how the game feels when
- 30:17it moves doesn't really come from the
- 30:20animation of the individual units it
- 30:22much more comes from the behavior of the
- 30:25group and how they like from writing the
- 30:27AI I feel like I'm doing more animation
- 30:29when I'm writing the AI than when I'm
- 30:30actually animating the sprites because
- 30:33it's much more important like how they
- 30:35react to each other when they back off
- 30:36when they move forward how they like
- 30:38flow around when they walk around stuff
- 30:40like that
- 30:41then like how the arms moving or how the
- 30:44legs moving stuff like that because
- 30:46because the game is so zoomed out I
- 30:48think I think that's an a good takeaway
- 30:51in general that when you do animations
- 30:53for a game it's usually much like you
- 30:56can make great-looking animations but if
- 30:57you don't put a lot of work in to claim
- 30:58the right animation at the right time I
- 31:00like moving around in the right way it's
- 31:02probably not gonna look good so it's
- 31:03probably better to have that good
- 31:05looking good
- 31:06movement then good-looking animations is
- 31:08probably more important to have
- 31:09good-looking animations than
- 31:10good-looking characters in that order
- 31:19yeah so those are kind of some of the
- 31:23basic ideas going on here
- 31:26additionally the yeah the the water the
- 31:29way I've done the water here is it's a
- 31:32fairly basic it's I get a lot of
- 31:34questions about it but it's really
- 31:35simple it's just like a mesh here that
- 31:38place this sort of looping wavy shader
- 31:40all over again it's pretty simple shader
- 31:42and it also ties into the idea of
- 31:46expressing things in borders and not in
- 31:48like textures not in field so the what
- 31:51most of the water is just completely
- 31:52flat but then at the edge when something
- 31:55meets the water I highlight that instead
- 31:59so I don't need to tell you like over
- 32:01and over its water its water its water
- 32:03its water its water it's more like where
- 32:05these two materials meet there's a
- 32:07coastline that's it and I thought we're
- 32:10gonna try and actually get some enemies
- 32:15in here see if that works
- 32:19I think it did work see what the game
- 32:22looks like more like in motion and how I
- 32:26don't know if this is gonna be a
- 32:27difficult level or an easy level and see
- 32:31more of there's also of course this yeah
- 32:32I mean and you get very much this
- 32:34symmetry idea to with like when the game
- 32:36actually starts playing so you have this
- 32:37like quite isolated level in the middle
- 32:40is usually kind of tall in the middle
- 32:42and then flatter towards the sides and
- 32:44you have the enemies coming in from the
- 32:45side yeah you see them trying to burn my
- 32:55house down okay this might actually be a
- 32:58very difficult level down house there
- 33:00and it also ties into the the order and
- 33:03chaos kind of thing where your units are
- 33:05like restricted to moving in grid units
- 33:09and defending yeah working in grid units
- 33:12whereas the enemies they just flow
- 33:14through freely and they your units are
- 33:16just standing standing on their grid
- 33:18squares where the enemies like coming
- 33:19from all over the place
- 33:20with like ships angled in all kinds of
- 33:22direction stuff like that the houses
- 33:24you're defending they are all kind of
- 33:27aligned to the grid whereas the enemy
- 33:30ships are like pointing in all kinds of
- 33:32different directions and of course as
- 33:34you keep playing the game the the island
- 33:36turns from this like quite orderly
- 33:38quaint looking nice
- 33:42yeah idyllic Island to this very messy
- 33:46bloody chaotic place so even if you win
- 33:48the game it still it still looks quite
- 33:50tragic it looks like like you won but
- 33:53you know it was still a pretty horrible
- 33:54battle and a lot of your units died and
- 33:56so it's been so it's been quite
- 33:59important this for me to like leave the
- 34:02corpses and bloody the level as you keep
- 34:04playing the game also as a way of
- 34:05environmental storytelling okay I think
- 34:10I'm going to lose this game I didn't pay
- 34:12attention really also a lot of the
- 34:16abilities in the game try to write so
- 34:19these units here are probably going to
- 34:21die pretty fast but the the abilities
- 34:24also I tried to make them look quite
- 34:26orderly so they feel like you regain
- 34:28control for a moment so they're like
- 34:31trying to hold the ground there but if I
- 34:33send them there they get to do this very
- 34:36sort of okay now it was just one guy
- 34:38doing it but they get to do like a very
- 34:39synchronized motion together where they
- 34:42are also involve also you're like in
- 34:43control for a little while until it all
- 34:45falls apart again yeah I'm definitely
- 34:49going to lose this
- 34:54yeah there you go yes so those are kind
- 35:00of the things I had them prepared we can
- 35:04just take a look at a few more Islands
- 35:07and I would be happy to take some
- 35:09questions from the audience and since
- 35:12I'm in unity you can all ask all kinds
- 35:13of things and I can like poke around and
- 35:15answer thanks if you if you want to are
- 35:28the islands on the world map
- 35:29pre-generated for that map and then they
- 35:32look the same with a procedural
- 35:34generation in 3d or is it just sort of
- 35:36abstract in the map and then whatever
- 35:39they look like no they look the right
- 35:40way on the map so you can you can
- 35:42definitely see especially if you've
- 35:43played the game for a bit or made the
- 35:45game you can like you see this really
- 35:46weird thing going on here if we enter
- 35:49that level we will definitely like we
- 35:51will see that shape here right so know
- 35:54that they're correctly they look the
- 35:56right way the way we do it is we Ghent
- 35:58like we have this cloud which also has
- 36:02changed look now in the campaign screen
- 36:05here you see right so this also again
- 36:09place into the like the border is quite
- 36:10detailed but then the this is quite flat
- 36:13so these are like the behind this are
- 36:16levels you haven't discovered yet of
- 36:17course you know you've played the game
- 36:18but we generate like we try and generate
- 36:21ahead of the so like the next levels
- 36:23will have been gotten generated now and
- 36:25when we generate the level we take us
- 36:28like a snapshot of it from above baked
- 36:30that down into a texture that we also
- 36:33then save to the same file so whenever
- 36:35you start up and you start up or load a
- 36:38game it has to generate all the levels
- 36:39again but if it has already generated
- 36:41them once then it'll they already know
- 36:44what they look like and they also know
- 36:45they also have a seed that will work
- 36:47with the generation so actually we will
- 36:49be pushing fairly soon and update to
- 36:51what some of the tiles look like and a
- 36:53few new tiles so then if you load an old
- 36:56save you'll see some of the islands
- 36:57changing shape on the world map as they
- 36:59load
- 37:09hi
- 37:10so the the island smoothing effect is
- 37:14that the verdict are you pushing the
- 37:16verticals around or is it the shader
- 37:18effect I am pushing the so the thing I
- 37:21did now with a slider that's something I
- 37:23prepared yesterday so I am actually
- 37:25encode like when I because I am merging
- 37:27all the islands into one yeah into one
- 37:33mesh and then I'm looping through the
- 37:35looping through the vertices and all
- 37:36pushing them the same way but it's not
- 37:38enough to just push the the mesh itself
- 37:41because there are all kinds of other
- 37:42things that tie into as well right when
- 37:44I run the grass placing algorithm for
- 37:46example that has to run on the same like
- 37:48slightly modified world and then the
- 37:50navmesh of will the grass runs on the
- 37:52navmesh but the navmesh too has to be
- 37:54modified in the same way as the island
- 37:57so here I just did like I do that but
- 38:00then I also saved the offset so I could
- 38:02then in a shader like reapply there the
- 38:04old offset but yeah sorry I'm taking
- 38:08another question are you using this both
- 38:10in that mesh or your own no though I
- 38:11built my own it's it's even like you can
- 38:14actually see if you look at the
- 38:16different like the green part here in
- 38:20the meshes that's actually the nav mesh
- 38:23so I build that in like I build the nav
- 38:25mesh pieces in Maya just like I would
- 38:27build the regular mesh then I asked when
- 38:30it's already built when it's built the
- 38:32level it takes all the navmesh pieces
- 38:33and type together and build a nav mesh
- 38:34out of that actually writing the nav
- 38:36mesh is really fun and I can recommend
- 38:38writing your own nav mission it's much
- 38:39more fun than you even think it is a lot
- 38:41of very very small math problems how
- 38:47much work in precision has to go into
- 38:50making each like module to make them fit
- 38:53together yet to make them victor yeah
- 38:54good question so there is some there's
- 38:58different ways you could do this but the
- 38:59way I do this is I from side I generate
- 39:02a hash value from like the positions of
- 39:05the edge but then I round them somewhat
- 39:07so it doesn't have to be perfect
- 39:10precision but since it's a rounding
- 39:12thing like if I end up if I have two
- 39:14things that are almost exactly the same
- 39:16but they just happen to be on opposite
- 39:18like sides of the rounding then they
- 39:21won't fit together so that especially in
- 39:25the beginning it was a little bit of a
- 39:27hassle but now I have a if you just do
- 39:29the work right in Maya and you just like
- 39:31if I build a new piece I copy a bunch of
- 39:33old pieces that have the right sides and
- 39:35then I keep those edges right and then
- 39:37tie it together and then it's actually
- 39:39very easy but you have to keep that in
- 39:41mind and that's also why it's so
- 39:42important that I have this like
- 39:45visualizer here right so I can if I've
- 39:48if I build some new interesting pieces I
- 39:50can actually make sure that like yeah it
- 39:52fits together with the old things like
- 39:54it's supposed to yep if you want to get
- 39:59into procedural generation where should
- 40:01one start good question
- 40:04well the so I showed in actually the
- 40:08algorithm that built the thing in the
- 40:11middle here that's a pretty good place
- 40:12to start
- 40:13it's called well this one's 3d so it's
- 40:16called marching cubes but the 2d version
- 40:19is called marching squares it's just
- 40:21like it's a very simple algorithm to
- 40:22place tiles on a grid or in a voxel
- 40:26space it's very easy to understand and
- 40:30very easy to start working that's not
- 40:31the algorithm I use in bad north though
- 40:33the pieces look very similar I'm not
- 40:40have seen wrong but when you show the
- 40:42this scene and you see the island it
- 40:46looks like you flipped the island as you
- 40:48get that reflection effect yeah water
- 40:50yeah is that done entirely in in shaders
- 40:55it's actually a model underneath the
- 40:56water I mean it is like it would be the
- 40:59same which way I would have done it but
- 41:01it is it is a model and well it's both
- 41:04actually it's because I whenever I
- 41:07create like some things are marked up
- 41:08that they're supposed to have an outline
- 41:09or outline or they're supposed to have a
- 41:11mirror and then if they're supposed to
- 41:13have a mirror that I just like create
- 41:15another instance of that game object
- 41:16that has the mirror and then I in the
- 41:18shader it then flips that upside down as
- 41:22well like flipping it is obviously quite
- 41:23easy but it also does some things too
- 41:25like it simplifies a lot of the it just
- 41:27it runs the same shader but there's a
- 41:30lot of places where it skipped some
- 41:31stuff
- 41:31that aren't needed when it does the
- 41:33mirror and of course it applies like an
- 41:35almost uniform color to it as well but
- 41:39you're correct in that it is a flipped
- 41:40foot mesh um hi so you may call the
- 41:51model components and you do all of the
- 41:52coding as well would you consider
- 41:54yourself a coder who does art or an
- 41:57artist who does coder very much an
- 42:00artist that does code because I come
- 42:02very much from an art background and I
- 42:03don't really do much code outside of
- 42:05code that in the end will produce some
- 42:07kind of art but I'm pretty far down the
- 42:09rabbit hole now so yeah hey awesome by
- 42:21the way it was super interesting and I
- 42:23know there are a lot of students here so
- 42:25I'm gonna ask the very helpful student
- 42:28question what's your workflow and can
- 42:32you think like everyday work day and
- 42:35contribute yeah sure
- 42:37so like as I said we work in a very
- 42:40small team I start the day with well I
- 42:45don't start the day like but when I've
- 42:46been up for like three hours I do a call
- 42:51with my colleague Richard who's just
- 42:53woken up and then we yeah we do a
- 42:56stand-up meeting that's fairly this
- 42:59first standard I've done that in all
- 43:01places I've been at so like just go
- 43:03through like what did we do yesterday
- 43:04what are we doing today are there any
- 43:06news stuff like that then the rest of
- 43:09the day like as I said I work from home
- 43:11so I have a pretty free schedule it
- 43:15really depends it can be very very
- 43:17different I like some some days I spend
- 43:19the entire day in visual studio writing
- 43:21code sometimes I do a lot of art things
- 43:23it's it's pretty much all over the place
- 43:24yeah it's very something that's like a
- 43:27lot of people ask me working from home
- 43:29is it hard to be disciplined but it's
- 43:31more the opposite it's very hard to get
- 43:32away from the computer
- 43:33like I I usually sleep quite badly
- 43:36because I like go straight from the
- 43:38computer to bed which is a very very bad
- 43:40idea don't do that
- 43:45to follow up on that that you're working
- 43:47from home do you have a need like
- 43:49techniques to stay working yeah
- 43:53don't have any other hobbies than work
- 44:01no but that's that's basically true like
- 44:03I haven't really played any video video
- 44:05games for a long time which I probably
- 44:06should do but it was a long time ago so
- 44:08played a video game and all my other
- 44:10hobbies required like friends or
- 44:12physical activity so I can't do them all
- 44:14the day anyway so when I'm at home
- 44:16that's like the only thing I get like
- 44:17when I'm done with my choice that's the
- 44:19only thing I can do do you do you in
- 44:27your team have a specific goal for the
- 44:29game other than just making a successful
- 44:31successful game that creates brenigan
- 44:34I mean yeah from for me it was very like
- 44:40for me it was very much also just
- 44:43designing a whole the game is very much
- 44:46just designed around what I think is fun
- 44:48to do and that's been I think that's a
- 44:51good especially if you're a very small
- 44:52team I think that's a very good approach
- 44:54to because to have so because it's very
- 44:57easy to especially when you're
- 44:58discussing something with someone else
- 45:00to fall into things that seem
- 45:01objectively defensible which would be
- 45:03like yeah how do we make more money or
- 45:05if you have like idealistic goals that
- 45:07could also be a thing but it's harder to
- 45:08defend like no I want to do it this way
- 45:10I think it's more fun to do that kind of
- 45:12work but I think it's very important
- 45:14because if it's fun to do the work
- 45:15you'll do it better you'll do more of it
- 45:17and like you won't be stressed out and
- 45:19you'll you'll like it more so that's
- 45:21been a very that's been a very big part
- 45:22of bad North trying to just design a
- 45:25game around the kind of things I enjoy
- 45:27doing yeah yeah hi I haven't played the
- 45:34game but I'm just assuming here that for
- 45:37each island that you get to get an
- 45:39increasingly harder that my question is
- 45:41then is the procedural generation of
- 45:44every island like does the island
- 45:47geometry like get more difficult and how
- 45:50I'll have you like program that in that
- 45:52that you just tell the like the
- 45:55algorithm to generate a harder level for
- 45:57me like how does that actually work yeah
- 46:01so no we don't do any of that we just
- 46:03make them bigger because that's that's
- 46:06easy but no it's quite it's quite an
- 46:09abstract concept to figure out what
- 46:11makes it because the shape of the island
- 46:13does matter a lot for how difficult the
- 46:15art especially especially depending on
- 46:16your play style and what your loadout is
- 46:19like are you playing a lot with archers
- 46:21or with Spears or whatever but there's
- 46:25those things are quite abstract and
- 46:28they're quite hard to put it like first
- 46:29of all I don't know if we have we have a
- 46:31great grasp on that and even if we did
- 46:32it's not obvious how you would evaluate
- 46:35that like if you give an island like how
- 46:37do you break that down and evaluate a
- 46:39level and give it a difficulty score and
- 46:42Eve then if we did that we would also
- 46:44then have to figure out okay but how do
- 46:46we then generate an island that tries to
- 46:49achieve a certain level of difficulty
- 46:51like that's quite an abstract and
- 46:53difficult problem which like sounds
- 46:54super interesting but we've just not
- 46:56done any of it we do we do I mean we
- 46:58just switch up also so that like the
- 46:59earlier islands are less complex they
- 47:02use I mean of course because they're
- 47:03smaller but they also use fewer modules
- 47:06I have some modules that are like marked
- 47:08up so because they're themed right so
- 47:10you get some themes throughout the game
- 47:11that we keep switching up as well also
- 47:13like a way to yeah keep breaking up the
- 47:16pattern so yeah we have these I mean I
- 47:20think we've seen some we've seen some
- 47:23caves a level we played first had caves
- 47:25also here's like some some ruin style
- 47:27things with like some walls and stuff
- 47:29like that those kind of things they
- 47:31break up the gameplay a little bit
- 47:32because like the caves or you need to
- 47:34keep track of all the different weird
- 47:35paths the units can take yeah but it's
- 47:39mostly as an aesthetical thing yeah so
- 47:45we vary the difficulty just by sending
- 47:47more enemies and then hope that the
- 47:49randomness from what the ways the level
- 47:51looks aren't like too far out of bounds
- 47:53was there any conscious reason why you
- 47:56choose to develop the game in unity
- 47:58instead of another engine I don't know
- 48:02if I would call it a conscious reason
- 48:04but I've like I've been doing pretty
- 48:06projects in unity as well I quite like
- 48:08it I think unity is a very good way to
- 48:11get into coding that's how I got into
- 48:14coding because it or my understand I
- 48:19haven't worked much in unreal like I've
- 48:21done some student projects in unreal but
- 48:22my understanding is that the this sort
- 48:25of the border between what you do in
- 48:27sort of normal engine tools and what
- 48:29you're doing code is moved quite far
- 48:31ahead in unreal like and it's quite a
- 48:33different space on the other hand you do
- 48:35have the very like powerful blueprint in
- 48:38their scripting system which like is
- 48:39great but it's not as good as writing in
- 48:41c-sharp like you can't do ask like you
- 48:43can do a lot of things but you can't do
- 48:44as much especially not for the same
- 48:46performance right but then in an unreal
- 48:50you would then instead go the extra step
- 48:52after that and start rewriting the the
- 48:54source code in C++ which is like a
- 48:56bigger threshold so it's like it's
- 48:58similar thresholds but they're moved in
- 49:00quite different places and to meet it
- 49:02for my current expertise it fit me very
- 49:04well to write the code in C sharp which
- 49:07is like a fairly easy language to learn
- 49:14Hey
- 49:16so you posted on Twitter a lot of your
- 49:19progress and how you did things and was
- 49:22that part of your marketing strategy
- 49:24because it definitely got me hooked and
- 49:26made me buy the game so if it was it
- 49:29worked
- 49:30yeah I mean I mean it obviously it
- 49:33obviously was but I I didn't post on
- 49:36Twitter because I wanted to do marketing
- 49:38it's more like I posted on Twitter and
- 49:40that's also marketing because that's
- 49:42especially I really like showing things
- 49:46I do but I think I come up with
- 49:47something clever I want to show people
- 49:49and especially since I work from home I
- 49:51don't have colleagues well I can show
- 49:52Richard but I don't have that many
- 49:54colleagues to show so then I can post it
- 49:56on Twitter and show people there instead
- 49:57which is very nice when he's very it's
- 50:00very encouraging to although all the
- 50:02positive feedback you get and I find
- 50:04also a common pattern in my workflow is
- 50:07that I do something and then I sit
- 50:09around tweaking it for too long but then
- 50:11as soon as I make a gif and post it on
- 50:14Twitter then I'm done with it and then I
- 50:16move on to the next thing
- 50:26yeah
- 50:27so how what's the transition from
- 50:31working in yourself to becoming an indie
- 50:34developer and how can you use that
- 50:36experience use the Ubisoft experience
- 50:39yes yeah good question I mean it's a
- 50:43very big difference the biggest and
- 50:46nicest difference is that there's just
- 50:47less time spend in meetings because
- 50:50that's quite like you can be however low
- 50:52level you want you're still going to
- 50:53spend like a significant amount of your
- 50:55work within meetings in a big company
- 50:57like that and obviously it's way less
- 50:59trust like the turnaround times for
- 51:01everything is much quicker and obviously
- 51:04I don't have to like I can take the
- 51:06decision straight away I don't have to
- 51:08wait for a chain of command so that's
- 51:10much nicer but I do think I benefited a
- 51:12lot from it because I got to meet so
- 51:16many like talented senior people work
- 51:20like there's just such a huge reservoir
- 51:21of expertise in such a big company so
- 51:24many people to learn with you get to sit
- 51:26next to someone who's like been in the
- 51:27industry for 15 years and learn all
- 51:29kinds of things from them for me was I
- 51:31feel like it was a really good place to
- 51:33get started it also very good thing to
- 51:35have in your CV and like if this indie
- 51:37thing fails which it does for many
- 51:38people yeah but I enjoy it this way more
- 51:48so it was mentioned earlier just before
- 51:52the last question about your posting on
- 51:54your progress with that North on Twitter
- 51:57have you considered like setting up like
- 52:01I'm part of your website or something
- 52:03like just an overview of the progress
- 52:05and how each thing has been done or
- 52:09would that be like I don't know no I
- 52:14mean I haven't thought about that
- 52:15specifically I've thought a lot about
- 52:16like would it be good to gather some of
- 52:19these things into more than just like
- 52:21tweets I could keep sending over maybe
- 52:23it would be that's also probably a lot
- 52:26of work probably not I mean I don't know
- 52:29I'm thinking I'm thinking about like
- 52:31probably not for about north but I've
- 52:33been thinking about after this I'm not
- 52:35sure I will but I might do some other
- 52:36more just demo projects like the the
- 52:40house and the planet thing and doing it
- 52:42in a way where I consciously think that
- 52:45I will make like I will tutorial I some
- 52:47aspects of this I would like like maybe
- 52:51make sure the the code is quite clean so
- 52:53I'd be happy to share it if I would have
- 52:55to in the future stuff like that so not
- 52:57probably not with bad north but but but
- 52:59I do I do like explaining things and
- 53:01show us things off but it's also it's
- 53:02also a lot of work those kind of things
- 53:04so yeah maybe something in the future
- 53:18so I had one question about a solution
- 53:22true the exes but what a solution about
- 53:26the axes yeah because I don't know if
- 53:30it's about the how you've planned the
- 53:32aesthetic of I'm bad north but would it
- 53:35be blasphemy to put in double-sided axes
- 53:37yes okay all right I think I might be
- 54:02deep into the the dark zone of what
- 54:04you're want to say and I have to keep
- 54:09quiet but have you thought about what
- 54:11would be the problem of why people would
- 54:14stop playing your game and what solution
- 54:17would that be oh sure yeah I mean people
- 54:22would stop playing it probably because
- 54:23there should probably be a little bit
- 54:25more content in it
- 54:27we should probably wanted to put way
- 54:28more like items and abilities in there
- 54:30that we just hadn't had the time to make
- 54:32it's probably coming for in Compton like
- 54:33we have a big content up but we have all
- 54:36this on Twitch okay whatever
- 54:38we have a
- 54:39we're gonna do some content update and
- 54:42then we'll hopefully put in somewhere
- 54:43those things
- 54:44so that's one big thing obviously it's
- 54:48also there's a little bit of a
- 54:50disconnect between which I don't find
- 54:51problematic myself but there's a little
- 54:53bit of a disconnect between the game
- 54:54looks quite sort of cute but it is quite
- 54:57hard actually it is very easy to get
- 54:59into and learn the controls but it does
- 55:01get quite difficult and there's
- 55:03permadeath in it right so there are like
- 55:05definitely some people who get dragged
- 55:07into the dragged into it for the
- 55:11cuteness and then also find all this is
- 55:13strategy game that's actually quite fun
- 55:14with strategy but then like it does get
- 55:16quite difficult and quite punishing and
- 55:17some people definitely get surprised and
- 55:20maybe put off by that after a bit yeah
- 55:26all right I think we'll leave it at that
- 55:29yeah thank you very much
- 55:30[Applause]
About this transcript
This page contains the full transcript of Konsoll 2018: Oskar Stålberg - Developing The Bad North Look by Konsoll, generated from the public captions YouTube serves with the video. The transcript has 10,311 words across 1,396 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.
What you can do with it
Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to translate the transcript into 100+ languages.
Free YouTube transcript tool
YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, translation to 100+ languages, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.