—    —  Home

   JLJac on January 08, 2016, 01:48:50 PM:

@Joh, thank you! The game is actually firmly 2D, the depth aspect is just about the level textures having a bit of depth encoded that the shaders use to make things look less flat, but it's all just textures. The creatures are flat and composed of stretching, rotating sprites and flat triangle meshes - the sense of shifting angles is just some little mathematical tricks that are fairly simple, ie move eyes towards the left of the head if a "flip" value decreases, etc.

Safari mode has been considered! I'm into the idea, but don't quite know where to put it in the game. Maybe as a part of the "sandbox" mode. Also you can make the game track an AI creature in a region as it goes about its business, which is pretty fun!

@Christian, yeah, it's sort of a biggie! The scavengers can carry 4 items, so they will always be better armed than you even if you got the ability to carry two spears, which is kind of the idea. They were made to out-slugcat the slugcat, so to speak. Their advantage is still only in terms of physical abilities though - the AI will never get anywhere close to a human player. Also they don't see through walls, which is your special superpower as a master of the elusive third dimension.

When the scavengers have decided to kill something and they have access to spears they can be pretty horrifying, but it's not 100% certain they're the most dangerous creature of the game. The ranged attack is kind of unique and very dangerous, but daddy long legs can still be VERY difficult with their grabby tentacles, and vultures can fly which these guys can't. So a scavenger hellbent on killing you (which you likely won't see much of in the game) might end up being the most dangerous critter of the fauna, but definitely not by a margin. Mostly they're unnerving because they're similar to you, which was exactly the idea Smiley

No other creatures than the slugcat will be playable. The locomotion is intimately connected to the AI, so it's not easy to just turn the AI off and hook it up to an input.





   JLJac on January 09, 2016, 04:09:53 PM:

Update 508

More work on aggressive behavior.

Because of their ranged attack this creature has one part of its aggressive behavior that is different from all the other rain world creatures - they don't want to get to their victim, they want to get to a position from where they have a clear shot at their victim. It might not sound like a big difference - if you get to your victim you'll also have a clear shot, after all. But there are several situations where these priorities inform very different behavior.

Imagine the garbage valley of yesterday's gif, for example. A vulture is in the middle of the valley, slowly moving upwards with a scavenger in its jaws - the rest of the pack spread out on the slopes around it. If they were to path TO the vulture, they'd all gravitate to the closest spot they can get to - ie the bottom of the valley. That's how it was set up yesterday, and of course it looked stupid. The sensible course of action is climbing up the sides of the valley until you are in a position to start hurling stuff at the vulture.



Another example - a creature has climbed to the top of a pole. You're standing below another pole to the side of it. If you path to the creature, you'll run on the floor to the other pole, then climb up it and end up colliding with the other creature which might be cool if you're a lizard that wants to attack with your teeth. A scavenger however should climb up the other pole and throw a spear at the target.

This is the system I worked with today. As with almost all of my "where in the room to go" systems I base it around a function that can rate an arbitrary tile on a scale for how "fit" that tile is. Once I have that, I can fall back on different ways of picking a random tile in the room (sometimes just a pure random pick) and ask a simple question, "is this tile more fit than the one that is my current destination?". If so, I switch - and the next frame the current destination will be that new, slightly fitter tile, giving a slightly higher bar for the future random picks to get over.

One reason why this is cool, is that you can mix methods of finding test tiles. If they are all compared by the same metric, the comparing will always be valid even if they were found by different means. In this scavenger spear throw behavior for example, I mix a purely random tile selection with a horizontal ray trace from the target's position that stops when reaching a scavenger accessible tile. That latter method is most often returning the better tiles (it makes sense that you want to be on the same height as the target, but on the next platform off) but because purely random tiles are also occasionally thrown in the mix you might get a surprising decision now and then, and stalemates when the conventional method of finding destinations isn't working for one reason or another can be broken.

Another way I have of making the behaviors mix up a little bit, seem more organic and get stuck less is to simply save the previous destinations in a list and give tiles close to those a lower rating. That means that the creature can go back to the same spot if the incentive is very strong, but it has a little bit of a bias to try different stuff.

And then of course I have a conservative bias on all of these, so that the destination I have currently decided on is a bit more attractive than whatever I'm comparing to. This is to avoid flicker - it's almost always better to stick to a plan for a little bit than to change your mind every frame and end up vibrating on the spot.

Giving the attack behavior a bit of a social component was not much trouble - I employed a similar technique as with the yellow lizards.



By rating destinations closer to the pack members' destinations lower, I can naturally have them spread out a bit. In order to avoid flicker ("oh, you want to go here, then I'll go over here", "oh, you changed your mind, then let me also change my mind" ... etc) they mostly take the destinations of individuals that are more dominant than themselves into account - meaning that the team leader will go in for the kill pretty much as if alone with the target, and the others will play more supportive roles spreading out and covering the flanks.

You might be able to see this ranked hunting behavior in the gif, where the individual I suspect to be the group leader (brown, pink eyes, slightly beefier build. I base this assumption on cosmetic treats that should correlate with dominance, but can't know for sure.) is the one that takes the obvious route, and that dark grey orange-eyed individual switches to another route when it understands that it's competing with the leader. Two other more submissive individuals guard a corner of the map and take a more obscure flank respectively. This might very well be me projecting though, no way to know for sure as didn't write their dominance values in the debugging info when recording, sorry! People's tendency to project order onto utter nonsense is the life blood of this project though  Grin

Apart from all this aggressive behavior stuff, I have started working on making their behavior dynamic. They are able to change their behavior towards other creatures depending on context - for example a vulture or a lizard with its jaws occupied by another poor creature is considered less dangerous as it can't bite, and one that is carrying a pack member might actually turn into a target for aggression rather than a threat to flee from depending on the individual's aggression, bravery or sympathy stats. The logic there being that if you are extraordinarily un-aggressive you won't use violence, if you're cowardly you won't take the risk of a rescue mission, and if you're terribly unsympathetic you just won't care about your friend being hauled off.

I'm very much aware that these individual personality traits probably never will become evident to the player, but it only takes me a few seconds to add a personality check for triggering some behaviors, and it's cool to know that it's in there!

Puh, long update! See you guys tomorrow!





   jamesprimate on January 09, 2016, 05:45:05 PM:

Really loving these regular updates again. And AI continues to sound amazing. I'd love to play a 3D Splinter Cell-style stealth game with dynamic contextual AI like that

In the most recent alpha I've played (E3 build), lizards are deathly afraid of vultures. But given the social and aggression aspects of the AI now, will yellow lizards attack a vulture that's carrying away a pack member? Or in general, would lizards try to kill an injured vulture?

we were just talking about this actually! vultures are going to get some polish work pretty soon, and in that the lizard/vulture relationship stuff will get some serious attention. after lizards theyre the most common predator, so we want to have them to be comparably dynamic with the rest of ecosystem





   JLJac on January 10, 2016, 03:03:11 PM:

Not needed, they all max out by default!

Update 509

New plant species for the Sky Islands refurbish.



These guys took me an entire day, no joke  Tired So don't know if there's going to be much other large plants like this in the game. Not entirely counting it out though, the art is pretty important to the general game experience.

They come in a few different parts that are assembled in the level editor, making for a pretty big number of variations. Also the highlights and shadows on them rendered by the editor rather than statically drawn into the asset, so they can be rotated and flipped without looking off with regards to the light source.

Excited to see how James is going to use them!





   jamesprimate on January 10, 2016, 05:57:51 PM:

revisiting sky islands for polish. structurally it needs a lot, but daaaang the bar is set high for visuals. like im supposed to be improving on this?






   JLJac on January 11, 2016, 01:50:51 PM:

Thank you  Smiley

Update 510

In the morning I did a little bit of additional art, but in the afternoon I got back to scavengers.

First, a little wind up animation for the scavengers' throwing:



Doubt that it will make it easier really, but it does delay the throw just a tiny bit. Also it looks a bit better. When the body gets a throw command from the AI, it enters the wind up animation. The next throw command that comes in (if a few frames have passed) will fire the projectile, otherwise it will eventually put the weapon down.

Also, their tendency to rapidly withdraw and re-throw spears is pretty brutal  Evil

I also implemented scavenger hearing:



This is more close to where we actually want the creature to go. Fleeing and fighting are very necessary skills in Rain World so they had to be implemented, but the character of this creature is going to be more cautious, curious, communicative.

In the gif you can see how the scavenger hears me jumping around and decides to go check it out. The yellow meter on the utility comparer is curiosity for unresolved sounds - as you can see it's capped pretty low, meaning that urges to fight or flee etc will basically always take precedence, but if the scavenger has nothing do it might decide to go check a strange noise out.

With most of the base behaviors done, I have also started looking on their behavior in abstract space, ie how they move on the world map. I think I will go for something similar as the miros bird, which hang out in an abstract room that can never be entered by the player until there's a little gang of them, and then together go out on a raid. The scavengers will probably appear in loser packs though, and occasionally alone.





   jamesprimate on January 11, 2016, 07:32:05 PM:

good catch actually! yeah i agree





   JLJac on January 11, 2016, 11:24:58 PM:

@chris, #scavengers looking at spears: Yeah, sounds reasonable. Currently the picking up of spears is a sub behavior of the attack behavior, meaning that the focal point is still considered the attack target - but something could probably be done to make them momentarily turn their head towards the item in question just before picking it up.

#spears appearing out of no-where: Actually that one spear which seems to magically appear was on the ground but unluckily ended up perfectly vertical hidden by that pole. The scavenger picks it up and it looks as if appearing in its hand. Sort of an unlucky coincidence in this particular recording, I'd say that the chance of a spear being perfectly vertical and behind a pole is <1%. When the scavengers actually carry spears, you can see them attached to their bodies or their hands.

Not that you need my Kudos, but the potential of this project, and the quality of this devlog, leaves me almost literally breathless. The visuals. Just, look at the visuals. You crated a few of the best looking procedural animations I've EVER seen and the overall results is that these creatures are just beyond words. They look so alive and genuine, you swear they are real animals, well, not real animals, real... something. Real something with definitely a soul, and burning intentions, and the unmistakable spark of conscious life. You reached past the point where one looks and wonders *how* you did that, over the zone where one just looks in demented amazement. You obviously did it by magic. Either that or a stupendous sequence of like one absurdly lucky inspiration / tremendously appropriate choice after the other, for like 500+ consecutive, blessed steps. I'll go for magic.

Thank you! That really means a lot. Knowing that people are this excited keeps me going. There is no magic involved, just a pragmatic art-oriented approach combined with years of hard work... If you go back to the first pages of this devlog you can see the evolution of the project yourself!





   JLJac on January 11, 2016, 11:29:38 PM:

Why would it drop to the lower pole rather than climb across, which would be more direct? Scared, being cautious?

If we're to get real here, probably because it hadn't initiated the investigation behavior at that point and initiated a path to some location where it wanted to idle for a bit, but then heard one more sound and changed its mind to go check it out. But please keep projecting, the human brain's tendency to read intent into nonsense is what makes all of this work  Cheesy





   JLJac on January 12, 2016, 03:04:47 PM:

Update 511

Long day of working with scavengers movement in abstract space, and in particular between abstract space and realized space. Fought a million issues with them getting stuck, disappearing, becoming a strange ghost scavenger that's just sitting in the room which you can't collide with, etc etc etc. Managed to solve most of it.

They now form little squads, and set out into the world. The squads are kind of loose - they're not a swarm like the bats. But if you encounter one, you can generally be pretty sure that there are a few more not so far away. The squads also occasionally move on the world map, migrating from one room to another. That's pretty fun to see, if you lie behind some garbage pile and suddenly see this little caravan of strange looking fellas pop up and go through the room, on their way to some unknown destination. It would be really cool if I managed to fine tune it so that you could secretly follow them.

I also made it so that they generally spawn with a few spears already on them. Getting the objects to realize properly when they entered real space was trouuuuuuble, but it looks like it's working and I'm not the one to question that by probing too deep.

The current problem is that if they pop up more than 5 or so in a room, they get into a cycle where they want to investigate each others' movement sounds and get stuck in a big goofy pile. That sort of problem is more cute than horrifying though, compared to the technical nightmares of abstraction/realization problems, so I'm not worrying about that one. Will take care of it tomorrow!





   JLJac on January 13, 2016, 02:38:58 PM:

Update 512

Another day of unglamorous hard work. The scavengers are by far the most advanced creature when it comes to AI - every parameter has to be accounted for. They're in packs, they use and manage items, they migrate through the abstract world in a complicated way... Getting there though. Today I tiered their aggressive behavior and got a good chunk of their player interactions done. I already have a hostile behavior and a friendly one. What's missing is the in-between, where they're acting cautious but not necessarily antagonistic towards you. Soon I think I will be at the point where just some additional touch ups are needed, and then we're good to move on.





   jamesprimate on January 14, 2016, 06:51:07 AM:

oh! those are called Miros birds, after the paintings of Joan Miro











   JLJac on January 14, 2016, 02:11:53 PM:

Update 513

How to approach a pack of scavengers - Don't:



Do:
 


They now have some basic ability to interpret player behavior and react to it. If you're cool they will also play it cool - if you antagonize them they'll respond in kind. In that first gif they go into a behavior where they're threatening me (they're pointing spears at me, but that animation might need a little work to bring the spear out of the body's silhouette), and by not moving I show that I've given up. If I would've continued jumping around harassing them they would probably have given me a spear to the gut.

Their behavior is not always the same - it's influenced by their personality stats, the group, and the group leader. As the group leader has an influence on all the others, coming across a squad with an unsympathetic or aggressive leader might end up worse than one which has a nice chieftain.

They each track an individual relationship to you, and there also exists a number which is sort of your general reputation among the scavengers. If you commit violence against them or throw spears in their general direction they will start disliking you - the specific individuals that saw you do it at first, but down the line all scavengers you come across. On the other hand, if you save the life of a scavenger they'll start liking you more - especially that particular individual. If they're very fond of you you can hang out as one of the pack.

Animation still a little wonky, as you can see. I'm working on it. The general behaviors are pretty much done though. One problem I have is that when you spawn them in the world with other creatures, they seldom venture very far as they get scared/into combat with different creatures they encounter and retreat. Don't quite know what to do about that - maybe just making them a bit less concerned about nearby vultures etc might be a good idea. Also giving them random idle positions that are further out in the room as they enter it might make them a bit more prominent.





   JLJac on January 15, 2016, 01:36:15 PM:

Update 514

More work on scavengers, of course. Some general behavior brush up, making them work better in the world etc. As I talked about yesterday, they tended to get quite scattered in the world, I've taken some measures against that by having them group up a bit more effectively. Also the problem where they perpetually fled back home was fixed - not by making them less afraid of everything which made their behavior really stupid, but just denying them exiting the world for a certain number of frames after being spawned. That leaves them to figure out what else to do, and interesting interactions can arise. They tend to save each other when in a pinch, and I've seen them take down a lizard. Never a vulture though "in the wild", only in a small test environment with those specific creatures spawned.

And a million other tiny things. Quite a lot of animation stuff actually, but pretty subtle. Some small reactions to stuff in the world, in an attempt to give them more "soul" and make them feel less like robots - stuff like a very slight vibration through the body upon hearing a sound, etc.

The most fun stuff is probably their new ability to point. If one of them spots a creature (you or vultures etc) that they're uncomfortable with, it can check what its team mates are up to - if they haven't noticed it they'll enter the point behavior. When a scavenger is pointing, all the others first look at it, then in the direction its hand/spear is pointed. They will have to actually see the target themselves though, it's not that the data is just copied AI to AI or something like that - so it should theoretically be possible to lie hidden and then reveal yourself to just one of them which freaks out and tries to tell its friends - all of whom don't see anything and don't believe it.

Animation-wise this might be a bit subtle to pick up, but the technical aspect is also important. In explanation I wasn't only after the cosmetic look, but also the actual behavior where if one of them spots you, the whole group will soon spot you as well. Seemed to make more sense than having one of them flee in panic or getting ready to fight or something while its pal is all mellow going through some trash.

In this gif you can see it if you look closely at the purple-eyed one. The ones up on the hill spot me and point at me, and then the purple eyed one looks first right then left.



You might have to look at it a few times to pick it up. Sorry about letting the recording run, I just found it very funny with this particular scav chieftain's utter and complete lack of chill >__<





   JLJac on January 15, 2016, 02:56:46 PM:

Hahaha!  Cheesy



"Get any closer and we'll kill you!"
...
"Upon closer consideration we'll actually take this back. Good day sir."





   JLJac on January 16, 2016, 03:03:30 AM:

They usually don't go so crazy with the spears - usually they just wave them around threateningly, and throw the occasional one above your head if you get too obnoxious. This particular one though, hahaha! I think it was the combination of an extremely big aggression stat, very low sympathy stat and on top of that being the leader of a squad of five or whatever - all of that got to its head Smiley





   JLJac on January 18, 2016, 09:17:04 AM:

Anyone knows anything about a "ud->stream->GetAudioClip()" error when trying to call AudioSource.Play(); ?

Strangely the sounds still seem to play, I just get that weird message spammed in my console. I can't really debug it because it seems to happen in Unity's guts rather than in my code - attaching monodevelop and hoping for a break on error doesn't work, and I can't try{} catch{} it either.





   JLJac on January 18, 2016, 10:08:22 AM:

Hm, seemed to have happened when I was unloading a texture for some odd reason. The only thing I can imagine is that the texture's appointed memory location was slightly incorrect and overlapped a little bit with one of the loaded audio files in one spot or another - but that's pure speculation  Huh? Anyway, textures loading and unloading is within my realm so now I can find a workaround!  Hand Thumbs Up Right





   JLJac on January 18, 2016, 12:48:59 PM:

Update 515

It's going to get a little bit dry here for a bit now. I'm going into a phase of trying to get some base game mechanics down that we never had time for during the creature/region rush. So I'm returning to save states, menus, that sort of stuff.

Today I split the application into different Main Loops, such as menu, sleep screen and the game itself. Now I'm working with each of them - going for the sleep screen first as that is what will later tie into the save states and inter-cycle progression. Parts of that is already in place, but needs some serious tying together.

As compensation for the boring, here's a palette and shader I made for new Sky Islands, of which this is a little sneak peak. James sent me the finished region the other day and it's looking sooooo pretty. This here is a sky islands interior, ie when crawling inside one of the old structures - the exteriors are contrary sun-bathed and very bright.






   jamesprimate on January 19, 2016, 05:32:50 AM (Last Edit: January 19, 2016, 05:53:52 AM):

great pics! exactly the sort of inspiration in my mood board! the question about human architectural signifiers is a good one, something that joar and i have talked about at length numerous times over the course of development, and our ideas on it have evolved quite a bit over the years. (i even did a talk about it for the harvard graduate school of design last year!)

as you correctly assume from the name, Suburban and some of the earlier regions were initially intended to be more overtly understandable as the remains of some previous civilizations dwellings (what is currently "Heavy Industrial" was originally "Dense Urban", which was going to explore a Kowloon Walled City type environment), but for a number of reasons we opted for a more vague approach.

first and foremost is that we wanted to create a world as seen through the eyes of something slightly below human intelligence. the slugcat is smart enough to recognize that there is probably some purpose to the structures around it, but not comprehend their meaning. same with the use of "language", letters and characters, etc. the idea is to create a kind of dreamlike atmosphere where the player projects meaning into the structures they see, creating their own expectations about what they might be for and where they might lead, and we play with resolving those expectations quite a bit in the region / world map layout.

similarly, we wanted any specifics about the previous cultures of rain world to remain vague. the player might assume "human" by default, but thats not necessarily the case and we dont want to feed into that reading too much. whats important is that they were there, they built these structures, and now theyre gone.

also important is that the slugcat operates among the in-between spaces of these industrial ruins, like a rat in the subway or a squirrel on a rooftop. you'll sometimes see those overtly designed I.M. Pei vistas, where the structures seem to line up in some grand plan, but most of the time its a ditch filled with garbage and a pipe sticking out, or the crumbling basement of a building. so even if it werent some fantasy alien world we were working in, i think we'd still keep the overtly human signifiers to a minimum.