Ava Skoog

LD 43

Bitbucket heads up!

Heads up if you're using Bitbucket and haven't made sure that your stuff won't stop working tomorrow mid-jam:

https://bitbucket.org/blog/deprecating-tlsv1-tlsv1-1-2018-12-01?fbclid=IwAR2Rc45lz0QHSi5-5KQCnCTBvkuamMo0T05HIGBmB4_gqgZTjsRNrGAgA

Half time!

Just got around to getting some belated lunch at 15:30 so it's time for a little break. Here's what I have so far after half a day! 💃

ld43_halvtid1.gif

Since the jam started at 03:00 for me I just kept on sleeping till 08:00 and then took until 11:00 to come up with an idea and flesh it out before I finally opened Unity, so I've been at it for about 4.5 hours so far. c:

I'm making a dialogue-heavy game this time. Don't do those very often! The game is about something as arcane as orchestrating your own murder! 💀

To the right you can see the tools I've been setting up to create a cast of characters as varied as possible with as little work as possible. Working on adding hairstyles/hats too. 🎩

Dinner time!

Another break. Might as well post again, since I've gotten some more proper art in place and finally just got conversations and dialogue trees working! 🎉

ld43_samtale.gif

Good night!

It's 22:00 and I'd rather get up early tomorrow than stay up late tonight. Usually works out best that way.

Finally got my dialogue trees and a quick bodgejob of a custom conversation editor in place! 💃 Still a mess but better anything is better than the default inspector for this kind of spaghetti since I'll be spending a lot of time crafting conversations!

💤

ld43_samtalebygging.gif

Top o' the mornin'!

Time to start building the tiled world with UV trickery!

Skjermbilde 2018-12-02 kl. 09.16.10-kopi.png

Skjermbilde 2018-12-02 kl. 09.16.33-kopi.png

Walkie-talkie!

Now you can actually move around and start up individual conversations! 💬

ld43_portrett2.gif

14th jam in a row!

How is this possible‽ 😱 Thanks for another amazing event! Had as much fun as always! 🎉


You can play my newest entry here 👇

https://ldjam.com/events/ludum-dare/43/f-o-u-r

Can you orchestrate your own murder? 💀


ldemkollasje/em43-litn.png

As you can see the graphics took a bit of a hit this time compared to many of the previous entries, but for my LD43 game I wanted to cram in as much narrative and content as possible, so sacrifices had to be made! 😎

F.O.U.R. | Minimalistic methods [part 1]

Yo! Occasionally I will do a post-jam writeup on technical stuff that went into the making of my LD game.

For my last few jams I've been focussing a bit more heavily on graphical fidelity than I did this time, as you can see below, but that doesn't mean there aren't things to be said about the kind of approach I went for this time either! c:

kollasje-50p.png

You can play my LD43 entry F.O.U.R. here!


Single texture

One thing that helps a lot when going for graphics as simple as this is just making one texture used by all assets in the game, just moving the UV's around. It can do wonders for speeding up both the game and the content creation, which was vital for me this time, as I wanted to cram in as much narrative and puzzly content as possible for the detective story of this entry, which forced me to downplay the graphics this time.

Here's the texture used by everything in the game world (but not UI):

tex.png

As you can see I ended up not even using the last three rows on the grid!


Tiling the world

So what's a good way to speed up your content creation by using just one texture? Building the world using the grid-based texture like a tileset!

This is the entire map of the game:

kart-800-2.png

Everything that rises off the ground (houses, vegetation et cetera) is a separate model, but the ground itself was just modelled as a plane subdivided into a grid and when I was done designing the layout of the time I just removed the superfluous tiles!

Here's a WIP screenshot from Blender:

blender-kart-wip.png

All I did was unwrap each square separately and move it around on the UV map, holding the control key to easily snap it to the desired tile. Rotating UV's as necessary allowed me to keep the needed number of road tiles low. The road tiles are twice the size of the other tiles which meant sometimes scaling the UV's by exactly 0.5 or 2, but Blender makes that sort of stuff very easy. c:


Materials

Using just one texture meant that every object in the game was able to share the same material, and everything static was set up for batched rendering on top of that, making the whole thing incredibly cheap. The one exception were the house rooves, which needed to be able to fade out and so use a transparent version of the material instead:

itchgif3.gif


Next

That's it for this post! Next post will be about setting up the code and assets for easily churning out unique characters since I needed quite a few of those in the game. Thanks for your time! c:

F.O.U.R. | Minimalistic methods [part 2]

Howdy! Yesterday I posted part one of a series of indeterminate length about technical aspects of my LD43 entry. Today we move on to part two! 💃

For my last few jams I've been focussing a bit more heavily on graphical fidelity than I did this time, as you can see below, but that doesn't mean there aren't things to be said about the kind of approach I went for this time either! c:

kollasje-50p.png

You can play my LD43 entry F.O.U.R. here!


Character variation

Since F.O.U.R. was going to be a kind of narrative (but also puzzly!) detective story I needed a cast of characters to interact with in the little town where the game takes place.

This is where the simple cubic art style for the game was first decided upon, as I figured it would save a lot of time to have all the characters consist of feature-poor building blocks, LEGO style!


Concept

I did my initial sketch on paper:

DtVUJeIXcAICq-F.jpg

Thus there were five segments to vary: hair/hat, head, eyes, torso and legs. This was quickly modelled up in Blender and a script was set up in Unity for selecting different colours, models or dimensions, depending on the segment:

ld43_haar.gif


Implementation

If you read part one, this all comes back to that one grid-based texture used for everything in the game. A reminder:

tex.png

I added a numeric property to the shader (the one used by all of the 3D objects in the game!) to offset the horizontal UV position on a per-instance basis that allowed me to move the UV's of a segment along the x axis on the texture to a different colour on the grid. This made it easy as pie to vary character colours by changing the values exposed in the inspector by the script! 🥧

The property at the top of the shader:

_OffsetX ("Tex x offset", Range(0, 7)) = 0.0

Since the grid on the texture is divided into 8x8 squares, I limited the property to that range. Then I simply applied the offset when sampling the texture:

tex2D(_MainTex, IN.uv_MainTex + fixed2(_OffsetX / 8.0, 0.0))

Since this time I didn't do anything too fancy with custom shaders otherwise, this is just a default Unity surface shader, so the names of the sampler and other variables retain their default names.

Finally in the C# script I just updated this property in each renderer's material based on the values set for each segment:

``` mrendHead .material.SetFloat("OffsetX", (float)mcharacter.colHead); mrendTop .material.SetFloat("OffsetX", (float)mcharacter.colTop); mrendBottom.material.SetFloat("OffsetX", (float)m_character.colBottom);

if (null != mrendHair) mrendHair.material.SetFloat("OffsetX", (float)mcharacter.colHair); ```

Since bald characters were an option, the hair/hat had to be checked first. All of these colour variables were unsigned integers in the range of possible colours, which were not necessarily eight for each segment; skin colour could be one of the three first squares on the first line of the texture; leg colours one of the three on the second line; hair and torso colour any of the eight on the third line. As is clear from looking at the texture, the eyes had their own spot on the texture.


Details

Speaking of those eyes, I made it so that characters will blink in their 3D conversation portraits just to make them more dynamic!

blink.gif

I did this simply by animating the scale programmatically at random intervals and again by moving the UV's so that the eyes would turn completely black in the blink state.

This also added a level of detail to the larger portraits, since I made the eyes invisible on the characters in the actual game world since I thought that looked better. With the exception of the main character, since the eyes help the player see what direction the character is facing (whereas all NPC's are always facing the camera)!


Next

We'll probably talk about those very 3D portraits in more detail next time. Thanks for reading! c:

F.O.U.R. | Minimalistic methods [part 3]

Hello! A while ago I posted part one and part two of a series about technical aspects of my LD43 entry. Today we move on to the third and final part! 👀

For my last few jams I've been focussing a bit more heavily on graphical fidelity than I did this time, as you can see below, but that doesn't mean there aren't things to be said about the kind of approach I went for this time either! c:

kollasje-50p.png

You can play my LD43 entry F.O.U.R. here!

Would love it if you did, since I need some 7 more ratings. 😨


Dynamic 3D dialogue portraits

I ended the last part by showing you a GIF of the face closeups of characters that the game displays when talking to someone. Today we will be looking closer at those!

blink.gif


Render textures and layers

As you can see, the camera slowly and ever so slightly pans around the little 3D render, and the character blinks occasionally. This is a complete 3D render from a secondary camera that can only see the character that the player is currently talking to, and nothing else. It can also see the character's eyes, which aren't visible when the characters are rendered at a much smaller scale in the actual game world, but it is in fact the very same instance!


Camera setup

I made this game in Unity, so here are the relevant settings for the camera component of the secondary camera I added to the scene:

portkam-kopi.png

The clear colour's alpha is set to zero so that the resulting texture has a completely transparent background. At the bottom you can see the render texture that I've assigned to it, to make it render into that texture instead of to screen. This is the setup for that asset:

rendtex-kopi.png

If we go back to the settings for the camera, we also need to look closer at that "mixed" culling mask…

portcull-kopi.png

As you can see, I've created special layers for portrait rendering; things on the Portrait layer will only get rendered to the portrait camera (e.g. the eyes) while things on the PortraitAndWorld layer (the rest of the character) will also get rendered to the main camera viewing the game world.

Normally the eyes are on the layer DefaultPortrait and the rest of the character on Default, but when a conversation is entered with a character, its renderers get moved to the corresponding portrait layers, so that they are the only things the portrait camera see (so that we don't accidentally get another character visible in frame if they're standing too close).

Finally when the player starts talking to a character, the portrait camera is moved to where they are.


UI setup

Actually showing the character on screen is done through the canvas where the rest of the dialogue UI (the text box and so on) lives

hierarki.png

For this, I'm simply using a "raw image" component that is set to display the render texture from earlier that the camera renders into. This is then positioned and sized as desired.

raa.png

As a detail, to match the rest of the UI where every element has that drop shadow that you can see in the images at the top of this post, I duplicated the raw image, moved it by the same amount as all the other drop shadows, tinted it completely black and decreased the alpha to match the other shadows, and put that behind the regular image!

skygge.png


That's it!

Thanks for reading! And playing and rating, if you did, or will. This has been another fantastic LD! ❤️

Puzzly macOS/web games, please!

Hey! About a day and a half left. Surrounding Christmas I've had little time to play other games or promote my own, so I would love to make up for that as well as I can before it's over! c:

I'm about five ratings short, so would be great to have some people play mine and I'll play yours, but I'm on a Mac, so I thought I'd specify that since it will be messy for me jumping back and forth if your games are Windows only. And since mine is a puzzly detective story, it would be fun to play puzzly games from other people too! 💃

You can play my game F.O.U.R. here! (web/macOS/Linux/Windows)

ld43-kopi.png

F.O.U.R. | Dialogue tree system

Hello! During the voting period I posted part one, part two and part three of a series about technical aspects of my LD43 entry. I said in the third entry that it would be the last one, but I'd forgotten to write about something quite substantial, so here goes..! 😨

This is a screenshot of the game, F.O.U.R., and if you still want to play it post ratings, here it is~

ld43-kopi.png


Dialogue system

Whew!! I'd written so much about graphical solutions that I'd completely forgotten that I spent a bunch of time on my dialogue system, including a custom Unity editor to create the conversations. Surely that ought to be interesting too. Perhaps even more so!

Here's what the dialogue system looks like in action:

itchgif3.gif

As you can see it offers multiple choices sometimes. I did end up discovering a bug near the end that I didn't have time to fix that limited me to quite shallow dialogue trees, but luckily I didn't need more for this game. Would certainly have fixed it if I'd had more time, tho!


Basic design

Might seem weird, but the first thing I did was to find a font I liked, since I knew for a game of this scope and time limit I'd have to make sure manually that the text would fit in each box rather than program a system that would spread dialogues over multiple boxes automatically, so I wanted the font face and text size in place right from the get-go in order not to have to fix anything later in case a different font than the one I started with would take up more space in the boxes.

I ended up going for the (100% free—that's important!) font Caviar Dreams by Lauren Thompson, since it had this overall elegance to it, while still mixing it up a bit with the funky lowercase e, as you can see in the screenshots above~


Programmatic design

In the end the dialogue system ended up a bit hacky and messy since I didn't have too much time to do it properly and only did what was necessary to fit the game. By coding up a custom inspector/editor in Unity for the conversations (which were implemented as serialisable objects) I was able to hide any unnecessary implementation details and prevent myself from making any mistakes.

To give you an overall idea, here is the default Unity inspector of the type on the left versus the custom one on the right:

editor75.png

I spent almost an entire day of the jam on this altogether, but in the end I think it was worth it, since apart from the aforementioned bug, I was then able to add new conversations very easily where necessary.

As you perhaps can see, the structure is recursive and allows for nested multiple choice branches, altho I never did end up doing much with that since the narrative didn't end up demanding it, in part because I just didn't have time for anything so advanced—I was running out of time as it was! ⏰


Simplification

Originally I tried to design the system so that it was possible for dialogues to branch back out to where they came from at the end of a subtree and continue from there, implementing this complex system of conversations as a stack that had to be pushed and popped to. In the end I got rid of this and made all conversations just recurse deeper and deeper and end at the final node instead, which saved me a lot of headaches and did the job just fine!


That's it?

I don't know. I didn't exactly go deep here. You probably didn't learn anything, haha. But just to give you a basic idea (perhaps of what not to do, at least!) in case you're thinking about doing something similar for your next jam. 😗

Thanks for peeking!

LD 44

Third and first person camera tutorial

I forgot to post about it here at the time, but since I often like to do technical write-ups on my jam entries, and LD is all about giving back to the community, I thought I should drop it here too! c:

https://forums.tigsource.com/index.php?topic=66735.0

It's a tutorial I wrote recently on implementing a basic controllable and collision-detecting third person camera for 3D games, as well as addenda about controlling the character relative to the angle of the camera and about slapping on a first person mode as well, in case it might serve to help someone just figuring this out for the first time, just like I had been before compiling what I learnt into this tutorial~

aoemfps/em3ps_2.gif

Hope I'm in!

I've had quite the streak, so despite moving to a new place this LD weekend, I really don't want to break it now, and I hope I'll be able to at least make something small even if I only get one day instead of three to work on it!

ldemkollasje/em43-litn.png

48h jam entry: Dovregubben

I did it!

promo2-kopi.png

https://ldjam.com/events/ludum-dare/44/dovregubben

Can you evade the troll for long enough for the sun to rise and turn it to stone before you perish, and can you afford risking your life by plunging downhill to get ahead of this foe?

2-kopi.png

I usually do three day jams, but I was moving to a new home this weekend and missed the first day—still happy I got something together!

1x3-kopi.png

Ludum Dare 45

End of day 2!

Leaving you with this at the end of day two. There are more systems and stuff in place, but that's for you to discover when you play. Gonna spend another 24 hours on it first, tho. Good luck to everyone! <3

ld45_karanim.gif

Day 3 halftime!

Finally got my main mechanic all animated and nice! I'm feeling very emotional right now. 😊😢😠

ld45_allekjenslene.gif

GO GO GO

Got all my big mechanics in place! Now I just need to add the final contents and sound. Three hours! I can do it!!

ld45_genetikk.gif

JAM ENTRY:

That's the title of the game I just submitted! 💃

🕹👉 https://ldjam.com/events/ludum-dare/45/emoji

pres.gif