—  Home

   JLJac on March 24, 2012, 12:44:52 PM (Last Edit: May 13, 2017, 12:09:58 PM):



Out and available on playstation and steam!



                                                                                       Rain World is a survival platformer set in an abandoned industrial environment ravaged by a shattered ecosystem.

Bone-crushingly intense rains pound the surface, making life as we know it almost impossible. The creatures in this world hibernate most of the time, but in the few brief dry periods they go out in search of food.

You are a nomadic slugcat, both predator and prey in this land. You must hunt enough food to survive another cycle of hibernation. Other — bigger — creatures have the same plan.
                                                                                       






The gameplay of Rain World consists of fast paced sneaking and action. The enemies are incredibly difficult (though not impossible) to defeat through direct confrontation. Instead of being easily killable they have been made intelligent enough to be interesting opponents in stealth situations.

Ironically an entity that is stupid enough can be difficult to outsmart. The goal of the Rain World enemies is the opposite of that, being smart enough to be outwitted. This is why a lot of the development has been put towards AI. It makes for interesting situations where you get to measure your wit against an enemy that it's actually satisfying to trick and deceive.

Apart from AI, I have had a lot of fun experimenting with procedural animation. The creatures of Rain World are not animated by traditional means, but rather consist of a few freely moving pieces that are interconnected and rendered as a soft body.


Alongside the game I've been working on a stand alone level editor, which uses a voxel-like method to create graphics. The levels are collages of hand-drawn elements, molded together by filters into one coherent graphic.


For the music and soundscape of Rain World, I have the excellent James to rely on.

If you find the project interesting, please feel free to ask, suggest, comment or otherwise contribute. For those of you who are interested in technical stuff, feel free to plough through the devlog! Below follows the original first devlog entry from 2012.

Thanks for your time!

Rain World is now Kickstarting!






Hi! Maze Runner is of course a working title.

A while ago I posted a movement prototype in the feedback section. Since then I have worked some more on the project, starting to turn it into a game.



I haven't started on the visuals yet, and the game will probably look very different from this screen shot, but the movement of the player will be mostly the same.

I decided to start a dev log to keep track of my progress and keep myself motivated. I work at the game at a low but steady pace, and will hopefully be able to post updates every so often.

The Game
Try out the prototype to get a feel for what kind of basic mechanics I'm working with. More on that to be found in the old thread. More moves are to be added, such as balancing on poles, maybe some gripping mechanics, stuff like that. The core of the game is the movement of the player character in the environment.

The game will have three types of creatures in it. I won't go in to detail on how I plan to design them visually, that's not entirely worked out yet and will hopefully be an exciting surprise. Together the creatures will form a little eco system, where creature B eats creature A and creature C eats creature B. B, the player, is in the middle of this food chain, and the gameplay will consist of trying to hunt while at the same time avoiding to be eaten.



A is a flying creature, that can move quickly and reach every part of the map.

B, let's call it "the Bear" because of its ears, is a running and jumping creature, with medium mobility and probably also access to most of the map, as maps will be designed mainly from this creature's perspective. This is the player avatar in the game world.

C, let's call it "the Croc" is a crawling, climbing creature that can't jump, and is somewhat less mobile than the bear. This one will come in a few sub-species, some of which will be capable of wall climbing, increasing access the different areas of the map. They will have different stats and abilities and be threatening in different ways.

The game will work with one or more players sitting at the same computer. I like 2D, single screen multiplayer games as they according to me have all the feats of a board game as well as those of a computer game. The players have complete overview of the play area, and can shout stuff at each other while interacting in the game world. However I felt that my last game lost a bit of its potential audience due to being multiplayer only, so this one will be playable alone as well. The players will be playing against the computer units, but some competive elements might be doable as well.

The level editor
I love level editors, and especially did when I was a kid and couldn't really make actual games myself. I've been doing some work on the level editor already, and it seems to be coming together nicely.



It's fun to make and play levels together with friends, and I've made the level editor so that two or more people will be able to work at the same level simultaneously.

What's going on right now?
AI, AI and more AI... path finding, to be specific.



To be even more specific, it's the path finding of unit C that's a hassle. Thing is, C is not supposed to be able to reverse. Unless it's really stuck it should move forward, trying to find a way that doesn't require moving backwards into its own body. As anyone who has worked with an A* knows the main thing is crossing out tiles, like "OK, this one is checked, now I don't have to think about it again". But, if this unit is moving to a target behind it, it has to start moving away from the target until it finds a turning place, and then move back over the same tiles towards its target.

This is difficult, especially as even a conventional A* can be a sort of complicated matter... And yeah, both the start and goal positions are constantly moving and I can't afford to calculate the entire path in one frame, so it has to be realtime... And different crocs have access to different tiles... This has been, and is, very very hard. However, I'm starting to see the light at the end of the tunnel, which is why I'm going online with this now. Hopefully from now on every single update won't be about croc path finding, as it would if I started two weeks ago.

The combination of giving the user access to a level editor and having autonomous units moving around in the environments is an interesting challange. I don't want the user to be required to place "flags" of any sort, you're supposed to be able to simply create a level and then have the units move around in it in a sensible way. Moving around without reversing, that is... Well, enough on that.

The development so far has been very technical, and will probably continue to be for a while, but I'm originally an art guy and I'm much looking forward to creating some juicy sounds and visuals for this.

I hope you find the project interesting, and am looking forward to your comments, suggestions and questions.
Thanks for your time!





   JLJac on March 25, 2012, 01:59:38 AM:

Thanks! I hope you'll like the final visuals even more!

Update 1
I have worked a little with the Croc's movement, the physics of its body. Earlier I've mainly been working with the path finding, now I'm moving over to how it will animate when following those paths. Cleaned up a few situations where it would get stuck, and made it so that if it is, for some reason, cornered in a dead end it will swallow its pride and slowly and awkwardly back out again. Also identified a... path finding error... -.- Will get to that later.

Another three hours or so I've spent struggling with the eldrich horrors of recording, trimming and cropping a little gameplay video.

This seems to be in the same category as printers, a seemingly menial task that for some unknown reason coheres with an undescribable, inherent blind spot in human engineering, making it about a bazillion times as difficult as it has to be. Nothing can ever, under any circumstances, just simply work... Well, I'm out of patience, maybe tomorrow there will be a vid.





   JLJac on March 25, 2012, 01:07:51 PM:

Haha! Yeah, the idea is that a food chain of three is the smallest possible where one unit can be both hunting and hunted, making for an interesting situation for the player. I could possibly make the other units playable as well, but, as you said, the gameplay as those would be more one-sided. Creature B can't really be computer controlled though, download the prototype to see for yourself why... Way too complicated movement for an AI to handle :O

I was also thinking about some plant or something for creature A... Stick around and we'll see what happens!

Update 2
Made the speed of the croc variable, across different sub-species and different terrains. For example, one could be a quick runner but a slow climber, while another one has other stats. Gravity now affects the croc, and its body has some substance so that the body parts won't collapse into themselves (as much). Path finding seems to be working nicely now, I haven't seen it getting stuck for a while. What needs work though is the behaviour when it's thinking about a path but doesn't have one yet, it should probably slow down while thinking stuff over instead of rushing around at random.





   JLJac on March 25, 2012, 10:43:37 PM:

Working on a video! Just that screen recording software is such a damn hassle ... Here's a horrible little video for you in the meantime: http://www.youtube.com/watch?v=FbAhRjsXBko&feature=youtu.be
(Silent, no need to pause your music!)

Jay Tholen, been thinking about stuff like that as well, such as a chain or ring on the wall that's grabable... Stuff like this is fairly easy and fun for me to add, so there'll likely be some more stuff like that in there eventually!

Thought I'd do a super quick overview on "no reverse path finding", if someone else would be in a similar situation. It's an overview of the genereal idea, not a step-by-step how-to, but if someone wants more detail I'll provide it!

So this is how most path finding works:



The red dot wants to get to the green dot. You start at the goal, and make a "bucket fill" outwards, and for every step you save how many steps that specific tile is from the green dot. Once you reach the red dot, it can follow the path by each frame moving to the neighbour with the lowest score. An A* is basically the same thing, but you check tiles that are in the right general direction first instead of spreading out equally in all directions, making for a more quickly found path in most situations. This is of course an entire field of science, and there's much to read on it out there.

In my situation, however, the red unit is not supposed to be able to move backwards. That's OK in most situations, but what if the goal is behind it? In some situations it might be able to "walk around the block" and reach the goal from behind, you could create such a solution by simply blocking the tile behind the red dot (treating it as a wall) and going at it with the conventional method. Eventually the spreading numbers would reach the tile directly in front of the red dot, and it would be able to make a lap around and get to the green dot.

If this is not possible, then? Say, for example, that the green dot is behind the red dot, and the red dot is facing a corridor that's later widening up enough for it to turn around. In this situation it should go forward, turn, and then pass over its old position again to reach the green dot. Tricky!

The trick is to divide every tile, one sub-tile for each direction. This means that a tile can have one value in one direction, and another in another direction, like this:



The red dot's start tile is very close to the goal if facing left (2 steps away) but very far from the goal if facing right (10 steps).

Look closely at the green numbers and you can see in what pattern they spread. According to this pattern every sub-tile will have a value that is one less than the tile it's pointing towards. That's because when the numbers spread to a new tile they spread to the subtile that's pointing backwads to where they spread from. If that makes any sense... Just look at the numbers ;P

When the red dot is in a specific tile it doesn't ask the neighbours for their values, instead it asks the sub-tiles. It does not, however, ask for the sub-tile that indicates a direction opposite to its own. This means it has three options every frame: forward, left or right, but not reverse. Then it just moves in the direction with the lowest value, exactly like the standard solution up there.

Voila, you have a behaviour where the path finding will intelligently either "walk around the block" or find its way to the closest turning point and back, depending on what's more efficient, shorter or otherwise preferable.

In my game this is meant to create some fun and interesting situations. One such might be that you jump over a croc, but the croc runs forward, climbs up on something, climbs out to directly above you, then drops down on you. Another scenario could be that the croc has momentum and can't stop, so it runs into a narrow corridor where it has to solve a little maze looking for a turning place or another way out, to get at you again.

Hopefully this will make the game play more interesting! Let me tell you, it has to be real good to be worth it... The example above is very theoretical, doing the same thing in a more "real" (complex, that is) environment has been... Try it out if you like a challenge!





   JLJac on March 27, 2012, 11:30:44 PM:

Glad I inspired you! It's a lot of fun to do path finding, as there's really nothing else that does as much for the feeling of AI units being autonomus and having their own minds. Ask me anything!

Update 3
Talking of path finding, I did a few lab tests today.

I created a floating island kind of structure, and had the croc try to path to it.



With the new dynamic abilities I've added I can change what a croc is able to do easily from its initiation code. A croc that's able to climb ceilings will, as expected, climb up the wall, then out above the island and drop down on it. A croc that's only able to climb walls will rush around desperately without ever finding a way, a behaviour I have to work with.

Actually this is going to be the next big step, I imagine. As a croc is able to drop down from somewhere it might easily get stuck in a hole. Also a croc might see a player across a gap, and the path finding will go on for ever and ever without realizing that there actually is no way across.

The task of making the croc aware of what's a "pit" where it will be stuck is almost impossible, as there's no way of saying "this is the level" and "this is a pit", all the code can find is two chunks of tiles from which you can pass from one to the other but not the other way around. You can of course say that the biggest chunk is "the level" while the rest is "dead ends" that should be avoided. This doesn't really apply to all situations though, look at the above picture for an example. The island structure might be smaller than the rest of the level, but it's more important, because more stuff is going on there. Here the majority of the level is a "pit" that you don't want to fall into.

The solution I imagine for this is that the crocs will live in holes. At start up the area that is accessable from the hole will be pre processed, and even more importantly, the areas from which you can't get back to the hole will be mapped out. The croc is only active in the area reachable from its hole.

This also allows the user of the level editor to place a croc, and decide what area of activity it'll have. For example you might want one that's confined to a pit at the bottom of the level and eats players that fall down.

More on that tomorrow!





   JLJac on March 28, 2012, 07:26:37 AM:

Yeah, was also thinking about that, but I think showing the reachable areas in the level editor would ruin the illusion that the croc is actually thinking by itself, if you saw it all laid out like that... We'll see...

Update 4
Made the user able to place croc holes in the level editor and made crocs spawn at those holes.

Made a humble little start in the direction of mapping which areas are accessable from a specific hole. The goal is that in this situation



the croc (here represented by the three big dots) will not pursue the player further, as if knowing that it'd just get trapped at the bottom of the pit. That goal is however not reached yet haha!

This is especially important because of the very different movement mechanics of the Bear and the Croc. It's not that the Bear is always much more mobile, a wall climbing Croc can often reach areas unaccessable to a Bear, but the ability to jump creates some situations where a Bear can pass an obstacle that's impossible for a Croc.

This means that some levels could easily contain traps, where you let a Croc chase you to a place from which you're able to get out, but it is not. This wouldn't be fun, as constantly being chased is an important part of the game. Tricking a croc should buy you some time while it's trying to figure out a new way to get to you, not immobilize it for ever. So I think it's worth it to make the Croc do a little extra thinking to avoid that kind of stuff.





   JLJac on March 28, 2012, 11:07:07 PM (Last Edit: March 28, 2012, 11:40:38 PM):

Weird, something seems to be wrong with tigsource's server... Anyway

Update 5
I'm happy with today's progress. I finished the mapping of accessable areas for the croc. The method is that I first map all the tiles that are reachable, then I map all the tiles that the hole is reachable from, and the overlap of those is the active area for that hole.



In this pic the blue areas are areas from which I can get home, while the red areas are areas I can get to from home. The platform at the top left is blue, because from here you can drop down to the rest of the map but there's no way to get there. The pit at the bottom of the map is red, because you can drop down here but not get back up again. Green areas are both reachable and returnable from, and it is this that's the croc's active area.

You can't really see the hole itself, but it's there in the middle structure. If I remove the climbable pole connecting the structure to the floor the entire floor becomes red, and the croc will keep only to the central structure, knowing that it won't be able to get home if it drops down.





   JLJac on March 29, 2012, 12:18:14 AM:

I will talk about something that's not path finding for a change.

As you might remember the Bear has two major modes of movement, standing up and crawling. I don't remember the exact numbers, but I think that you're almost twice as fast when running. The croc, as it stands, moves with a speed that's variable depending on terrain, but will move along a floor with the same speed as it would a horizontal tunnel. If the tiles directly above are a ceiling or open air doesn't affect it.

This means that right now this



is no problem what so ever, while this



is a HUGE problem. A branchless corridor is more or less a countdown to death.

I like it that the Croc is faster than you in some situations and slower in some, but it might be too extreme. I don't want the player to avoid tunnels entirely. If I make the croc slower over all it will be way too slow out in the open, if I make it faster it'll be way too fast in tunnels.

Currently I'm thinking about maybe making the croc able to stretch its legs when outside a tunnel, and gain a little extra speed to match the player's ability to stand up and run. Still, this would mean making the Croc closer to the Bear in terms of movement, and maybe it's a good thing that they have those differences... Hm... Maybe this is a question of level design, levels should simply be designed in a way that makes both the player and the croc stand a fair chance.

Another problem that arises is that if the Croc is vastly inferior on open floors but much faster in close quarters the AI should probably somehow be aware of this. How would that work?

A lot of decisions here. Maybe I'll just wait until the basic gameplay is up and working, and see what needs to be balanced.





   JLJac on March 29, 2012, 10:56:08 PM:

Update 6

Added the ability to balance on the tip of a pole.



There are two ways to access this mode, you can climb up a pole, and you can land on it from the air with a well timed key press. The Bear doesn't automatically land on poles, you have to press the "up" arrow at the exact right moment, making jumping between poles very difficult.

I like to add some stuff like this that's very hard to do but won't really be required in any level, so that players who have played for a long time will always have fresh challenges.





   JLJac on March 31, 2012, 10:01:30 AM:

Thank you sir  Gentleman

Update 7
Boring but important progress today: I managed to export a .png file.

This has implications though. If I would have to save the levels as text files I'd only be able to save the geometry of the level, and all the graphics would have to be generated on start up. When you start the level you can't really tolerate more than 5 seconds for the level to be drawn, and this would mean a pretty simple layout.

If the level can be saved as an image file however, its graphics can be generated from the level editor. After you've made an awsome level you can possibly endure to wait a minute or two for intricate stuff such as hundreds of grass straws and light and shadows to be rendered, to make it look extra juicy.

Being able to save levels as images enables me to make levels look much more complex. This stuff is far in the future, but it's nice to know as it helps me when thinking about the overall art direction for the game.





   JLJac on April 01, 2012, 12:02:50 AM (Last Edit: April 01, 2012, 04:36:03 AM):

Update 8
I have started working on the AI today. What I've done up until now is path finding, getting from one place to another, but there has to be an AI that makes decisions on what places it wants to get to.

I do not want the croc to be omniscient, it will have to see its prey to know where it is. This will add a slight element of sneaking to the game, you'll want to take routes where the crocs can't see you.

In order for a unit to be able to navigate without knowing where everything is, it has to be able to have an estimation of where things are. This means a little mental mirror of sorts, that will sometimes cohere with and sometimes deviate from the real world.

This is what I've been doing today. Each Croc has a list of where it thinks the players are. For each player it can have a few different ideas, simplified they could be boiled down to:

Visual contact - I know where this particular player is because I see him.
No Idea - I have no idea where this player is.
Memory - I remember the last place I saw this player.

This is the framework I've been working on today. If the Croc has a memory about where it last saw a player and returns to that place without spotting the player there the memory will be deleted, and it once again has "No Idea" about where that player is. It also keeps track of how long ago it saw a player, maybe a memory will be deleted after a while because it's very unlikely that the player would remain anywhere close to that spot. As of now the crocs can't act on this information, but I'll get to that later.

The idea behind this is that if a croc hunts player 1, and in the corner of its eye sees player 2, then if it later looses track of player 1 it will be able to return to that point where player 2 was spotted. I will probably have to create some behaviour for searching the surroundings of a place, so that if it returns to a place where it remembered a player being it doesn't just give up, but looks around the area a little first.

Different crocs will probably have different mental stats as well as physical, with adjustments to memory, patience and the like.





   JLJac on April 01, 2012, 11:23:10 PM:

Update 9
Quite a lot of progress today, all happening inside the croc's head. Some basic behaviours are up and running, such as searching, idling, hunting.

The one that has been hardest so far is the "investigate" behaviour, where a croc is given a tile and is supposed to check out its immediate surroundings. Currently I do this by sending out a few "scout" checkpoints from the main checkpoint, they travel only in tiles that are accessable to the croc and stop after a few steps. The Croc then proceeds to check out the main tile and the "scouts" surrounding it, after which it considers the area investigated.



The hunting behaviour needs a lot of work. Especially when the player dissapears around a corner the behaviour is too unintelligent, in situations where it's fairly easy to estimate where the player might have gone it should do so.





   JLJac on April 02, 2012, 11:09:17 PM:

Update 10
The AI is coming together, and is now actually playable against (Even though there still aren't any effects from a croc colliding with you). The behaviour is now considerably more competent when it comes to pursuing you, if you for example disappear around a corner it will make a little "simulation" of where you might've gone, and act according to that estimation. It's all very simple, but seems to be working fine.

As it stands the lizards mill about the level idly until they see a player. Then they start hunting, and if the loose track of the player during the hunt they'll look around the area where they last saw him. If the player was moving during the last visual contact they crocs will estimate where he might have ended up since then, and look around that place instead.

One fun thing is the effects of having different ways of calculating visual contact and path finding. This means that a Croc can see a Bear across a gap, but to get there it has to take a much longer way.



I like these situations because here you can see the intelligence at work, you know that it doesn't just charge towards close targets, but it's actually able to plan a long and complicated route to get to a place. I'll try to make a video some time soon.

In the situation in the picture the player would probably be nowhere near that same place once the Croc finally arrives, and it'll use the "investigate" behaviour of the above post to look around for a little while before giving up and roaming the map again. I'm pretty happy with how all this is coming together.

I have noticed a few situations where Crocs get stuck though, will have to work on that.





   JLJac on April 03, 2012, 11:02:48 PM (Last Edit: April 04, 2012, 12:57:29 AM):

Yeah, I hope you will be able to play with it in interesting ways. Right now you can do some stuff like dissapearing around several corners quickly, and watch how it gets confused and searches around for you, it's pretty fun.

Update 11
Made the croc aware of when it has reached... eh, like, the destination of an old path that it follows until the new path is calculated... well, I made the croc not turn around again and again on the same spot.

Also I kind of identified and fixed (?) a path finding error that I'm not really even able to formulate for myself... The code is too extensive and complicated for me to fully understand at this point, but it seems to be working OK. Seems like a tile can't be weighted more than a passage between tiles, but if this is an inherent feat in the A* mathematics or something I messed up is beyond me. As long as I keep it in mind it shouldn't be a problem.

Made variable speeds for the croc depending on what it's doing, so that it'll speed up when chasing you and slow down when just roaming around.

EDIT: Solution came to me in the shower. Implementing tomorrow!





   JLJac on April 04, 2012, 07:39:09 AM:

Just some of the sketches from when I tried to figure out the path finding



Don't want to think about how long this has taken me, but it might be several weeks... Soon I will let this rest and concentrate on other things!





   JLJac on April 04, 2012, 10:52:28 AM:

Update 12
Fixed some quirks and the above mentioned problem in the croc path finding. I pray this is the last time I write the words "croc path finding" in this dev log. Also improved the croc's estimation of where a player might have gone.

I didn't get around to write this as it was something that was finished before I started writing the log, but on the levels there are "short cuts", holes you can crawl into and be transported to another hole elsewhere on the map. This feature was included to make the levels less limited by being two dimensional, with a short cut it's possible to make a path that crosses another path without actually connecting to it, if you get what I mean. You can see the short cuts as the little white dots on the level editor screen shot in the original post, you probably already figured out what they where.

All three creatures in the game are able to use the short cuts, even though the A creature is very hesistant to enter one unless there's no other way around (it knows that a player might see it, and position himself at the exit for an easy kill). The croc path finding (DAMMIT!) has been able to handle those for a long time, and the crocs use them to transport themselves around the map. If a croc sees a player entering a short cut it doesn't simply follow him, but makes an independent estimation of what way is the quickest to get to the exit, through the short cut or by foot. If it's the latter an unpleasant surprise awaits you when you exit.

The AI creatures are assumed to be aware of the entire map lay out, it's only the players' position they don't know about unless there is visual contact.

Today's progress includes that if a croc doesn't explicitly see a player entering a short cut, but sees him dissapearing into a corridor that leads to a short cut, it will still be able to figure out what might have happened.





   JLJac on April 04, 2012, 11:38:35 PM:

Thank you. Even coming from someone with [/sarcasm] in their sig it means a lot to the crocs, they send their regards.

Update 13
I gotta say, today was a good day. Not because I was very productive, but because I tested stuff and it worked.

I made this crazy level:



and had two crocs plus four A-creatures run around on it, along with a player. Implemented that if a player touches an A-creature it dissapears and a score counter increases, no animations and no nothing, but still enough to start trying stuff out soon. It's a game!

The crocs adapt well to different environments. They are able to navigate a maze like this without looking too clueless, at least to me.

One thing I've started to notice about how the game turns out is that there is much more emphasis on not being seen by the crocs than I had anticipated. For some reason I imagined that the Crocs would know where you were pretty much most times, and the gameplay would be about hunting/fleeing. Unless I want the Crocs to see through walls this is not really possible though, if you're behind a wall you're behind a wall and the Croc shouldn't know your exact position.

The hunt/flee type of game play had a problem, if the croc would constantly be chasing the player I pretty much would have only two options: Either the croc is slower than the player, and will never ever pose any threat because it's unable to catch up. Or, the croc is faster than the player, and will catch up and kill you within a very limited time, no way to avoid it.

As it looks right now the game is leaning more towards a platformer/sneaker than an action platformer as I had originally planned. I have nothing against this, if that's the direction the project wants to go I'll allow it. I like the feeling that the crocs are physically superior to you, they outrun you easily, the only way to survive is to out smart them. This is a perspective I think is fairly rare in games. (Actually your only advantage to the crocs is your overview, if your vision was as limited as theirs you would be A-B-S-O-L-U-T-E-L-Y C-H-A-N-C-E-L-E-S-S, but it feels as if you're out smarting them!)

Ok, it'll be a long post today.

You see the little yellow things on the level editor screen shot? Those are hives. I felt that the C-creature had an objective, eating the B-creature, and the B-creature had an objective, eating the A-creature, but A was without any motivation. What would it do, just hang around one part of the map until it got chased to another part of the map? I wanted it to do something.

The hives are places where A-creatures spawn, and then during their life time they move around from one hive to another as if transporting something or what will you. This makes them motivated to go somewhere instead of just roaming by random. The behaviour looks a bit ant like, they have their paths between the hives where they move back and forth, until a player chases them and puts them off their course.



The idea is that they should be able to dive down into their hives and dissapear, so that the player has to ambush them on their routes instead.

Unlike the other creatures the A-creature will be respawned when killed, and therefore needs a logical respawning place instead of just popping up from nowhere.

The path finding seems to be more or less behind me and hopefully the pace will increase from here on! Soon I'll make a video or demo or something so you can see the stuff in motion.





   JLJac on April 06, 2012, 02:27:24 AM:

Update 14

It's becoming a game! All the creatures are in and behaving somewhat like what I want them to. I've been thinking about about the game rules, here's what I came up with:

1. Catch as many A-creatures as possible within a limited time.
2. Survive! No respawns.

The idea is that I want a basic mechanic that's the same for a multi player game and a single player game. The "high score" of a level will be the amount of A-creatures eaten within a certain time, and you can attempt to break these records, for some single player replay value.

Multi player: There is a timer, urging players to hunt rather than just sitting around in some corner. When a player dies he is not respawned, but the timer is halved, so that you won't have to sit around inactive for ever and ever. The gameplay is less interesting for all players when one is dead, but the surviving players should be given just a little extra time to gain an advantage and compete among each other. The amount of time I'm thinking about is two or three minutes, the multi player game mode should be fairly rapid-fire paced with new levels every so often. This is especially important as there are no respawns.

The players are ranked from how many A-creatures they managed to eat in their lifetime, but a surviving player is always ranked above a dead one. This means that there can be no situation where you benefit from committing suicide. If all players are dead the one with the most "eats" will be the match winner, but if there is one surviving player he will win, despite not having catched a thing. So, the priorities are: 1) Don't get eaten. 2) Eat as much as possible.

Single player: The basic mechanics are the same, but the winning condition for a single player level is 1) Being alive, 2) Having eaten a certain number of A-creatures. If you manage those the next level will unlock or however the campaign will be laid out. In the campaign there could also be levels where you're supposed to just get to an exit like any platformer, the high score of those will be how fast you got there.

Possibly there could be some kind of co-operative mode where two or more players play the single player campaign, and their score is added up and then divided by their numbers or something like that. We'll see what's reasonable.

I'm currently setting this framework up, and will soon try it. Some (most) things might be revised.

Yesterday I saved a version of the game and tried on another computer, seemed to work fine. The import of text files and export of .png files worked too, which was a huge relief.

The level editor will probably save a level as an image file, which will contain the level image as well as the level data, the latter coded into a block of different-colored pixels which will look like noise to the human eye. This is probably not the optimal way to do things, but it compresses the entire level into one file, which is nice.





   JLJac on April 06, 2012, 08:25:06 AM:

A video!
http://www.youtube.com/watch?v=Jnpocoxuzg0&feature=youtu.be
It's a horrible horrible cellphone video, but it shows what I wanted to show... Now you can probably tell where I'm from from my accent Smiley

Glad to get something up here that isn't just another wall of text, hope you'll find it interesting! If I have any readers left, that is...

In other news saving level data in a noisy square in an image seems to be working fine, which I'm rather happy about. Soon I'll move the level drawing code over to the level editor, and then I'm set to start working on the graphics.





   JLJac on April 06, 2012, 01:50:00 PM (Last Edit: April 06, 2012, 08:20:31 PM):

A sketch I made, just playing around.



Before you get excited/dissapointed, keep in mind that this is my very first pixels I ever draw for this game, it is much more likely that it will end up looking nothing like this than something like this. However, a first tiny step towards working on the visuals has been taken.

It's nice to have art in the dev log, now I might actually have read it myself!





   JLJac on April 07, 2012, 11:24:15 PM:

Update 15

Limited the lizard's angle of vision.



Since the main thing making the game easy already is the croc not knowing where you are, the limitation is more in terms of not being able to see backwards rather than only being able to see forwards. Anyways, this allows you to wait in a side tunnel for a lizard to crawl by, and then crawl out behind it and get away.

You see the little bulge of vision covering the tail? If the point that's tested is close enough the angle is not tested, to simulate some kind of spatial sense and so that the player can't crawl into its tail without being noticed.

In an open level like this a lizard in the right position can cover huge areas, and two of them can see pretty much the whole level.



I think this works well, because open areas are not the crocs' favourite environment to move in. This creates a balance - close quarters: they won't spot you, but if they do you're done for. Open spaces: they'll spot you, but you have a fair chance of getting away.





   JLJac on April 08, 2012, 12:45:54 PM (Last Edit: April 08, 2012, 12:52:42 PM):

Update 16
Gave the lizard hearing. To keep things simple and clear to the player the only thing that can cause a for the lizard hearable sound is landing on a floor after being airborne. If you make the tiniest possible jump by just tapping the button you'll make no sound at all. The variable of lizard hearing is how big the radius is within which it'll register this sound.

It doesn't know where you are, as when seeing you, and it doesn't know which player it heard. All the sound does is that if a croc is idling or snooping around and hears a sound it'll go to the place the sound came from to check it out. When chasing a known target it'll ignore sounds.

It is communicated to the player that a croc heard something in the way that it stops in its tracks for a second, as if listening. Once it eventually gets a head it will probably turn this towards the source of the sound as well.






   JLJac on April 09, 2012, 12:37:04 AM:

Update 17

Made the croc able to kill the player. Not eat, that's a matter of animation and will be attended to later, but magically kill on touch. The croc is now able to lash out to a close by player, making it impossible to jump over it on a floor.

As I mentioned the croc is already slower than you out on open floors, and that together with you being able to jump and it only being able to turn made it possible to jump over its head again and again for ever. The new mechanic means that you can't do that any more. You can still jump over it by using a wall though.



Almost all the mechanics I imagined for the game are in now, but there's a lot of number tweaking to do. However, I feel that I'm finally at the end of the huge chunk of this project that has been the croc AI, and hopefully no other part will take as much time. There will be a revisiting to this though, when I have a little less schoolwork to do so I can try the game out with a friend. I have no idea how the crocs handle multiple players, it could be just fine, it could be in need of some redesign.

It's too hard to cath the A-creatures, need to tweak that a bit. Another thing I was thinking of was that maybe the player shouldn't eat the creatures on touch, but rather just catch them, and then you have to go find a safe place to consume your prey. I like this idea, will have to see how it plays out in reality.

Been thinking a lot lately about how I will render levels. Have some kind of semi-voxel idea going on, more on that later. However, with level rendering comes art, and with art the devlog becomes interesting! Hopefully the daily five page essays on how a virtual lizard finds its way around a maze has finally come to an end... A brighter future awaits!





   JLJac on April 09, 2012, 01:35:39 AM:

Yeah, looking forward to drawing some more for this! Here's a little video showing some Croc path finding:
http://www.youtube.com/watch?v=sOzuv2QxyLo&feature=youtu.be

You see how it paces back forth a little bit at times? That's when the path is being calculated. I don't want it to be standing still during this process, because its speed will be a que to what behaviour it's engaged in. I prefer that it runs back an forth as in a bit of initial confusion, then suddenly realizes what path it'll take. Path finding speed is a stat, and some lizards may be slower than others.





   JLJac on April 09, 2012, 11:13:19 PM:

Update 18

Moved the level rendering code over to the level editor, and overhauled it completely. The system is now working in a semi-voxel kind of way, where one tile is 20*20*10 pixels. I also made the level editor able to save a level in the format that I think will be final. Didn't try loading yet though... The level seems to be very light, so I'm happy about that.

The voxel format allows me to do some interesting stuff such as fog and light...



This is just 20 minutes of coding to test it, but I like the potential it has. Because of the voxels I don't have to create separate solutions for everything, stuff sorts itself out automatically. If you look at the detail in the lower right corner maybe you can imagine what a hassle it would be to calculate how the shadows would look in every special case like this, now it just works by itself.

It's flawed, yes, I have noticed the stripy floors. Also it will demand some patience, rendering it pixel by pixel will take a minute or two for an entire level. But I see a lot of potential in it!






   JLJac on April 10, 2012, 10:52:06 AM:

Yeah, the creatures won't "take" or cast shadows, unless I want a framerate of... let's see... about one frame each 8 seconds Tongue

Thing is that the huge, complicated process of generating graphics for a level will have a slightly anticlimatic ending; one picture that's behind the game objects and one that's in front of them... But the process is still necessary, if those two pictures are to look good!





   JLJac on April 10, 2012, 11:54:55 AM:

Update 19
The level editor can now save a level, and the game can load it. What this means is that the limiting factor of how long a level can take to render is how long you're willing to wait after having made a level, not how long you're willing to wait when starting a game.

This makes testing stuff a slight bit more awkward for me, as I have to actually save a level first. That's why I waited until now to do it.

Soon I might actually get around to some art stuff.





   JLJac on April 11, 2012, 12:26:07 AM:

Update 20

Gah, most frustrating day ever... I've been struggling with the shadow renderer, and... that's pretty much it for today. This is what it looks like currently, flaws and all:



Right now the major problem is that objects don't self shadow, there's only cast shadows. The choice is between that and having the objects self-shadow even on the surfaces that should be lit...  Tired I have no idea how to solve this, but will probably come up with something...





   JLJac on April 11, 2012, 11:44:01 AM:

Update 20

Almost no progress what so ever... It turns out my code for raytracing the vision of the camera doesn't actually work. However something else (still unknown what) was obviously broken in a matching way, so the code gave me the right output anyway... Fine, up until I need to fix a problem and really have to understand the code. Then I realize it shouldn't work, but it kind of does, except from that problem I was trying to fix. If I fix the code so that it should work it doesn't work at all. So I settled for the broken code, with a dirty feeling of not having actually solved the problem.

With a horrible hack I managed to make it so that platforms are at least shaded on the underside. This is what it looks like now, with a thousand flake-thingies suspended in mid air to test the shadows.



There are some horrible bugs in there but hopefully it's mostly me who can see them. Right now - bye bye shadow code for a while, I'm painfully tired of this...

Tomorrow I will do something else.





   JLJac on April 11, 2012, 01:01:48 PM:

Gah I solved it... Went back to an old approach and solved it.



No one except me can spot the difference I guess, but the difference is that now the shadows are CORRECT! Rendering time is something like 7 minutes or something though... But that's OK with me... At least it WORKS!





   JLJac on April 11, 2012, 11:27:33 PM:

Update 21
I made the game considerably uglier today... That feels weird of course, but I think it's a necessary step towards starting to incorporate some kind of art direction. I want the game to be mainly flat colors, I believe, but still want the shadows around, so I'll have to find a way for those two to work nicely together.





   JLJac on April 12, 2012, 11:33:09 AM:

Update 22
I think I finished the shadow renderer today, hopefully to never return to it. The game still looks bad, but now I think I have the tools to start fixing that. However, my entire level renderer is messed up at this point, it doesn't even render the slopes. Well well, two steps forward one step back. Hopefully I will get around to support for tile sets some time soon.

It's nice to see how the different part of the game work independently, when I open one of my new levels to see how it looks ingame the croc's AI navigates through the new environments with ease - obviously, as the level is mathematically the same, but still nice to see.

Today I also did some thinking on the game's overall concept, the reason why the player does what it does and how the world the game is set in will work. I'll give you some of this together with some art at a later point, ideas always sound cooler with some tasty art to go with them.





   JLJac on April 13, 2012, 01:26:58 PM:

Update 23
Now there is a tile editor, though there are no tile sets. The level editor will work like this:

First, there will be the level editor. Here, two players can work at the same level simultaneously and create the layout of the level. You'll be able to save the level in som kind of test version, with no real graphics, just to try it out and make adjustments. Once you're happy with the geometrics you move on to the graphics phase.

In the tile editor, you can place objects that correspond to the level you've already made. Here I think it's going to switch to mouse control, it would be too tedious otherwise. So you look at your level and place tiles, but you're only editing the appearance of the level, it will still function exactly like it did when you tested it. Right now you can decide if a tile will be smooth concrete or rough rock, but there'll be much more to that as I start to produce some actual graphics.

Then there's the effects editor. Here you add plants and the like, it'll make sense to you when you see it (or I describe it in more detail later). Essentially it'll be stuff that grows on/hangs from/is applied to the tiles you've placed earlier.

After the effects are applied you'll move on to the exciting procedure of staring at light being raytraced for two minutes.

Finally the level is rendered and can be saved.

With the art editor I'm struggling with a balance, on one hand I want the editor to be free enough to make the level look like you want it, on the other hand I want it to be somewhat constrained. This is because not all people are artists, and you should be able to make a level that looks better than you would've been able to draw free-hand. Also I don't want you to be able to make a level that strays too far from the game's general art direction. We'll see where on this scale of freedom/constraint it finally ends up.





   JLJac on April 16, 2012, 07:30:14 AM:

Update 24
I'm alive and stuff is happening. The stuff that's happening is mainly level editor stuff though, and I don't really have anything to show you. Personally I find user interfaces the most hard/boring thing to do, and it's a lot of that going on in the level editor. The user interface is going to suck, but I don't mind too much as I don't really think of the level editor as an official part of the game.

It's also important to me that the level editor I release is the same as the one I use to make the built-in levels, I don't like the dummed down level editors that are included in some games where it's obvious that the developers had access too a much wider variety of tools. So, in conclusion, the level editor is becoming ugly and hard to use, but it's more of a development tool that I'll also let you guys play with than an actual part of the game. I might include some kind of little tutorial on how to use it, though.

In other level editor news the tile editor is up and running, even more so than before. It works, it displays little previews, it's fairly fast and easy to use and it doesn't have any tile sets to work with yet. Still, the boring technical parts are more or less done by now.

Damn, it seems the level editor is the new croc path finding... Well, if I'm ever going to arrive to the point where this dev log is going to flood with juicy images there needs to be a level editor to generate those images, so it's all good I guess.

Over and out!





   JLJac on April 16, 2012, 11:27:44 PM:

Thank you!

Update 25
This is what the tile editor looks like:



Just to give you an idea what I've been working on lately. With the wasd-keys you can change tool and with the mouse you place tiles. All tiles are loaded from a folder on initiation, they require much less space as external files. The little dark square to the right is the tile's requirements. It shows what kind of terrain a tile can be placed on. Some tiles can only be placed on slopes, some require open air in the middle and so on. This is what I meant earlier, that you first create your level and then you're only able to change its appearance.

After you've edited your tile layout you'll move on to the effects editor, which I haven't started on yet. After that you'll move on to a light editor, which I haven't started on either, but that one is going to be fairly simple. Basically it's going to be about drawing a black and white image which determines where there will be light and where there won't. Then the light will be rendered.



During this process you can go get a cup of coffee...

Finally the level will be rendered in its final colors. Currently this looks like this, but I don't plan to keep it that way. This is still just technical progress, I've started thinking about the art but haven't gotten around to it.



Tiles come in two versions, "box" version and "voxel" version. The boxes are basically six textures, for the front and the sides of the tile. Those occupy less space on the hard drive and are faster to render, but are limited in what they can do. The "voxel" type are actual voxel structures, more or less, and can describe more complex three dimensional shapes. The fans or whatever in the above image are voxel structures. If you look at the close up you can see that they have another set of grates inside them. I needed the voxel format to be able to do complex three dimensional stuff like that.

Now this framework is set up, and it's possible for me to start working on the graphics!

On a completely different note I've been thinking about how the Croc will look visually. Hopefully I'll be able to show you something soon!





   JLJac on April 17, 2012, 11:14:51 PM:

Update 26
I worked on the art today. Still don't have anything I want to show you, but I'm getting there. It's a lot of fun to work with the voxels, any three dimensional shape I can imagine I can create, and see with (decently) correct shadows.

I've been working on a system for palettes. Basically the goal is to convey both light and distance using as few colors as possible, which is not as easy as you might think, especially if you want to make the depth of the graphics justice.



The reason I want to have few, flat colors is because a level will be pasted together from hundreds of graphical elements. By greatly restricting the palettte like this I achieve three things:
1) Some visual harmony, with many many colors it would hurt your eyes
2) Color will mainly be conveying level information, decoration is its second purpose. For the sake of conveiance three colors is actually enough (Look at the level editor), so ending up at 15 colors would be hard to motivate
3) Maybe most importantly, flat patches of color blend together. If everything has its own color every splice between graphical elements would be visible. If there are fewer colors, however, there's a much greater chance that two neighbouring fields will have the same color, making the joints invisible.

Right now I'm at 8 colors, a number I'd like to reduce to 5.





   JLJac on April 17, 2012, 11:41:32 PM:

Yeah, sorry, I should've said something about that... The way the game will be colored will be somewhat unconventional, but worry not, I do have a plan! Once I've been able to produce a screenshot, or at least a mock-up, I'll do the concept / art style reveal and things will start to make more sense. Or they probably won't, but there will at least be some cohesion to the insanity!





   JLJac on April 19, 2012, 12:14:44 AM:

Update 27
Added glass tiles, which are in every way the same as walls except that creatures can see through them. It's fun to see the lizards spot you through a glass wall and then find a way to get to the other side of the glass. Don't know how much I will actually use this in the levels, but it'll be in there somewhere just to point out the divide between visual contact and path finding, showing off some croc intelligence. Possibly there'll be some level that's a maze of glass with only a few blocks of solid material, where you'll have to move quickly from cover to cover waiting for a croc to face the other direction.





   JLJac on April 19, 2012, 09:50:45 AM:

Wow, those are some really cool palettes!

Thing is though, that the game will be pretty heavily stylized art-direction wise, using a more or less black and white palette. This is for artistic reasons that I hope will be more clear once I get more visual stuff up here. Talking of which, I did some pen and paper designs for the croc today! Also started to implement it a little bit, it now looks like a little sasuage moving around rather than three dots. A first few steps towards giving it an actual body!

Update 28
I stepped away from my computer a little and did some sketches for the earliest single player levels in the game. I think this is a reasonable way to start, because if I know what levels I want to make I can make art assets that fit those, rather than making a lot of random art assets and then trying to fit those into the levels.



Those are likely going to be the very first levels, but they are also likely to look different from this. These levels will teach the players the controls and the basic premiss of the game. I'm trying to do this as best as I can, keeping

in mind. I won't go into too much detail, but level 1 basically teaches you how your basic moves work, and level 2 teaches you the basic mechanics of A-creature/B-creature interaction.

The main thing that happened today, aside from all this, was that I split the level editor and the game into two different applications. It got too cluttered, and I also figured that this way I might be able to release the two separately. That way people who're not interested in making levels get a smaller file size, and I can also release them at different dates, meaning I don't have to polish the level editor to perfection just to release the game.





   JLJac on April 20, 2012, 11:29:34 PM:

Yeah, the project is starting to get big, so stuff like that might be necessary o.0

Update 29
Created spawnpoints for the players, and tied in the system with player and croc spawning in the shortcut system. This is mainly a question of lazyness, as now I won't have to make separate animations for a creature entering its hole and a creature entering a short cut. Basically the spawn points/home holes are shortcut openings, but instead of leading to another shortcut opening they lead to an invisible little flag, saying "this is a bear spawnpoint" or "this is a croc hole".

The croc is becoming more and more animated, now it has a body and a tail. Legs next, or head.





   JLJac on April 23, 2012, 05:10:15 AM:

Update 30
Did a lot of multiplayer playtesting, most of it went rather good. The crocs are actually just smart enough to play tricks on, which is a lot of fun. At one time I was hiding in a little pipe section while a croc was snooping around outside, and my opponent wanted to mess with me. He crawled up to a balcony above, and exposed himself. He knew that the fastest route up to that balcony was through the very pipe I was hiding in...

Made lizards collide with each other, which looks hilarious when a bunch of them try to cram themselves through a narrow opening or when they meet in a corridor.

The animation is doing its part, and their bodies have gotten some kind of mushy, soft quality that I'm definitely sticking with. They have a head and are able to do a little looking around. Next up is legs.





   JLJac on April 23, 2012, 11:17:31 PM:

Update 31
An entire day's worth of progress without even opening the game, only working in the level editor. Got tile sets up and running, so now I can create not only loose objects, but tile sets that will be rendered as larger, consistent structures, like concrete and the like.

The next step will be to finalize the level editor to the point where I can save a level project as a text file. Once this step is reached I can start working on levels for the game. I don't really need the level editor to be completely finished for that.





   JLJac on April 24, 2012, 10:03:59 PM:

Update 32

Got my first tileset working. Now I can create levels that have a mixture of objects and tiles. Currently it looks like this:



Up in the right corner you can see a border that's like... folded. That's the metal tileset, and the things it's folded around are loose metal tiles. Hopefully you'll be able to create some interesting stuff with this.

If you squint a little you'll notice the shadows. Sad thing people won't likely be squinting when playing the game...





   JLJac on April 25, 2012, 12:41:00 PM:

It's worth to note that I haven't gotten around to the effects editor yet, which will have a huge impact on the appearance of levels. It's going to be exciting!

Update 33
Made the level editor save the light to another layer, and made the game able to pick up the changed level format. Now you can, if you have a slightly stronger computer, enable the light to fade slowly back and forth. Maybe this represents clouds passing by... most importantly it brings a little bit of life into the level graphics. I want the levels to feel very still and quiet, for artistic reasons, and I think that this slow movement actually adds to this. If everything was static you'd assume it was because of technical limitations (which it, in part, is), but if there's one element of movement the other stuff look more still in comparison, I hope.





   JLJac on April 25, 2012, 11:08:47 PM:

Update 34
Effects editor halfway done, no effects made.





   JLJac on April 26, 2012, 10:55:34 PM:

Update 35
Effects editor more or less done! You can create effects and paint their area of influence, like so:



Variable brush size and all! This has been a user interface hell -.-

Later on the effects editor is how plants will get into the game. Right now it can do some erosion. In the game it won't be this extreme, I think, this is just to show you what it can do. For example the poles can't be allowed to grow into huge trunks.



The idea is to unify the tiles into one image, and to add an organic feel to the level. You can change the order in which effects are applied, which will have some significance. If you for example want the terrain to be heavily erroded but not the plants growing there, you can place the plants below the erosion in the effects list. If you, on the other hand, want dead plants with slime hanging from them, you apply the slime after the plants are drawn.

With the painting tool you can create gradients, like this:



Se how the geometry is molten to goo at the left side, but untouched with visible little pins and all at the right side? That's an effect gradient. It's possible to single out specific tiles to be affected or excluded as well, even though I don't know how that'll look...

This is one step closer to the landscapes that have been floating around in my mind for a while, heavily eroded industrial complexes with patches of old stone. In order to explain why I focus so much on erosion it might be appropriate that I start giving away a little about the overall concept. The working title I have at this point is
Rain World.





   JLJac on April 27, 2012, 10:45:00 PM:

Thanks! Your anticipation is turned straigh into motivation!

Update 36
Light editor more or less done, which means that all the planned editors are at least started on. All of them need som adjustments, though.

The image shows the light editor UI, the light being raytraced, and finally a level being rendered with the light applied.



In the light editor you should also be able to control the angle of the light.

My tiles are drawn with a top-left highlight. I was thinking about what to do when the light is coming in from the right, and think I have settled on a kind of weird approach. In the end it'll be easier for me, I think, to just flip the entire level, render it, and then flip it back, than to try to mess with all the individual tiles. This feels unintuitive, perhaps because a non-substancial thing(the light) is allowed to affect a substancial thing (the entire level), but this is programming and weird-feeling solutions are as good as any, if they work.

On another note I've been starting to touch upon a framework that will allow for some color in the levels. I don't know if I even want it though, will have to test and see.

Made a horrible little mock-up of some grass, through the effects editor. The fading density looked nice!





   JLJac on April 28, 2012, 01:01:33 AM:

Just wanted to share this most recent output of my level renderer:



This is just place holder plants, place holder colors, place holder everything, but I was surprised by how much I liked the look of this coloring method. It created just the sort of washed-out colors I wanted, the colors of a place tormented by decades of heavy rain.





   JLJac on April 28, 2012, 10:48:30 PM:

Update 37
The light angle is now changeable through the light editor, so from now on maybe all my screenshots won't have the exact same top-left lightsource.





   JLJac on April 29, 2012, 01:12:25 AM:

Update 37, continuation

Made the renderer support two effect colors.



Right now my intention is to cap it at two colors, both beacuse it's a hassle to add multiple gradient masks for every layer and every color, and also because it's stylish.

I am very much aware of how aful that sorry excuse for grass looks, and that it doesn't even grow on the slopes. Be assured that I'll get to this, right now I'm just trying to set up the color system. In other words, progress is still technical rather than art-oriented, even though I'm thinking about the art more now than ever. It's still hard to say how much like the above screenshots it'll look or how far it'll stray. I think, however, that I've found a technical approach that produces something I like, and I'm happy about that. Even though a level takes a solid 7 minutes or so to render -.-

Despite promises made I for some reason settled for the same old top-left lightsource.





   JLJac on April 29, 2012, 01:48:57 PM:

Update 38
Made a quick concept art, and put it in the main post together with some text that's more up to date.



Haha I actually think the actual game produces better looking stuff than this concept art, which is the wrong way around I guess, but many things are with this project!

The art doesn't really give away anything you didn't know already, I figure. The current title is "Rain World", and it's set in a very rained down place. Do you remember when I said that the game will be about hunting as much as possible in a limited amount of time? The premise is that the player creature can not survive the rainfall, and has to come out to hunt on the rare, short occasions when the sky is dry.





   JLJac on April 29, 2012, 09:23:12 PM:

I think that the rain will be mainly a plot element, not a gameplay element. The idea is that it's such a horrible force that unless you're deep underground when it starts you're done for. I like the concept that you'll run around in a world that's heavily scarred by this force of nature that you never actually see, making it even more terrifying.

There will be dripping water pixels, trust me! Maybe you'll even see the first few drips of rain the seconds before escaping the level.

I have a bit of a problem with levels appearing as very static, which is because they are very static, they're basically just a still image. However I want to spend most of my milliseconds per frame on creature movement and AI, not grass moving in the wind. In the end I will do what I can to try to make the levels seem alive, but I will have to do it in cheap ways. We'll see what I come up with!





   JLJac on April 30, 2012, 10:47:30 PM:

I haven't really decided on what kills the creature, if it's unable to breath if wet, or the slightly more over-the-top idea that the rain can actually pound a small animal to death... Maybe I won't have to specify.

Update 39
Today I did a little work on the level editor. Not the level renderer, but the editor! Created a function that you can set up an axis for horizontal mirroring of your actions, which makes it considerably easier to paint a symmetrical level.

I made a level, which will be the first or the second one in the campaign. I also started to think about how the campaign will be set up, and how the format of the levels will look like.

I use the word "campaign" here instead of "single player game", because I have no intention of stopping two or more players from going through the campaign together. Maybe you'll have to be alone to progress and unlock new levels though, we'll see how hard it is to balance.

And, I made an important decision. From now on I'll stop working on random art assets, as I can't really motivate this by having to test the tile renderer any more. I got stuck in a pattern where I drew a lot of random tiles, thinking that I'd probably need them when creating levels later. This is a horribly unefficient method, as I in the end would likely have ended up with a lot of art assets that were never used.

The new approach is this; I create levels, and then I create the art assets needed for them. This will give me a slowly increasing library of tiles, and I will probably often find that the levels are faster and faster to make, as I can reuse old tiles. If art evolution occurs I can always go back to old levels and mix in some newer tiles to create consistency.

My thoughts on the level editor has also changed slightly. I no longer view it as a game feature, but a development tool. A development tool that I plan to release, but still a development tool. The difference here is that I don't need to focus on making the level editor look all slick, which would be wasted time anyways since half of the audience won't even open it, and those that are interested in making their own levels are probably more towards the nerdy end, and won't mind a little programming grit. What I'm saying is that I'll make the level editor mainly for myself to use, which means it's going to suck, but I still plan to release it.

In other other news I've started to set up some stats for two different types of lizards, the easiest one and the hardest one. My idea right now is that there'll be five types, one being the easiest, three being about equal but in different ways, making them depend on different terrains, and one being the hardest. This one won't be better than the three specialized ones in their specialized stat, but will have a higher over-all performance and a very persistent hunting technique, making it a fearsome hunter.





   JLJac on May 01, 2012, 11:28:38 AM:

I'm thinking about releasing an alpha, so that a few first time players can try the game and provide some feedback.

Please let me know if you want to contribute by playtesting.

The alpha will be stripped of all art, it'll just be a couple of levels that you can try running around in, and some settings that you can change, to let me know what you think is a reasonable difficulty. I will only send away a maximum of five games, as I don't want to release an ugly, unfinished product to the public.

If you contact me and I send you a copy I will want some effort in return, probably a small sheet of questions answered, of course along with any free-form feedback you want to provide. The final product will of course be free, and if you want to do a little free work for me in return it'll be greatly appreciated.

The alpha won't be very cool, it'll probably suck, but by playing it you can contribute in making the final product something much cooler!





   JLJac on May 01, 2012, 09:14:29 PM:

Cool! Let's hold it here.

I'll whip up a few levels, and hope to have a version released within the week. Once again, I don't want you to be dissapointed, so let me stress that it won't be all fun and games. The alpha will look awful, and don't expect a main menu or anything... (You'll have to select level by editing a text file and restarting the game I guess... it's going to be exciting!)





   JLJac on May 01, 2012, 10:43:52 PM:

Update 40
Did some thinking on the layout of the game. At first I thought I wanted the campaign to be completely linear, but I changed my mind. If you are free to move a little between levels that adds two values. Firstly most people like to be able to move freely. Second, it means that the same levels will be passed several times, increasing the gameplay time/development time ratio. The idea is that during a "level" the player is supposed to get to a hunting ground with flies, hunt, and then get back within a limited time. More on this later.

I did some easy but important stuff with the Croc's thinking, again. For example there was a bug that if it saw you enter a shortcut it wouldn't always understand where you'd end up.

Did I mention that the croc does a little simulation of the player's movement in its head if it's unable to see a player? I made the physics of that simulation better, for example I added gravity. The simulated player also has a minimal amount of "AI", which will simulate the movement of a player character a slight bit better than just an object that continues in the direction of the tangent. This means that if the croc sees you passing by and dissapear into a corridor it'll have a slightly better hunch of where you might have gone once you left its field of vision.

Now, when a croc catches up with a player, it picks it up in its (yet nonexistent) mouth and quickly carries it back to its hole.





   JLJac on May 02, 2012, 12:22:16 AM:

A video! http://www.youtube.com/watch?v=ZnthCU1P1Ow&feature=youtu.be

This shows how some crocs fight over the body of a bear.





   JLJac on May 02, 2012, 10:18:20 AM:

Haha it's funny that you say it's dark and creepy, because I actually didn't have that in mind. I just thought that it'd be reasonable for creatures of the same size to fight over their prey, and things ended up moving like this because of a combination of technical stuff and art choices. When I looked at the video again though, I totally saw what you mean o.0 They're ripping the little guy apart!  Shocked

I'm usually hesistant to talk about art stuff (if it can be said with words, why the art?) but I guess I should explain what's going on here. I'm not making a horror game, but I'm trying to portray a world that is very harsh, and where survival has to be fought for. There is a twist though, that instead of realistic harshness I want it to be harsh, but in a slightly twisted, cartoony way.

Weird little creatures that you don't really know what's going on in their heads fit the game medium, because things will inevitably move a little jerky, behave a little uncanny. Better to play with this than fight against it.

Rain World is not a horror game, there won't be excessive amounts of blood or violence for the sake of it. I will however do my best to convey a very different world, where strange creatures live and hunt, and if aspects of this are creepy, I'll go with that.

So, to actually provide an answer, I won't try to make the game creepy, but there'll be more of this. If you find this creepy, I hope you'll find the final thing even creepier!





   JLJac on May 02, 2012, 10:15:11 PM:

HAHAHA! That's amazing, I never thought of it, but when you say it it's so clear! Yeah, the game will basically play like pac-man! Maybe with the difference that in pac-man the ghosts are always aware of where you are, here there'll be more focus on sneaking. I think pac-man is a great game though, it's a simple and very self-contained design, so I don't mind at all! Smiley

Update 41

Started to clean some stuff up as a first step towards the alpha version. Implemented death by falling, both for Bears and Crocs.



In a level like this the crocs will quite often end up fighting out above the open air, and end up falling. I made it so that if a single croc catches the player when climbing on the beams it doesn't shake him like it usually does, but when two of them are out there fighting there's really no keeping them from tumbling to their death.

In this level one interesting thing happened. You see the little left-facing dead end at the very bottom of the structure? That's a shortcut that leads to the upper-left island, through that ugly pipe-thingy sticking out to the left.

The blue lizard is a wall climber. When the red lizard caught me he was seen by the blue one, and the blue one started chasing him. He tried to take the route through the short cut, but the blue lizard actually didn't follow him, but rather climbed up to the exit he was going to appear out of, intercepting him and snatching the poor bear.

This shows the pros and cons of the shortcuts, through them you can quickly escape a site, but you're suddenly very predictable. Everything moves with the same speed in the shortcuts, and you always reach the same destination.






   JLJac on May 04, 2012, 10:11:31 AM:

I had a fat deadline for school today, and have sadly not been able to work on the game. Now in the afternoon I've started to play a little with the level editor, to put some levels together for the alpha. Maybe it won't be released within the week as promised, but within a week it should be out.





   JLJac on May 04, 2012, 12:33:21 PM:

To at least give you something today, here's a bit of concept art. Some parts I'm happy with, others not.



I'm happy with the... face, not the head but the face. The way the head ends needs work. The body in general needs to be less anatomically realistic. I want the face to be more emotionless, I think, like a mask that looks like something that could be a biological part of the creature but could as well be added on. It needs to work better together with how the Bear looks...

Well, as you can see there's a lot that will change, this is just a rough sketch. The technical implementation will also have a huge impact, that likely won't increase or decrease quality, but just change everything fundamentally. My original sketches for the Bear looked like *deep breath* THIS:


And ended up like this:


So the technical implementation phase can do good things as well...

We'll have to see where it goes! This is an interesting part of making games, technical solutions and limitations bring something unpredictable to your art process, and if you go with that stuff might end up somewhere unexpected.





   JLJac on May 05, 2012, 03:49:44 AM:

Yeah, I was thinking along those lines... Well, as I always say, we'll see where it ends up Smiley

Update 42
Today I did a (preliminary?) visual representation for the short cut entrances. They're still impossible to spot, but it took me like an hour to draw so I'm not doing it all over again until I know what they're finally going to look like. At least it's theoretically possible to spot them now!

I've started to make a few levels as well. The alpha needs levels of great variety, because I'll need to know what kind of levels you guys think works best.

Apart from all this stuff there has been a change to the gameplay mechanics. Instead of consuming the flies on touch like mario coins (or pac-man pellets) the bear cathes them in its hands. You then have to get away and sit still for a short moment in order to eat them. It's very quick, and hopefully won't try your patience too much, but I felt it needed to go in the game. As it was, because of flies gathering together, you could suddenly get something like five kills in a second by just jumping through a swarm, and then continue for a minute without getting anything. This evens things out a little, as you can't catch more than two at a time.

Also I think it fits better with the game's style, the lizard doesn't eat you on touch but rather carries you back to its hole, and I wanted the player to do something similar. I didn't want you to eat while chased. Instead you have to hunt, then escape and find a safe spot where you can quickly munch down what you caught before getting out there again. Another benefit is that sometimes the game would have small moments of dead time, when you where just ducking in cover and waiting for a croc to pass by. Now those moments have a purpose, and you can get better at trying to time them and get them to work with your hunting-escaping scheme.

It's all either not animated or horribly animated at this point of course, but the mechanics are in. The game eventually will have a bit of an animation overhaul, for example the vertical pole climbing looks unacceptable at this point. Maybe I'll get to this at the same time I give the croc its legs.





   JLJac on May 06, 2012, 12:26:21 AM:

Update 43
Added a test rendering for levels, so you can get an ugly-looking thing to try out before you go through the huge process of actually rendering a level. It's a good thing, because there's often a few changes you find yourself wanting to do once you know exactly which jumps are possible to pull of and so on.

I've made a few levels as well. Still don't know what kind of layout works the best though.

Crocs don't necessarily spawn right on start up any more. You'll be able to specify from the level editor when they'll spawn. They spawn after a certain number of caught flies with an added time delay, to make it a little bit less obvious. If you want you can set them to 0 flies but a greater time delay.





   JLJac on May 07, 2012, 10:43:52 PM:

Update 44
OK, now the alpha is more or less ready to be sent out. I just need to add some instruction text, and maybe a calm little turorial level where you can learn how to move.

If you play two people it'll rank you at the end of the game, according to a system where a surviving player is always ranked above a dead one, and aside from that it goes by how many flies you've caught.

I realized that the fun of playing a level is doubled if it's given at least some graphics, so I'll actually do renderings of the levels. Note that these are just quick renderings with a default tileset, the real levels for the game will have quite a lot of custom graphics going on.

Next thing I'll put togther a questionnaire to go with the alpha and then I'll send it out. We're almost there!





   JLJac on May 08, 2012, 12:59:58 PM:

Alpha is out!

Here's what the main menu looks like:



I have a three year university education in graphic design, and I've gotta say, it's not every day you pull something like this off. Going straight in the portfolio.

So, hopefully I'll get some feedback from the play testers in a couple of days (if they can find the start button), until then I'll just do a little tweaking of the level editor.





   JLJac on May 10, 2012, 06:05:45 AM:

Hi!

I'm mainly waiting for the feedback from the testers at this point. Did try a few things in the level editor, but didn't keep them, and made a new tileset. Other than that, nothing much. Hard to find motivation to do stuff that I know might get changed once the feedback starts coming in.






   JLJac on May 11, 2012, 04:40:53 AM:

Bad news
I got to know today that I'm in a bit of a tight spot concerning certain school work. This means that for a week or two, I will have to focus on that. The game will have to be put on ice.

Note however that I'm not abandoning the project forever or for an indefinite amount of time. Within two weeks I'll be back on track. Maybe this isn't the worst time for this to happen, the alpha is released which was a huge mile stone for the project, and now feedback has started to get back to me. In a couple of days when I look at the project again I might be able to do so with fresh eyes, and by then I will have quite a lot of feedback to fall back on as well. Those of you who have an alpha, please let me know what you think! I will have time to read it.

So, a short break. See you in a few days, wish me luck!





   JLJac on May 25, 2012, 10:10:52 PM:

I'm alive!
They told me I'll likely have to complement my thesis later though, so this beast is merely fended off, not slain.

Has been really interesting to recieve the comments from the alpha testers! The opinions have been incredibly diverse... The levels that are some peoples' favourites are hated by others, someone writes that wall jumping is the biggest flaw in the game, someone says it's their preferred aspect... There are some glitches that everyone seems agreed on, but other than that people are pretty much all over the place. The game seems to be a tad too difficult though, which isn't surprising as this difficulty is what I imagined for the final levels, while you guys have been thrown straight into it. I'll sit down and try to make sense of it soon, and maybe post a list of what I'll change because of the feedback.

Thank you!

Update 45
The croc is getting feet! It looks weird and unfinished still, but it's on its way. Even at this stage the poor creature consists of no less than 13 sprites, and that's going to increase quite a lot more...





   JLJac on May 26, 2012, 10:27:15 PM:

Update 46
I'm a little bit stuck, on a silly thing. I need to know the point inside a three-edged polygon that is closest to a point outside the polygon. I realize this is something programmers probably do in their sleep, but as I never got any real programming education I always get stuck on this kind of stuff. I solve it eventually, but it might take a while. Tips are appreciated.

What's happening is that the croc is given some behaviour for its legs. Each leg is supposed to reach forward to a place that has grabable terrain, grab on to that, hold there while the body is hauled forward, and then let go and repeat. In order to find grabable spots on slopes I need the polygon-point-distance thingie.

Right now it looks like it's going to look very weird, but hopefully also cool. Will have to see how long the legs will end up, maybe it'll vary across the different crocs.





   JLJac on May 27, 2012, 10:02:22 PM:

Update 47
More work on the crocs' legs. It still looks more weird than cool, but I hope to be able to improve it. The movement will be somewhat awkward, like it's hauling itself forward rather than actually running, and will hopefully give it a nice, creepy vibe. Still haven't solved the slopes thing.





   JLJac on May 29, 2012, 10:28:35 PM:

Update 48
The legs are moving now. It still needs a lot of work, I too see the weird black things shooting out, but the framework is up.
http://www.youtube.com/watch?v=-Die5vsuLGs&feature=youtu.be





   JLJac on June 01, 2012, 12:38:26 AM:

Update 49
A friend helped me with the traingle problem, and it's out of the way! The croc legs are just about finished. They've reached a good-enough kind of level, where I'll leave them to maybe revisit them later. The movement looks quite different now, they're like... hauling themselves forward through the corridors.

The movement speed is determined by how many legs are grasping, if all four limbs are holding on to something it moves very quickly, if all of them are in the air the body barely moves at all. There is a little cheating though, even with no legs contacting terrain there is some movement, so that it won't get stuck.

Still some flickering going on with the knees though, more fine tuning needed.





   JLJac on June 02, 2012, 12:13:38 AM:

Update 50
Taking a first look at how I'll actually implement some graphics for the croc.



Not super happy with any of the heads, but hopefully I'm getting there.





   JLJac on June 02, 2012, 11:44:44 PM:

Update 51
Implemented a jaw for the croc, that's separate from the head and can open and close. Also started to set up a framework for how the head will rotate depending on the angle of the body.

The crocs now climb poles in a slightly more reasonable manner, instead of just gliding along on the centre of the pole like a monorail then will climb on top of horizontal poles and on the sides of vertical ones.





   JLJac on June 03, 2012, 10:24:24 PM:

I will have limited internet connection for a couple of days. I will still try to work on the game every day, but updates might be a bit more irregular.





   JLJac on June 07, 2012, 09:42:12 PM:

Hehe thanks for making me look like less of a *forever alone*  Grin
You didn't like the corridors? Seems everyone liked different aspects... it'll be hard to find common points in this feedback. I'll get to it, though! If you feel your feedback has not been considered, don't worry, it'll kick in for real once I get to designing the levels. Hopefully I'll be able to do a post where I summarize the feedback and describe what it made me change, so you really feel that your input made a difference.

Update 52
Do you remember the light raytracing? I came up with a new way to do it, and it baffles me that I didn't think of this before. To put it simply; imagine that instead of going through every single pixel and trace a ray from that pixel through every single layer to see where it hits, you use a bitmap. The bitmap is white in the places where there is light and black where there's shadow. It repeats through all the layers once. When arriving to a new layer it applies the "shadow image" to that layer, and then adds that layer's contour to the shadow image. This means that when the next layer is supposed to get its share of light, the pixels that were blocked by the previous layer are blacked out, creating a shadow. As it proceeds through the 20 layers the shadow image gets more shadow and less light, as the different surfaces absorb the light.

The effect of this is, sadly, almost exactly the same as the previous system. The difference is that it takes like 15 seconds to render instead of 7 minutes. You don't really care about this progess I guess, but it has implications. Being able to more swiftly regenerate or make changes to a level will make the levels better, because it'll feel worth it to regenerate a level even because of smaller flaws.





   JLJac on June 09, 2012, 10:30:57 PM:

Yeah, the corridors are a bit different. Essentially there are two games, one that's a maze game like pac-man, when in the corridors, and one that's a platformer, when out in open areas. When out in the open the game is more about jumping and doing cool moves to avoid crocs that have inevitably seen you, while in the corridors the game is about making them never spot you in the first place. Try to play slower, and make sure they don't see you.

I'll look at the ledge stuff!

Update 53
As you who played the alpha are aware of, the flies are able to dive back in their hives when chased. I did some tweaking of this today, and made it so that burrowing takes a little bit of time for them, instead of them dissapearing on contact with the floor. This means that if you're right behind them you can still catch them while they're burrowing, making it a little bit easier and less unfair. To compensate for this I also implemented that flies won't appear out of a hive that a player is close to, so that you can't just wait on a hive for them to pop up and then exploit that they can't dissapear as quickly.

Furthermore, the croc AI had an error going on in its simulation of the movement of unseen players. It would assume that a player would fall through the passable floors, making it behave weird in a situation where the croc is below a floor with a player up above. As soon as the croc left the site to get to the player it would imagine that the player had fallen down to the lower level, and turn around. Once there, it would see that the player was actually still up there, and turn around again. This behvaiour would then repeat. It was easily fixed by making the "ghost player" in the croc's head interact with platforms in another way, which has probably created a whole batch of new, exciting errors for me to discover tomorrow!





   JLJac on June 10, 2012, 01:44:48 AM:

A little weak on the art side lately, so here are some sketches:






   JLJac on June 10, 2012, 11:14:28 PM:

Update 54
Started implementing graphics for the fly. Also fixed that AI problem I described earlier, for real this time.





   JLJac on June 11, 2012, 11:23:08 PM:

Update 55
Further animation work on the croc. I made its head change color, a weird art direction choice that has actually been around forever, but which I don't think I've told you about. Will try it out some more to see if it works, if so it'll stick. The color changes are between black and a color, not all around the palette, and they help communicate whether or not the croc has spotted you. It looks cool but needs a lot of polish. Other than that the croc's jaw has gotten some more animation, now it opens it up when approaching a player and snaps it shut when attacking.

Hopefully the next video I upload will be a graphically exciting one.





   JLJac on June 12, 2012, 09:47:20 AM:

It turns out the crocs are eating as much framerate as they are players. A single croc takes 8-9 milliseconds to draw on the screen, and then the math is simple, with a framrate where one frame can take no more than 25 milliseconds there can be no more than two crocs on the screen at the same time. I did some investigation, and it turns out that the problem is the legs I worked so much on. They're drawn as vector lines, and obviously take quite some time to draw. I'll look into one other solution before I discard them, but it seems there might be no avoiding going into time consuming pixel animations here.





   JLJac on June 12, 2012, 11:30:02 PM:

Update 56
Made the croc's legs work the same way as the player's arms, they're a pixel animation that changes picture depending on distance while the software does the rotation. It looks ok, though not as good as the previous vector solution. But, it released a lot of milliseconds per frame, which can be used for other cool stuff.

As you who have played the alpha know the croc used to just pop out of existance when entering a shortcut. I made a ten frame phase where the body is sucked into the opening before it's taken out of play, hopefully creating a smoother look (and also giving you a slight advantage, since a croc will now be delayed ten frames when pursuing you through a shortcut). The player already had an animation like this, and the fly don't need one as it is already entirely covered by the shortcut graphic once the popping out of the level occurs.





   JLJac on June 13, 2012, 10:10:41 PM:

Update 57
Made a pixel animation for the rotation of the croc's head. It looks nice, I think! It seems that only the head will in the end consist of four sprites, the head, the lower jaw, the teeth of the lower jaw and also one sprite with the teeth of the upper head and the eyes. Phew.

Preferably the lower jaw sprite will be below the player, so that when the croc carries you it'll look like you're really pinched in between the jaws. Because of the separate teeth sprites these can too be placed below the player, hopefully making it look like they're inside the players body (to those who play the game through a magnifier glass).

I'm sorry about those boring graphical updates, but remember that they lead to something everybody loves, exciting graphics!





   JLJac on June 14, 2012, 10:38:14 PM:

Update 58
Gave the croc teeth and eyes. Also started to do the pixel animation for its arms, but there was a bit of lag in photoshop causing me to rage quit before I was done. Once I've restarted the computer it'll go away and I can finish it, but there's an "important update" looming, making me unwilling to go through that process.

Those updates are never important, are they? The fact that you can't postpone it indefinitely is extemely irritating, and that once you've postponed it an unknown number of times it just suddenly shuts down you computer makes me commit horrible acts of violence towards everyday objects in my surroundings. Now that I've already derailed I want to say that I think the main problem with Microsoft products aren't that they're bad, it's that they're irritating. Msn messenger popping up from minimized mode every time you put the computer to sleep, the "important updates", IE moving the cursor from the adress field to the page halfway through a word, "checking for solutions" even though obviously nothing at all is happening, and so on and so on... The stuff works, but by little means it's making you slowly drift towards insanity.





   JLJac on June 17, 2012, 09:45:47 PM:

Here you can see a little bit of it!
Update 59
Worked some on the animation, and made the arm for the pink croc:



The way this works is that the sprite changes animation state depending on the distance between the hand and its socket in the croc's body, and the software rotates the sprite. The location of the sprite is determined by the hand position, not the socket position, making even one pixel movements visible despite the animation having a resolution of five pixels per frame.

The hind legs will have a separate animation, but now I have a template to work from and that should be quickly dealt with.





   JLJac on June 18, 2012, 06:21:15 AM:

Update 60
For some reason I decided to re-open the huge can of worms that is the croc AI. As those of you who have played the alpha might know, there's a weird quirk where if a croc spots you, it doesn't turn towards you but instead hurries off in another direction, making a huge detour before finally arrive to the place you were once at.

This is because I had the following system set up: The paths are calculated from the goal position towards the croc. When the path reaches the croc, a new path is started up, with whatever new place is the croc's target as a source.

This meant that when a croc saw you, it would first of all continue calculating how to get to some random place on the map it was headed for, start off in that direction, then start to calculating how to get to you (quite often while literally outrunning it's own thought process by moving in the opposite direction faster than the pathing could catch up with it), then turn around and try getting to you.

An easy solution for this, which is now implemented, is that upon spotting a player the target position is reset. With this new behaviour a croc that was previously idle or searching, which now spots a player, will stop in its tracks for a second to calculate how to get to you, and then set off.

The problem with this however, was that during a hunt the player will appear and dissapear repetedly from the croc's view, and when the croc resetted its pathing process every time it spotted a player it didn't get very far at all. Finally this was solved, by making it so that this stuff only applies to a croc that is actually changing from idle behaviour to hunting behaviour.

As a part of looking at the AI again I noticed that a croc that has lost track of a player will investigate the area two times instead of one, which isn't very good as a search like that might take upwards 30 seconds, and two of them might mean that a croc is confined to a small area more or less for the rest of the game.

I have an idea of what's causing this, and will look into it tomorrow.

Furthermore, the arms are coming together. I had to make three animations like the one above, because the arm needs to be able to rotate... inwards so to speak, but I think that it right now looks OK, or at least has the potential to look OK.





   JLJac on June 18, 2012, 11:19:23 PM:

Update 61
Hopefully managed to solve the searching twice problem.
The arms and legs ended up needing quite a lot of sprites.



What you see here is the arm, in 0-8 extension modes and three different degrees of rotation towards the viewer, where the topmost is a profile where you see the bend of the elbow, while the third row is the same arm viewed from "above". Rows 4-6 are the same thing, but for the leg.

I have also worked a little bit on the stats for the crocs, starting to differentiate them from each other. The fifth and final(?) species is in now, which is the white croc. This makes them five:

Green - Big, strong, dumb, easy. Lazy, is mostly staying still unless it sees a player.
Pink - Standard. Can climb poles, decently smart, OK hearing.
Blue - Wall climber. Prefers to hang around walls or ceilings rather than floors and passages.
White - Stealthy. Can climb walls but not ceilings. Sits still and changes color to blend into its environment.
Red - Hard. Fast, smart, superb hearing. Never stops, but is constantly moving around the map.

The white lizard will behave a little differently, because its tactic is not pursuing, but ambushing. It sits completely still on a wall, and blends into the background so that it's barely visible. When a player comes by it makes a rush. When moving it's white.

While the other lizards benefit from searching an area where they've lost a player, the white lizard is better of staying still and waiting, because the longer it stays blended the easier you forget where it is. This means that the white lizard will be considerably less persistent in pursuing you, it will instead give up pretty quickly when it loses visual contact and instead go back to stealth mode.

Hopefully this will bring some fun variety to the game, if not it might be thrown out or changed.





   JLJac on June 20, 2012, 10:43:09 PM:

Update 62
Today I finally started to make changes to the different lizards' bodies. It's fun to see how much difference it makes to just make small adjustments such as making them fat/skinny, short tail/long tail and things like that. I also started on making different heads for them. I think the graphics will help giving them fun different personalities. Pics soon.





   JLJac on June 21, 2012, 10:09:45 PM:

Here is a video of what the crocs looks like now, just to give you and idea what I've been working on lately.

http://www.youtube.com/watch?v=8QnWjkKgwdw&feature=youtu.be





   JLJac on June 24, 2012, 02:23:19 AM:

Glad you liked it!

Update 63
Today I worked a bit on the level editor again. Added another effect, old electrical cords. They come in 1px, 2px and 3px thickness. Also note how the new shadow palette blends the cast shadow with the self shadowing on the tiles.



There's a little fog going on as well right now, I'm debating with myself wether or not to keep it. It seems cleaner with flat color surfaces, but it looks a little better with gradients, maybe? It adds a little deptht to the image.






   JLJac on June 25, 2012, 08:19:03 AM:

Update 64
Improved the way creatures are displayed when moving in shortcuts. Now they are also visible against "back walls", meaning that you won't lose track of your character for a few frames the way you used to.





   JLJac on June 25, 2012, 11:23:16 PM:

Update 65
Added another layer of background, to create more depth and sense of place in the levels. The process was surprisingly painless.



This doesn't in any way affect the game itself, which still just loads a two-dimensional image and has no idea about how it was rendered or what it looks like.






   JLJac on June 27, 2012, 03:48:47 AM:

The flashing heads are odd, but I still consider keping them. As the world starts to take shape they will hopefully make more sense style-wise.

Update 66
Graphical baby steps... Some work with the palettes and fog code.



The third layer is almost faded away here, which I'm happy with, but the light on the second layer is too sharp. Also I think the palette is still a bit too saturated, I want it to appear more black-and-whitish than colored, but while maintaining some of the juicyness that a little bit of color gives it. It's a hard balance. The palettes will of course differ between levels, but I'm trying to set up a general set of rules for how they'll work.





   JLJac on June 27, 2012, 11:32:57 PM:

Thank you!

Update 67
More playing around with palettes. I made a palette to be used for underground areas, with the main difference being that instead of close objects being darker and faraway ones being light it's the other way around.



I also added a system for having a little blur effects going on, but it'll be used rather sparesly as I don't want to stray too far from the pixel art style.

I'm hesitating to start making actual levels for the game, as I suddenly find myself doubting whether the game layout I had imagined would be the best one possible. The idea was that there would be a small hub world in which you could move freely, and that you'd visit the different levels from there. Moving around freely is always fun, but the question is how much it actually adds. If I make the game linear I can do a lot more interesting things such as changing light and weather conditions, and in the end show off more of my world. In an open world where you can move back and forth as you please it's very weird if one area always is during the sunset, while the neighbouring place has broad daylight. Instead the whole world would have to have more or less the same conditions, as there's no way I could render all the levels during all the light conditions times all the weather conditions....

So, moving around freely in a more bland world, or play a linear game in a more interesting and diverse one? Hmm...





   JLJac on June 29, 2012, 02:35:57 AM:

The idea has always been that the game will be free of charge. I might open a donation account though.

Update 68
A lot of progress on the level editor today, all invisible. I made the light tracer bigger than the level, so that light can fall in on the level from outside of it.

The tile editor had some work done on it as well, mostly stuff that made it work better with the new three-layer geometry. Now you can also force place a tile in a position where it's actually illegal, by holding F. This messes stuff up, but when creating levels you might sometimes want to place a solid tile halfway out in the air for one or another reason, and this lets you do that.

In order to give you some visuals, here are some chains:



Note how the sky has a little blurred light going on. That's an option you can turn on and off (or which will be automatically triggered by certain palettes). The other option is that lit surfaces glow like this, like in the last screenshot i posted.

Still haven't really decided on the linear/open world thing, but am leaning towards linear.





   JLJac on June 29, 2012, 11:09:00 PM:

Update 69
Managed to implement the correct formula for hanging wires and chains, so that their arcs are actually accurate to what a real rope hanging in constant gravity looks like. The difference is not really visible, but it brings peace of mind.





   JLJac on June 30, 2012, 10:18:07 AM (Last Edit: June 30, 2012, 12:34:16 PM):

Gah... I'm actually stuck. The next step would be to start making levels, and then further development of the level editor and creation of graphical assets would depend on the demand of the levels created. However, the layout of the levels are dependent on what kind of overall game layout I'm going with, which I can't decide on.

Here are the options in more detail:

Hub world layout:
The game is set up around a lair where the bear(s) hide out during bad weather. Around this lair is a small inter-connected hub world (3x3 levels) in which you can move freely. Surrounding this hub world are seven "levels", which contain hives.

The game is consisting of seven "hunts". A hunt is a short persiod of clear weather, during which the bears go out in the world, find their way to a level, and hunt some flies. As a level is once hunted on the swarm stops, and the next hunt you'll have to go somewhere else. This means that you have to go further and further, making for increasing difficulty, maybe even with less and less time at your disposal. Still there is some possibility for variation, as you can take different routes and visit the levels in different orders.

The premiss also states that a bear needs one fly in its belly for each day it's going to hibernate, and the clear weather is more and more sparse as the wet season continues. This means that during early hunts you might only need two or three flies to win, but in the later ones you might need a lot more.

The game is about surviving one wet season, the highscore consists of how many extra flies you've caught, and how little time you've managed to do so in.

Pros: Open world, feels free and makes it feel more like an actual little world, not just a series of levels. Replayability! Once you've played it once it might be fun to try different approaches, different routes and orders and so on, in order to catch extra flies and break the highscore. "What if I take the faraway level first, then the closest one..." Many many possible ways to complete a game, making the game last longer when you for example want to play co-operative.

Cons: Visual blandness, if you can move freely, all the levels should have about the same light and weather conditions. Technical difficulties, the game should probably keep track of crocs on levels you've just left, or maybe even allow crocs to move between levels. Same goes for flies. A bit of difficulty when two players are moving around, which level will it go to if both players jump into different exits? Boring parts where you are too far away from the lair with too little time, and already know you're going to die but still have to wait it out.

Story layout
Basically the game premiss is the same, but it's "faked" rather than incorporated into actual gameplay. First there's one or a few platform levels that are about getting to the hunting ground, then there's the hunting and then maybe there's a getting back. The next hunt is a similar scenario, but with other levels.

There are also "custom levels" such as those you make yourself, which are like the ones in the alpha, short, one-level scenarios you play against your own highscore or against a friend. These you can also make yourself with the level editor.

Pros: Much more possibilities visually. I can show what the world looks like during sunset, day, night, thunder, have some levels that are just there to set the mood. I can create more cineastic events such as ~ I dunno, fleeing in a pipe with drain water chasing you, some part of the terrain falling over, customly scripted stuff like that. Halway through the game the lair might be flooded and the bears need to find another one - a lot of custom scenarios decided by me.

Cons: A linear platformer... have we seen it before, maybe? It's done to death. Replayability plummets, once you've gone through a campaign like that you're done with it. These two are very serious cons.



In conclusion, I can either make a fairly simple and bland little world, but it is actually a little world that works in and of itself, or I can show off a more grand, complicated world with many different things happening in it, but it's fake and pre-destined. This is the common mainstream approach today, I guess.

A game like pac-man or tetris is a very simple world, but everything that is said to be possible to happen in the world can actually happen in the world, even if it's only units moving around. A game like.. say, gears of war has a lot of things that are said to be able to happen, such as building collapsing and the like, that are not actually able to happen inside of the functionality of the game, but are artificially added to make the experience more exciting.

I wanted to go with the old-school approach of a self-contained world, but am now thinking about going more towards the modern movie/game kind of style.

This decision is not easy.





   JLJac on July 24, 2012, 10:39:44 AM:

Hi there!
Contrary to what you're all probably thinking by now neither I nor the project is dead. Things have actually happened, even!

Yesterday the above decision was made final by me implementing the framework for moving between levels, and setting up two different game types, "custom" and "world". This means we have a hub world layout.

Pretty much every game these days do the kind of cop-out I was thinking about, where they promise something dynamic and interesting, only to cut all the corners and provide a linear movie-game. I don't wanna do the same.

Things that have happened, just the few at the top of my head:
1-lizard AI of course.
2-Graphics for the A creature, and additional behaviour
3-Started to implement sound(which I'm not very good at)
4-framrate stuff
5-level editor stuff
6-connecting levels so that you can move between them
7-endless tinkering with the palettes
And quite a lot of other things that had to be done but are not very interesting. There's more stuff, but instead of listing it all it'll be nice surprises for you when you notice it. Think of it as "free progress" you didn't think it was happening, but it was~

I hope I'll be able to get back to regular updates shortly.
Thank you for having patience!





   JLJac on July 24, 2012, 11:40:57 PM:

Update 70

Today I successfully connected a couple of placeholder levels together to a hub world.




You can move freely between the levels, and there's consistensy in which entrance leads where, and if you go back you'll appear out of the same entrance you left through. Hopefully.

Soon, I'll start to actually build the world. I do have a map of what levels connect where, but will improvise the layout of the actual levels.





   JLJac on July 25, 2012, 11:52:12 PM:

Today I once again struggled with making camstudio, divx codec and windows 7 work together. After two hours I had gotten nowhere, and messed up my computer horribly. Now I'm working on restoring it. I guess there won't be videos, simply. :/





   JLJac on July 27, 2012, 01:12:56 AM:

Update 71
Ok, so the world is divided into hub rooms and hive rooms or whatever you want to call them, rooms you pass through and rooms where the flies are. I don't really want to include a map, but I still need to somehow lead the player towards a hive room that is currently swarming, as you won't have time to go check them all.

What I've started working on today is that when you enter a hub room, you'll see a fly dissappearing into one of the exits leading to another room. If you follow it, it will eventually lead you to the closest swarming hive room.

This has required some work, becuase there needs to be a little bit of inter-level path finding going on. It has been managable though, as I don't really want flies actually moving around through the world. Instead I can do this inter-level pathing stuff just once when loading a new room and then spawn one single fly that is very close to the exit. The idea is that you shouldn't be able to catch it, just see where it goes.





   JLJac on July 27, 2012, 05:23:49 AM:

That's a good idea! If it's needed I'll implement it, I think it won't be though, because as a room is loaded the player will be in shortcut-mode half a second or so before popping out in the actual room, and during this time you'll have nothing else to look at except the fly.

This is a balance act for me. The feeling I want to create is a sort of "law of the jungle" thing, where there is a world and it's painfully obvious that no other entity than you yourself care about your survival. Like, there's no deus-ex machina leading you along, but staying alive is very much your own responsibility and failing is a very real risk. I think that in games like that it's much more satisfying when you actually do manage something, because you know that you did it yourself. Think for example of the difference between defeating an AI enemy and defeating another player in a game - online you know that you weren't favoured in any way and that makes it feel more awsome.

Guess what I'm trying to say is that if the player isn't very observant, they're welcome to die and then be more observant the next time  Evil

On the other hand, it has to be playable... So yeah, balance act.





   JLJac on July 28, 2012, 01:07:23 AM:

Update 72
Did some brushing up on the work I did yesterday. Now your score follows you between levels, as well as the flies you're holding in your hands and how many bites you've taken out of them.

I also noticed that it's way too easy to catch the "lead flies" as I call them, the ones that inhabit the hub world and are there to lead you to the actual level you're going for. I put in some pretty harsh measures to keep you from catching those, because otherwise you'd never go to the levels but spend your entire time going back and forth between the first and the second room in the hub world, and that wouldn't make a very good game.

So, now there will only appear lead flies once in each level and each direction. This means that if you've already had your chance at seeing where to go in a room, they won't appear there again.

On top of this there's a counter, so if you catch too many lead flies they'll simply stop appearing. This symbolizes that it's actually the same few flies you chase through all the rooms, and catching and killing them will ruin your opportunity to follow them to where their friends are. I guess that the first time you see one there could be a message saying "don't catch it, it'll lead you to the others" or something like that.

The effect of this whole system is supposed to be that if you're a first time player and play by the book, you'll easily be able to follow the lead flies to the closest swarming room. If you're an experienced player trying to exploit it, they'll dissappear. The goal is that the game should be... not easy, but fair, as long as you're playing fair. If you mess with it you ought to know what you're doing, because then the help will be withdrawn.





   JLJac on July 29, 2012, 11:21:47 PM:

Update 73
Feature creep monday!
There's now a new and pretty fun element in the game. There are pebbles that you can pick up and throw.

Holding the pebbles is tied in with the same framework as holding flies, so you can hold two pebbles but then you can't hold any flies, and carrying around one pebble you can only catch one fly.

Pebbles can be thrown at other creatures. The lizards respond quite differently to this depending on size, the big green is barely affected, while the blue one which is the smallest in the family is tossed like a rag doll for a few frames, and then needs some time to recover. Other players and flies are of course affected too.

When a pebble hits a wall it makes a sound that can be heard by lizards.

Maybe I'll add a few different versions, such as something made out of glass that can be heard all across the level but only has one use, or something sharp that makes a lizard flee back to its hole. It's easy and fun to work with this stuff.

You will never be able to actually kill a lizard, because that would undermine them as being dangerous and put them in the "enemy" category, but at least you're now able to fend them off and buy yourself half a second. Actually I think you can kill them now, with a well placed shot exactly as they are climbing across a gap, but that would be very hard to do.





   JLJac on July 30, 2012, 11:17:24 PM:

Update 74
Boring but very necessary work today. Started on some kind of main menu that holds the level editor together, from where you can load and save level projects and access the different editors.



This has been needed for a long time, but I've neglected it because I've been able to work around it. Now I'm getting to it as I can no longer make levels from scratch, I need to be able to save a level editor project as some kind of file, so I can return to it later and make changes. Once this is done it will finally be worth it to start making levels for the world, knowing that if I need to make changes of any kind that won't necessarily mean building the whole thing from scratch again.

As always when working with user interfaces the progress is painful and slow, but now I at least have some basic buttons up and running. For the first time ever you can add some tiles in the tile editor, then change your mind about some geometry stuff and go back and change it, then return to the tile editor again. In this case you'd likely have to clean up some tiles that are hanging in the air or otherwise occupying illegal positions, but it's a lot better than not being able to at all.





   JLJac on July 31, 2012, 11:22:48 PM:

Thanks! I will!

Update 75
Earlier I've started to do some sound implementation, today I continued with that. Sound is really my weakest spot, and it takes a lot of trial and error to get stuff to work out.

It's been a while, so here's a screenshot of what the game looks like right now:



This level is called "shooting range", the flies keep to the middle and you get them by throwing stuff at them from the balconies. You see the little black things on the lower platforms? Those are "pebbles"(actually their graphics are most often representing different kinds of scrap metal and machine parts). When you get close to them they blink a little, so you can see them.

Right now throwing stuff when climbing on a vertical pole makes you lose your grip, I guess I should attend to that.





   JLJac on August 03, 2012, 04:13:59 AM:

There's some school stuff going on, and updates might not be daily for a little while now. I'll still work on it though, and I'll try to let you know how things are progressing.





   JLJac on August 04, 2012, 01:03:47 PM:

Update 76
Finally I took some time to work on some graphics!
Today I did the intricate pipe tileset, the big heads and the moss like plant shown in this screenshot.



Note how the head thingie is a little three-dimensional, you can se the slightest difference in direction between the leftmost and the rightmost face, and on the ones in the background you can see how the shadows play a little over the shapes in a way they wouldn't if they were entirely flat.

As always when I have schoolwork hanging over me I got terribly inspired, and still have ideas for pieces of graphics I didn't have time to do today. But I'll get to them!

Slowly but surely I'm getting to the point where the world starts to take shape, and I can work more with actually conveying what this place looks like rather than just working on the tools I need to get there. Still, there's a lot of tool making left to do...





   JLJac on August 05, 2012, 09:56:54 PM:

Update 77
An insignificant step for the thread readers, but a huge leap for the developer! I've managed to save a level editor project and load it again. This means that I don't have to start over every time I want to make a level, but can continue from where I left off. This, in turn, means I don't have to have all the tiles and plants and stuff I could possibly ever want for a level in order to start working on that level, as I can add in stuff later. This, in turn, means that I can finally start making actual levels for the actual game.





   JLJac on August 07, 2012, 01:39:14 AM:

Oh, that's a problem. I need to think about the name then!

I'll leave you for a week. I need to concentrate on a deadline for school, and the only way is to completely purge my mind of this project.

Here's a farewell gift though, a makabre little application in wich you can watch the crocs eat two dead bears. The sound is stripped away as I don't have anything I'm happy with yet, but you'll at least get an idea about what stuff looks like at this point.



See you in a week!





   JLJac on August 16, 2012, 05:05:55 AM:

Hi, I'm back!
From now I'll return to the previous ~one hour a day work schedule.

Update 78
Enabled you to bring objects from one level to another in world mode. When carrying pebbles their look is consistent between levels, and when carrying flies the number of bites taken out of them is saved. If in the future I want to add other objects than pebbles the framework supports this as well.





   JLJac on August 17, 2012, 04:15:46 AM:

Thanks! The way I animate things is by a combination of pixel animation and a vector animation. I don't remember how much detil I go into, but there is some stuff on animation back there.

Update 79
We've got spears! Since the early stages when I had only animated the bear character, and the setting was more jungle/temple-ish, I had always imagined the character as spear wielding. So I added it, and it seems to work OK with this setting as well.

The spear is thrown in the same way as the rocks, but is much more powerful. Most of the lizards will retreat back into their holes after one hit, possibly taking your spear with them if you don't run up to them and pull it out again. Players are killed instantly. Now the lizards have a health meter, and can die. In most cases you won't see this though, as they flee way before they're close to dying.

The red lizard, which is the persistent one, never gives up chasing you no matter how messed up it is. I had a pretty epic fight with one, where I several times threw the spear at it, then quickly jumped on it and pulled the spear out before it got out of its stun. Different lizards can take different amounts of abuse, and the red one is of course the toughest.

The health meter means you can make a lizard retreat by bombarding it with rocks, but that would take quite some time even if you're two people doing it.





   JLJac on August 18, 2012, 01:46:49 AM:

Hehe! Those lizards only get a graphics update every 4:th frame though, so they might not look very smooth. I'm thinking about removing that optimization, the game seems to run OK witouth it. Oh, and a pro tip: I forgot to disable the C and V keys for the demo, try holding them!

Update 80
Made spears stick in walls. Added a few new sounds. There is a yellow lizard that hunts in packs. If one of them sees you the entire pack knows where you are.





   JLJac on August 19, 2012, 08:34:25 AM:

Update 81
Did some small adjustments and added sound for the flies.





   JLJac on August 20, 2012, 02:52:26 AM:

Glad to have you on board!

Update 82
Resolved several minor issues in the level editor and the game. Added some graphical stuff that makes it clearer when a lizard has spotted you.





   JLJac on August 22, 2012, 03:14:50 AM:

Internet connection will be a little shaky for a few days, but I'll still be able to work on the game.





   JLJac on August 25, 2012, 09:27:52 PM:

Hi!
I'm writing this from my phone, you'll get more insight into what's been going on once I get to a computer with an internet connection. Just wanted to let you know that stuff is still happening.





   JLJac on August 26, 2012, 10:52:35 PM:

Update 83
Still no stable internet connection, but at least I can upload some pictures.
Most of my recent work has been on the editors:



Some of you probably recognize them, it's the level overview, the geometry editor, the tile editor and the effects editor. They are brushed up UI-wise, functions are added, projects can be saved and loaded, and the whole thing actually works as a stand-alone-application for the first time, as almost all the functions can be accessed through actual UI-solutions instead of by feeding lines into the debug code window.

Apart from this there has been a lot of small stuff in the actual game, which you never knew was missing but had to be added in. Such as up-pickable objects blinking when approaching them only if your hands aren't full, the ability to let go of flies in order to pick up spears, some work on the lizards, and so on and so on.

Art-wise there hasn't been a ton of progress, but at least some. For example these are in:



The signs are randomly generated from a set of parts:



Long ago I promised that I wouldn't make graphics and then try to fit them into my levels, but instead make levels and then create graphics for them. This didn't happen, I'm still making a lot of loose tiles. I'll try to shape up though. Now is the time to start actually building the world.





   jamesprimate on August 27, 2012, 11:06:47 AM:

its got my attention!

 Hand Metal Left Hand Metal Left Hand Metal Left Hand Metal Left





   JLJac on August 29, 2012, 11:59:00 AM:

 Hand Metal Left Hand Metal Left Hand Metal Left Hand Metal Left

Announcement
After a few days of mailing back and forth James and I have decided to collaborate. James is an awesome artist who has made the score for several famous games, and I'm much looking forward to what he'll bring to the project. Check out his page!

At this point it looks like James will not only make the music, but also the sound effects for the game. He sent me an amazing sounding sketch, and I have sent him a beta version of the game.

This feels great, because as I've mentioned sound is really one of my weaker spots. The work I had done up until now I felt was just passable, but with someone who's really good dedicated to it I think it'll be not only passable, but a really good element that will add to the game.

Of course it's scary to let a part of the project out of my direct control, but it's a leap of faith that will likely bring a lot of good stuff. Now this part can develop more independently, and hopefully the whole will end up greater than the sum of the parts in a way that wouldn't be possible if I did everything myself. I'm much looking forward to seeing where this goes!

Welcome James! Say something to introduce yourself!

Update 84
Thank you people for your attention!

Once again I've been wrestling the seemingly (to me) impossible task of capturing and uploading a video. Stuff just will not work. Finally I managed to get a .avi file, but it's uncompressed and too big to upload. I also have an .swf, but that one got some buggy lines in it when I uploaded it. Once again I simply got too tired of it and decided to quit, but if anyone has any tips of how capturing video and uploading it can be done they're very welcome to tell me Tired

In other news there has been a little progress here and there, as usual. There's now a very simple function for making cracks in walls, so that you can make a passage while at the same time conveying that a structure was actually meant to look in another specific way. For example if you want to make a level that has two identical pipes at each side, but want the player to be able to pass through one but not the other, you can use the function to create a crack through one of the pipes. It'll then be passable, while it will still be conveyed that it was meant to look like the other pipe. It doesn't look awesome, but it does the job.

Also started to get back to the game engine for the campaign game mode. This needs to be finished in order to get to the long promised building of the actual world that we should be getting to soon now, I hope.





   jamesprimate on August 30, 2012, 12:07:08 PM:

Thanks JLJac! These guys know me, I'll let the music do the talking ;]

If you've been following along, you know that the game is a fairly brutal struggle for survival set in the dilapidated ruins of a post-apocalyptic city. You play as a small creature searching for food in between torrential downpours, dodging the hazzards of the local flora, perpetually hunted by vicious creatures. 

From my perspective, the music needs to both set the emotional tone of the protagonist animal and immediately “describe” the fascinating world that JLJac has created. This is a start to that. The ambiance, sfx and music will of course be separate assets in the actual game, but with this I wanted to convey the overall "sound experience" that I have envisioned. Hope you enjoy!

http://soundcloud.com/james_primate/rain-world-ambiance-sketch





   jamesprimate on September 07, 2012, 10:35:16 PM:

thanks guyssssssss! Im really stoked, this is going to be a great.

Looks like things are shaping up! Been talking back and forth with JLJac and the levels look pretty structured. For sound stuff, we're stitching ambiance stuff together and I've got a few tracks together that sound nice and cohesive. But I just spent like 2 days working on a new piece that Im really excited about...  and it totally isn't going to fit the gameplay haha. OH WELL, BONUS CONTENT!





   JLJac on September 10, 2012, 01:51:19 PM:

Update 85
Hi! Sorry it's been a while - real life stuff has been occupying me, but I've also been able to do a little Rain World work. Here's a screenshot:



This level contains some custom graphical assets - for example the machine the player is standing on is drawn explicitly for this purpose. The idea is that if I want to use something like this in another level as well that's allowed, and this way the library of graphical assets will grow and make the levels more and more diverse.

As the levels can be loaded and manipulated I can go back to levels I've already done and add in new assets as they are made.

James has been doing some cool stuff on his side, even though it was some time since I heard from him... How's it going, James?

The world is starting to take shape, and for example the above screenshot is from an actual area in the game. This means I'm a little more hesistant to show everything I do at this point, as I don't want to give too much away. Hopefully I'll manage to find a balance between keeping the devlog interesting and still making the final release exciting with a lot of stuff that hasn't been seen before.






   JLJac on September 12, 2012, 04:25:57 AM:

Update 86
Further work on the engine that will handle the *game* aspect of this thing, the one which will divide the world into levels, lead you to places in a certain order, remember what places you've already visited and so on.

What's up an running right now is this:
The player are free to access the swarm rooms in whatever order they see fit. There is, however, a recommended order. This means that each of the seven hunts has an assigned swarm room, and during that hunt you will be lead to that swarm room by the lead flies. If you play like this the game is basically linear.

But, you can visit any swarm room any time. However, once you've hunted in a swarm room it won't swarm the next hunt - meaning that if you go to room 5 the first thing you do, there'll be trouble once the game arrives at hunt 5, because the recommended room is already used up. In this case it'll just lead you to the closest active room (thank god for A*). Then there are other interesting alternatives, such as the player cathing a few flies in one swarm room, then visiting another one before going back to the den ...

The effect of all this is supposed to be that the first time you play the game it'll be all dandy, and the game will you lead you by the hand and show you all the levels. The next playthough, when you're looking to break a high score, you have the possibility to be tactical in your play style instead.

This is supposed to effectively be two difficulties in one - if you play by the rules it's easier, but you can also go rouge and lose the help the game was providing, in return for a potentially higher score.





   JLJac on September 13, 2012, 01:30:35 AM:

Update 87
Tons of progress! Been working with inter-level consistensy, and have accomplished quite a few things I'm happy about. First of all, objects are now saved between levels. This means that if you pick up one specific pebble and move it a few tiles and then exit the level, it'll remain in the same position when you get back, an there is no new pebble spawned in its original position. You can also pick it up, move it to another level, put it on the ground, leave, then come back... yeah you get it.

The great thing is that objects that are not touched are not saved, so if you enter a room with 100 rocks on the ground and pick up two, the remaining 98 won't be occupying any memory. Still, if you re-enter the room, there'll be only 98 rocks on the ground.

Technically this is done by assigning each object an ID, which consists of what level it belongs in, and where on that level it's spawned. When entering a level the objects check a list of all the moved/destroyed/held objects in the world, and if it finds its own ID on that list it doesn't spawn.

About the same thing is done with lizards. They have the same basic functionality with having their positions saved as you exit a room, and re-loaded when you get back.

As some of you might remember lizards are trigged by catching flies. Now, if I enter a room having caught 4 flies, and the lizard in that room was triggered at 3, it will now appear out in the level from the start, instead of emerging from its hole, as if it crawled out while you were not there yet. Lizards' health condition is also saved across levels.

To give some fairness to the system lizards that are loaded from memory or generated out in the environment are never spawned too close to the hole from which the player is emerging.

All this functionality makes the world seem more like one place rather than a couple of stiched-together levels, and it also adds gameplay aspects. For example, now the world only has a set amount of spears and rocks, and you have to manage them carefully.





   JLJac on September 15, 2012, 12:36:30 PM:

Hey people! A gameplay video!
http://www.youtube.com/watch?v=mV7HNKWeHVQ&feature=youtu.be





   jamesprimate on September 15, 2012, 05:39:17 PM:

My girlfriend was watching the gameplay video and MAN does it look good fullscreen on the iPad! Just sayin'.





   jamesprimate on September 19, 2012, 05:41:08 AM:

Chiming in with some new Rain World tunes! They'll make more sense in context, but never hurts to show some WIP  Toast Right

A break-centric fidget piece for a mid-difficulty level hunt:
http://soundcloud.com/james_primate/rain-world-sketch-6d

A more "positive" emotive tune for a near-end level hunt:
http://soundcloud.com/james_primate/rain-world-sketch-4

i really love working on this game!





   JLJac on September 23, 2012, 09:27:01 AM:

Update 88
Working a lot lately, and what I've been doing is mostly level layouts for the world mode, which is why I haven't posted anything in a while. Still, there's slow but steady progress.

I have a world map which I think is working decently. Some of the levels on the map are more or less decided how they're going to look, while some are not started on yet.

For the first time in rain world history my work is more about creating content than about making the engine run, which feels weird. Still, it's a good thing, because it means we're actually getting there, and that I might be able to estimate how long this is going to take some time soon.

Then again... I've made the estimation that the game will be out in "about a month" for five months now, so you never know. Still, I've gotten much, much further now than five months ago!





   JLJac on September 25, 2012, 12:41:18 PM:

Update 89
Did a little work on the yellow lizards, the ones working in teams. They actually work now, and do a little bit of surrounding the player.

I also made lizards able to see a thrown object (rock or spear) and calculate from where it might have been thrown. The calculation isn't perfect, so it's possible to fool them by throwing a rock in front of their faces and hope that they will go looking for you somewhere behind where you were actually at while throwing.





   JLJac on September 26, 2012, 02:46:05 AM:

Update 90
Made the lizards able to pick up objects. Depending on color and mood they might pick up spears, or in some cases a rock, and dispose of them either by carrying them back to their holes or by dropping them out of the level.

The spears are a very real threat to the lizards, and it would be stupid of them to not do anything.

The next thing I need to do is make the lizards respond AI-wise to a player holding a spear, but I'm not sure how to do this. If all the lizards flee as soon as they see you picking a spear up a spear will be pretty much an infinite invincibility power-up, as you would never have to actually use it. On the other hand, as it stands the lizards just run straight at you when holding a huge thing that should be easily visible and that can neutralize most of them in one blow. They will have to still attack, but in a more sneaky manner. We'll see what I come up with.





   JLJac on September 26, 2012, 11:10:53 AM:

Update 91
The more intelligent lizards now act more carefully around a player with a spear.

The solution I found was that a spear carrying player is attacked from above rather than from the side. Instead of climbing straight at you the lizard will climb upwards until it's in a suitable position above you, from where it will attack.





   JLJac on September 27, 2012, 11:29:26 AM:

Update 92
A player isn't instantly dead once caught by a lizard any more, but can be alive a little while when carried. This means that if two players are co-operating you can save your friend from the gap of a lizard with a rock (or a carefully aimed spear).

Also did a little graphical work.





   jamesprimate on September 27, 2012, 02:16:25 PM:

WOW, that sounds brutal!

which makes sense because this game is brutal.

 Evil





   JLJac on September 29, 2012, 09:40:10 AM:

Haha yeah, it's pretty brutal!

Update 93
Finally got around to working on some art today, which enabled me to send two "final" levels (there's always more changes to be done) to James, so he can start getting some feel for what this game will look like.

Made it so that dead lizards fall through platform type terrain, sometimes the corpses would end up with their torso on a platform and their hips below it and get stuck in a vibrating motion, now they just fall straight through to the ground.





   JLJac on October 01, 2012, 05:56:28 AM:

THANK YUO!

Update 94
Making levels, making levels. For the first time like, ever, I've done something according to my policy - recognizing a demand for a feature when making a level and then adding it, rather than adding features with abandon and then trying to cram them into the levels. The feature in question is the ability to mark a tile as forbidden for flies to swarm, form chains or hang around unecessarily on. A level I made had a room that was only accessable to flies, and quickly turned very boring when all the flies decided to just hang out in that one room (why shouldn't they, right?). Also made it possible to mark tiles for spawning flies on level startup.

Have been working with a lot of juicy palettes and light options as well. The idea that the game will be monochrome is given up, it will have pretty vibrant colors actually. I'm eager to show you some of the stuff, but at the same time don't want to spoil the whole game in here. Soon I'll give you something though, I just want to have enough material to feel that whatever I'm giving away is not a substancial part of it.





   JLJac on October 01, 2012, 12:29:28 PM:

Update 95
Made a little more art for the levels.

Gave the lizards a "jaw strenght" stat, that regulates a random chance of how often a player that is caught is killed instantly and how often they are alive to be saved. This is to not make the players too comfortable with always surviving a lizard bite - I'm worrying that players in co-op mode might find ways to exploit it. For the pink one, that I view as the "standard" lizard, it's a chance of 1/12. On top of this there's a small chance of death every frame you're being held in a lizard's mouth, so that the player who's supposed to save you doesn't relax too much, but has a reason to chase frantically. The games get pretty hectic!





   jamesprimate on October 01, 2012, 10:32:18 PM (Last Edit: October 01, 2012, 11:09:42 PM):

Hm! Is this going to be a multiplayer only thing, or can i flail about on the buttons for a chance to escape the jaws in single player as well?


oh and just for the official record: i AM doing things update ;] 34 minutes of music in usable form and we're beginning to stitch together background ambiance audio. JLJac's level design for rainworld is *really* cool in that everything is connected with an underlying logic and many areas can be accessed a few different ways. I would like the ambiance audio to reflect that by thinking of it first as world-wide 'geographical regions' with specific sound qualities rather than simple discreet levels.

Simple example: there are many "high" levels where the protagonist animal is totally "outside" and heavy buffeting wind will be used as an aspect of that sound design. It would be cool if the areas that were geographically close to these "high" levels could still vaguely hear those buffeting winds, etc., etc. So basically, Im looking to create a cohesive sound-world that, in addition to reflecting the specific level design, also gives the player a subtle sonic picture of where they are at in the overall game world.

or maybe it'll just sound like a messy garble and suck! we'll find out

/audio nerd ramble ramble





   JLJac on October 05, 2012, 02:17:25 AM:

Thank you! Now some of the bigger graphical assets are coming together, and the visual style of the game is slowly taking another direction. I think you'll like it!

James, I think that thing will be kept to co-op play, because no matter how hard I would make getting away by yourself someone would eventually learn to master it, and then the most dominant game play element (getting away from lizards) would be taken away from the game.

Update 96
A lot has happened. James has been creating a set of super awesome ambient sounds, that really help setting a mood. Next up is implementing those. Together with the music I'm convinced they'll make magic happen and take the game to a level which is higher than the sum of the parts.

I've done a few things programming-wise. Most importantly I've added a new "creature", that is a .... bubble barnacle - or rather a bubble coming out of a short cut entrance (the source of all life in this world, it seems). The bubbles just sit around there, and when flies touch them they are trapped inside. Once a few flies are trapped the bubble retracts, and the creature inside the short cut presumably consumes the flies.

The fun thing is their self defence, which consists of popping violently. This can throw a player around pretty far, and is generally hated by lizards.

Other things added:
Blue lizards (which are the lightest, and most vulnerable to rocks) react the same way to a player holding a rock as to a player holding a stone - by attacking from above. In some situations it's really fun to watch, like if you're being hunted on the ground by a lizard and makes it to pick up a pebble or a spear from the ground. The lizard can then turn away from you, climb up a wall, climb on the ceiling out above you and then drop down on you. It looks pretty smart!
Red lizards can destroy spears.
Fixed a bug in the level renderer which made short cuts invisible if there was a blurred light overlapping them.
Created a dynamic system for how each level can have a "light behaviour" attached to it - right now there are "no light", "static", "clouds" and "thunder" to choose from.
Fixed some random bugs concerning light not being displayed over the entire screen.
Fixed some bugs in the level renderer.
Made it more reasonable what lizards tend to pick up what objects.
Added features in the level editor - such as a slider to decide how much dripping water a level will contain. More of those are needed.

There are a few important things on my to-do list that I need to get to ASAP, but I keep pushing forward. Among those are:
An acutal look for the hives, so that you can see where a fly will be able to burrow down.
Settings for max amount of flies and fly respawn rates for a level.
Ambience sound and music implementation.
Start on building the actual main menu.
Active decorative objects for the world to make it appear more alive.

Hopefully the upcoming things will magically progress 6 times faster than the things I've already done, and the game will ever be finished!





   JLJac on October 05, 2012, 11:58:49 AM (Last Edit: October 05, 2012, 02:41:04 PM):

Screenshot!

This is the swarm level of the "Canopy" area, which is high up and set during the sun set/rise. This is the second last area according to the recommended order.



The blue of the lizard will probably switch to the blue effect color of the level (seen here in the signs) to create visual consistency, if I ever get around to it. It's a hassle because some of the lizards have colored body parts that are bitmaps unchangeable from the code.

On that - I've been doing a little bit of variety among the lizards look-wise, they have a little different looking eyes and so on. The red one has huge teeth.

For those of you who have been around a long time it might be fun to notice the little machine boxes with 2x2 grated holes in them, those have been around for a looong time and were originally made mostly to check out that the voxelly graphics renderer thingy worked properly. I grew fond of them and now they'll probably make it into the final thing.

EDIT: Added a new plant, along with a new way to add plants - one by one. This framework will come in real useful later.





   JLJac on October 05, 2012, 03:45:59 PM:

Update 97
Aaand I added the ability to define a random seed for an effect in the level editor, which means that if some plant or some wires or whatever feature turned out good you can actually keep them, while changing something else that you didn't like. Made a quick test where I kept an entire level the same but changed only one plant, and layered the outputs over each other to check - it seems to work! This is a good time saver when it comes to making levels.

That's it for today!





   JLJac on October 06, 2012, 12:30:27 PM:

Update 98
More art and level design.

Added a little spark that travels through the short cuts, so that some of the more hidden ones are made a little more visible.





   JLJac on October 09, 2012, 11:51:09 AM:

Update 99
Making levels making levels making levels.
I've more or less created the entire world in dull grey placeholder graphics, and now realize that the world needs to be extended a little bit. This is a great victory, as it means I for the first time ever planned something a little too small rather than vastly too big! My plan is to finish what I have so that it's more or less ready for release, and then carefully add the stuff that I want without letting feature creep get a hold of me.

More excitingly I've started to experiment with James' stuff, music and ambient sounds. It's awesome!

James and I are now contemplating on how the music will be implemented - the setup makes it hard to go with a conventional "one song per area" solution, and it's also hard to tie songs to events as there's not really any fixed narrative in the game. The jukebox needs to be somewhat aware of what's going on, and at the same time be able to surprise the player and not just be playing all the songs on shuffle. It's a challenge!





   JLJac on October 10, 2012, 12:10:52 PM:

Thank you!  Grin I'm most honored!
The irony of this is that your first interaction with this thread led to - the postponing of update 100 hahaha! I had planned to do a regular "Did some level design" post, but if there's expectations to meet I'll have to be able to give you at least something, and thus, we wait.
Don't be discouraged though, keep interacting!

Update 99.5
James sent me some rain sounds, and boy, did the scare the crap out of me! There are a few versions to pick from, and they all sound like different circles in rain hell. Suddenly I feel unsure whether my graphics can do justice to this when it comes to metal and stone being melted, pounded and disintegrated to nothingness. I'll have to look over my filters...





   JLJac on October 11, 2012, 11:43:40 PM:

But we're always staring, watching, judging, expecting of you.
You can never escape it nor should you want to.
Haha this is particularly scary as I have no idea how many people are actually reading this.... o.0

Looking forward to update 99.9!
Hehehe more expectations!

Oops! I didn't intend for you to do anything out of the ordinary for my sake! Smiley

Just keep on keepin' on knowing that there are Interweb folk out here who really like the look of what you're doing and appreciate your dedication, even when it gets a bit quiet.
Thanks! I'll try too keep those quiet times as short as possible - I know that I myself prefer reading devlogs that update with small and unimportant stuff to devlogs that have long periods of quiet between fewer, more important updates. It's always fun to see that something's happening, even if it isn't very significant!

Update 99.8
Added screen shaking, for when the rain approaches.





   JLJac on October 12, 2012, 12:27:08 PM:

Good to have you here!

Update 99.8.5
Introduced some effects for when the rain is approachning. At first the music fades out. Then a rain sound slowly starts to fade in. Then the light dissapears, as if the sun is covered by clouds. Then, in the final step, the screen starts to shake. By now the rain sound is a loud roar. One effective way I found to make the rain sound louder without bursting any speakers was to fade out the other sounds as the rain is faded in, so that everything else is muted when the rain is at its loudest.

Lizards and flies take shelter in their respective holes and hives as the rain is approaching.

Other things I've been doing include enabling effect colors for levels to be either reflective or superflourescent. This means that they have a little aura of blurred light either by themselves or if light is falling on them.





   jamesprimate on October 12, 2012, 01:13:01 PM:

oh man, i cant wait to check out the next build :O This sounds incredible!





   jamesprimate on October 12, 2012, 02:21:20 PM (Last Edit: October 12, 2012, 05:43:38 PM):

JLJac explains it more thoroughly earlier, but long story short, YES; rain = bad. On rain world, the environment is BRUTAL. Deadly rains pound the surface constantly, only letting up for a brief period of time during which the animals on the surface all emerge from hiding to hunt. Most of the game takes place during these hunting periods, where you have to catch enough food to survive the next rainy period, while avoiding being eaten by the vicious flora and fauna of course, then return to the shelter of your den. And if you are out too long... the rains will tear you apart  Evil





   JLJac on October 14, 2012, 01:53:29 PM:

Oh, the AI, my favourite subject! Actually I think that (in my case) it works the opposite way as what you describe. I haven't really found any obvious exploits, but rather have a problem where things aren't working out very well in the beginning of the game.

It's hard to sound humble when saying this, but I think that a player that's just introduced to the game will not really understand how complex the AI is, and because of that the game will work less satisfactory. Just a thing such as understanding that a lizard isn't always aware of where you are and pathing towards you takes some time to pick up, and the more complex stuff, such as "the last thing the lizard saw before I dissapeared behind those blocks was me falling downwards, and because of that it'll assume that I fell to the bottom of this shaft, which I can use to anticipate its behaviour" is hard to use even for me, even though I know that it's there and how it works.

I'm sure that many people will put the game down quickly thinking "it's just random and quirky and too hard", but my hope is that if you don't do this the game will grow on you.

So to answer this:
advanced character AI in a platformer is something i've been interested in trying myself, so i'm curious to see how it turns out here. it seems like a double edged sword, making the game feel deeper and more believable at first, but having the potential to reduce the gameplay to exploitation of its intricacies in the end. looks like you're well aware of this danger though!

Wizard
I think that the case with my game would be the opposite, that at first it could seem glitchy and weird, but later it will become more deep and and believable. This might vary widely between games though! I encourage you to give platforming AI a try, it's a real challange Smiley

What happens when it starts raining? Do you just lose, or does the rain actually come down and kill you? Can you get knocked around a bit by the first drops of rain and just barely make it into your hole?
The rain is kind of abstracted in a slightly more game-ey way, there's a little game over scene where everything suddenly turns black and silent and then the rain hits very suddenly. Of course it would be even cooler to have the rain build up slowly, but it's hard to display rain in the actual world as objects that would move according to common sense are actually static. The current solution is one of my favourite parts of making games, having to make art and technicalities meet. I'll make it look cool, promise!

Update 99.8.6.1
James and I are doing a little contract talk, which we should've gotten to way earlier. We're both aware that the game most likely won't make any money, but in the case it does we want to make sure that everything is as fair as possible. This is of course boring, but it's best to get it done as soon as possible.

In other news I've been wrestling a sudden drop in frame rate, which I have not fully identified but which could possibly have more to do with the latest vista update and my computer being old than with the actual game. Old versions lag too, which indicates that some of it might be in the computer, but new versions lag slightly more, which indicates that it's in the game. The frame rate flails wildly up and down, which makes it hard to get a good understanding of whether it's high or low.

Other than thgis I've started to contemplate on how to implement the music, and has started to set up a fairly complicated system of triggers for how songs could be activated and deactivated. We'll see where it ends up.

James sent me a new batch of ambient sounds, named "the weird batch", and they are awesome! Those are more abstract than the previous ones, and will help create a mood rather than add realism. Soon I'll get to implementing ambient sounds, it's very low hanging fruit at this point.

Added the ability to spear flies. Working a little with the blur effects, there's too much of them in some palettes which is a problem, and I might need to kill my darlings and get rid of them.





   JLJac on October 15, 2012, 11:56:21 AM:

[...] it's very low hanging fruit at this point.
I see what you did there, Mr apple picker Corny Laugh
Hehehe!

interesting! in my thinking the ideal AI system allows the player to think of the enemies as real thinking entities ...
Yeah, this is basically what I was going for as well - having a video game enemy that feels like it has a "mind". In my game some of this works pretty well for an experienced player, you can for example do cartoony stuff such as dissapearing behind a corner and then quickly into a side corridor, wait for the lizard to pass by said side corridor, and then exit the same way as the lizard was chasing you. The problem is that you need to be aware that stuff like this is doable in order to do them. For that awareness to occur you'd need to perform it at least 5 times, the first few times you wouldn't be able to tell it apart from random chance.

As the game is right now the shaft scenario could very well occur, you could drop down a shaft while visible to a lizard but then grab hold of a metal beam halfway down and dissapear somewhere else, while watching the lizard search the bottom of the shaft. I don't think of this as an exploit, as this is the way the game is supposed to work.

The problem in a situation such as this is that in 9 cases out of 10 the quickest way for the lizard to get down into that shaft would be to get to the edge and make the same jump you did. This means that in the majority of the cases the smart action is the same as the dumb action of an AI that just tries to get to the position where it last saw a player. In explaination, in the most cases you won't be able to see that the lizard is smart, even though it is. There are however cases when you notice the intelligence.

The funny part is that most of those cases are bad for the lizard. An example:



You are stranded on the little island, and a stupid AI would just end up waiting below you, as it would move towards you and then end up waiting once it got to a ledge that was too high for it to climb. This is stupid thinking, but the resulting action is smart, as you'd have no-where to go with a lizard waiting below you.

A rain world lizard, on the other hand, realizes that it can get to you through a detour. The problem is that when it's inside the tunnel it can't see the player, and once it reaches the balcony the player has long since dissapeared.

In this case the more stupid AI would be more successful, because if it just waited below the player wouldn't have anywhere to go. My point though is that the setup I have now is more fun. A deadlock would just be a deadlock, but a lizard making a somewhat stupid decision is entertaining, because you can see that it makes a decision. Instead of having a stupid AI that ends up catching you because of luck you have a creature that's thinking, but which you're outsmarting. Outsmarting things is satisfactory.

So, the exploits you're talking about are certainly there, but I've kind of built my game around them - they are the main game mechanic. To not make it too easy the lizards are compensated with physical treats - they are fast, has excellent vision and can hear you if you're not moving carefully.

When it comes to hyping the AI, I don't know... Hehe looking at what I wrote above I realize I'm already far down that road, but I don't want to over do it as raised expectations might make people dissapointed. I'm just a single guy building this on evenings and weekends, and people are used to games devloped by 50 people with a university degree each. That said, I can always emphasize that a high percentage of my hours with this has been put into AI, whatever that is worth.

Ah, whatever, here we go:
Update 100
Let's celebrate the 100'th update with that the framework for implementing James' music has taken its first solid step. I can now create a list of triggers for hunts that activate, change or deactivate songs on defined events. Today I had one song start, and continue playing until I had caught 4 flies, after which it stopped. Then another song started when I spotted my first lizard, and ended when I entered a specific level.

It seems to work well enough already! There will be changes though, but I'll try to stick to my policy and implement new technical solutions as an answer to a need on the art side, rather than just doing stuff that I think I maybe might use.





   JLJac on October 16, 2012, 05:33:23 AM:

Would it be possible for the AI to wait a bit on the "stupid" AI, before attempting to move in for the kill?
I imagine the croc would be thinking something like:
"C'mon... Get down here."
"C'MON!"
"Augh, fuck it I'm just climbing up to get him."
"Wait, where'd he go?"
Hahaha! Actually, the longer the detour is the longer it will take for it to find a path, meaning that you'll get a little bit of it moving back and forth contemplating on its next move.

Isn't this just an issue of player feedback, though? Lots of games (and especially stealth games!) suffer from this same problem of the player not being aware of the AI state.
The problem here is that psychological phenomena which I don't know the name for in english, animism perhaps, that you want to play with rather than against. The thing I'm thinking of is the tendecy for humans to read more intelligence into the behaviour of dead objects than there actually is.

For example, a human dropping a marble that rolls in under some furniture might think that it "hid" in there, even though it most certainly didn't because it's a dead object and it only followed simple mechanics. The psychology behind this is obviously the magic behind computer game characters seeming to come alive.

My theory (as an amateur) is that the more you are aware of the mechanics behind a behaviour, the less you'll submit to the feeling that the object is alive. A while back I posted a video where some lizards were moving around, and got this response:

...and the way he stood above you with his mouth open was a great little characteristic. Amazing job...

I remember this because Franklins Ghost had obviously thought that the lizard opened its mouth as a way to display frustration over the player being out of reach. I knew why the lizard opened its mouth (boring technical reason) but kept quiet, as the other interpretation was more awesome and fun. In this case not knowing what was going on behind the scenes created a more awesome experience.

So, I think that if I create a window into the lizards' heads I would also compromize them feeling like creatures, and make them feel more like mechanics. Their inner lives can never be half as complex as what we fill in the blanks with when we don't know what's going on, which is why I keep the not knowing what's going on as high as possible.

I have been thinking about symbols such as (!) and (?) though, and actually have implemented something along those lines. As a lizard is surprised its head vibrates a little and it emits some particles, which is usable as a cue that the lizard has seen you or heard you. Then again I don't know how well this actually works, as when I myself am playing I'm also aware of all the nuts and bolts behind the scenes.

Update 101
Caught a cold, and has mostly been horizontal on different surfaces today. The only thing keeping me from complete uselessness has been a sketch for how the main menu could be laid out.





   jamesprimate on October 16, 2012, 06:19:58 AM:

speaking as "the other person who has played rain world pretty extensively", I'd like to throw my 2 cents into the AI chat. I certainly don't know what's going on under the hood, but the lizard behavior is quite unpredictable in a very cool way. It's hard to describe, but sometimes during a chase they will seem to anticipate your movements based on the level structure, then get distracted by snapping at flies, then mope around, then "hear" you and start stalking again. it's quite believable for neon death lizards. also, different favors of lizard (red green blue white, etc) all have their own fairly distinct personalities and behaviors, so when you get a couple of flavors in a level chasing you around you have NO idea what's going to happen and it's quite scary and chaotic, which I think is exactly the right vibe for the game.

fwiw, I had no idea that the jiggling particle head meant that it had heard you (I was assuming rage or aggravation or something? They often do that when I spear them in the face, heh heh), but I LIKE that element of unreadability where you can't tell if they are laying in wait for you or don't have a clue.. Having a more standard "!!" "??" sort of thing might be take away a bit of that in my most humble of opinions.





   JLJac on October 16, 2012, 06:42:35 AM:

Hahaha that review was down to each word exactly what I wanted to hear >_< Even the "different personalities" thing was in there! Hopefully it's because the game is becoming what it's supposed to, and not because James knows too much about the project haha!

A sneak peak under the hood: They emit particles either because they hear a sound, because the've spotted you (a lot if they weren't aware of you, a small burst if they were already chasing you but didn't know exactly where you were) or because they're taking sticks and stones to the face. Maybe they do it when fighting over prey as well, don't remember.

There are other subtle ways of reading a lizard's mind as well - a slowly pulsating head means it's calm and idle, a quick change in color means it's hunting and somewhere inbetween means it's cautious or searching. Black eyes means it doesn't see you, sparkling eyes mean it's currently seeing a player.





   JLJac on October 18, 2012, 08:11:24 AM:

There's one kind of lizard that co-operates, but I haven't really found a good place for it in the game and it might end up being banished to custom mode. They work together by trying to surround the player, which sometimes ends up pretty dangerous.

I think the main problem here is the very simple environment. In the end they can't really do much more than... go places, their possibilities of interaction are very limited. When I enabled them to pick up objects occasionally that was pretty cool though.

On the AI, I think I've reached a "good enough" point, from now on everything I'd add wouldn't really ever be visible to the casual player. I have a few fun things in there for those who play a little more as well, but I think I'll keep it at this.

Current progress isn't very fast, as that damned cough won't leave me alone. Working and being sick is quite enough for each day, and it's hard to find time for rain world. Hopefully it'll be over soon, please just be patient for a couple of days! I try to get at least something done every day even though I'm a bit tired.





   jamesprimate on October 19, 2012, 01:13:10 PM:

hey, you were cranking out multiple updates per day for a while there! I think you've earned some relaxation  Beer!





   JLJac on October 20, 2012, 07:55:23 AM:

Haha yeah maybe! Best would of course be to keep an even tempo in here...

Update 102
Got a sound editor in, in which you can pick and choose from James' awesome creations!



An ambient sound consists of a file, a volume and a pan alignment, that's pretty much all that's needed. I think this will be really helpful in setting a mood for the game!





   JLJac on October 21, 2012, 12:33:13 PM:

Update 103
Raaaaaargh!
Been wrestling an extremely annoying bug for a while now.

I have known for a long time that some levels, for some reason, lag horribly. It's not the things that are going on in the level, but drawing the actual picture. Now when I got one of those levels I decided to try to nail it down.

It seems like the problem was in the image that display the light on the backround layer. I have pinned it down to this:

If I color any vertical row of pixels further away from the left edge than 118 pixels (117 doesn't work) any other color than white, the lag dissapears. It's not a specific pixel that's causing trouble - when I go into this vertical pillar of colored pixels and remove sections the lag comes and goes completely randomly. There seems to be a pattern that if more colored pixels are removed, the lag is more likely to come back. However, removing the top half makes the lag come back just as much as removing the bottom half.

In addition to this, there seems to be different reactions depending on whether I do stuff from the code or from the console, and on top of that there seems to be different reactions depending on whether I re-color the pixels one at a time or with one single command.

It's possible to locate a loosely defined area in the image that causes the trouble. If these pixels are put in a sprite they can make any level lag, so it's obviously their fault. If you start to cut this area down though, all the lag will suddenly dissapear - it's not connected to specific pixels, but rather to a combination of pixels. I badly wanted it to be about some specific pixel, maybe one color that I could just remove or so, but it's not.

I think of it as a curse - certain orders of pixels are cursed.

Even if I re-draw a level on another random seed the curse persists, which could possibly mean that whatever pattern causes it is on a bigger scale, a similar general layout will always create a cursed image. This means that some levels I create can never work.

This stuff is obviously far beyond my level, and probably has something to do with how graphics are rendered. Sadly I've seen the same problem on other computers as well ...

I have no idea what to do about this.





   JLJac on October 21, 2012, 12:53:12 PM:

The only thing of significance to the curse seems to be if pixels are (255, 255, 255) white, treated as transparent by Director, or not. A black sillhoutte creates the same effect as the original image.

If flipped vertically or horizontally the effect presists. Same for 90 degree rotation. If the image is inverted (black->white/white->black) the effect goes away.

Removing all rows of pixels that are entirely white from left to right doesn't help. It's not about all-white columns top-down either.

Ladies and gents, I present to you a real cursed image:



Displaying this specific combination of black and white screws Macromedia Director up terribly. Quite interesting, if it wasn't so irritating.

Tomorrow I move the image to one of my old game projects to see if it slows that one down as well.





   JLJac on October 22, 2012, 12:04:16 AM:

Today the problems don't occur on all the levels where they did yesterday. If I can't reproduce the problem I can't fix it. I officially give up...





   JLJac on October 23, 2012, 12:57:59 PM:

Probably something like that...

Update 104
Been trying to supress the strangest bug ever from my mind and instead concentrate on creating some levels and art assets.





   JLJac on October 24, 2012, 11:04:01 PM:

Update 105
Here's just a random screenshot:



The graphics are not really turning out the way I want to. I think the problem is that the tiles are too small - I get a clutter of detailed small objects rather than fewer, bigger machines. Problem is that big things have to be custom tailored for a specific level, and can't be used again. Maybe if I started to draw machine parts rather than the whole machines, I could piece them together in different ways on the different levels...





   jamesprimate on October 24, 2012, 11:29:14 PM (Last Edit: October 25, 2012, 01:27:39 AM):

you are talking about the background artwork I gather? IMHO it looks pretty good! I kind of agree with on the more detailed stuff though. the top and middle sections are nice because its just a solid clean silhouette and doesn't get in the way of the foreground stuff. the bottom background could be a bit less detailed maybe, not necessarily as rule but because the poles are such an important part of that level and need to more visually "present" I think. As it is now the poles kind of mix in with the background machines.

just my 2 cents! I love the art, you know that Smiley





   JLJac on October 25, 2012, 11:34:55 AM:

I'm not really talking about the background art specifically, as I feel the foreground stuff has the same problems. Instead of looking like something that's consistent enough to be meant to function in one way or another, it just looks like a clutter of small building blocks... which is exactly what it is -.-

Yeah, the poles certainly could stand out more. The wierd thing is that in a way the level looks better and is more readable when there's no light at all, as such:


(Old one to the right for reference)

because then there's only one, simple rule - darker=closer. Buuut I really do enjoy having the light fade out when the rain is approaching, and I've put so much work into the shadow renderer already.

Anyway, I removed some of the clutter from behind the poles, and kept it a stone wall that doesn't draw too much attention!





   jamesprimate on October 25, 2012, 02:58:17 PM:

oh, well I think the foreground stuff is really good! it looks like chunks of debris and worn down mysterious things... seems right on to meeeee!  Gomez Gomez Gomez Gomez





   JLJac on October 26, 2012, 11:34:38 PM:

Hehe that sounds about right then, only that I'd like BIGGER worn down mysterious things!

I have waaay too much work right now - it'll get better next week. However I've been able to do at least something:

Update 106
I'm into another assault on what I think might be one of the games' biggest design flaws - that you can't really know where a shortcut will take you unless you've made the level yourself. Earlier I added a little spark that flows through the shortcuts so that you at least have a chance to see them, now I've started on another cue as well. Instead of drawing the shortcut symbols onto the level image, I've made them separate sprites. Next up is making them blink or change color when a player is close to them, in a similar manner to items on the ground.

The trick is that they'll change color in pairs, so that you can see which of all the exits is blinking when you get close to an entrance, and from that conclude where you'll end up.

After this I'll move on to more important but boring stuff I figure, such as... the main menu -.-





   JLJac on October 27, 2012, 11:45:17 PM:

Update 107
Did a little bit of cleaning up - and made the new "shortcut symbols as sprites"-system work better. It wouldn't hurt to give it some more polishing, but now it is basically up an running as I want to, with the symbols following the screen shake and everything.

Also enabled the poor flies to release their chains when the rain is approaching. Up till now the ones that had formed chains would just be hanging there as everything else escaped back into their holes, now they too have the sensibility to let go and fly home.





   JLJac on October 29, 2012, 02:42:12 AM:

108
Spent some time making the "rain getting closer"-stuff a little more polished. Spent about half an hour trying to figure out why the hell a sample wouldn't loop properly, until I realized that the file was named "rain loop" despite it not being loopable at all ... Thank you James  Tongue

Right now the game seems to almost always load and play the same song, I'll have to look into that. I'm just happy as long as the bugs are reachabe from the code I write, and not hidden in the basic functions of Macromedia Director. Everyone hates hunting bugs, but I tell you, you learn to appreciate hunting findable bugs after having tried to chase the ghost of something that can't be found and can't be fixed...





   jamesprimate on October 29, 2012, 09:52:22 AM:

108
Spent some time making the "rain getting closer"-stuff a little more polished. Spent about half an hour trying to figure out why the hell a sample wouldn't loop properly, until I realized that the file was named "rain loop" despite it not being loopable at all ... Thank you James  Tongue

OOOOOOPS! ill look onto it.  is it just called "rain loop"? I rendered a ton of stuff from a folder called "rain loop", so it might have gotten mid-labeled. sorry! this happens sometimes when you do complicated work at 4am Tongue





   JLJac on October 30, 2012, 12:37:55 PM:

Hehe no worries James, I loopified it myself - you've heard the result. If you don't think it's good enough lemme know Wink

I just read one of your old posts and you mentioned Director, man that's awesome. I loved Director but shifted to Flash once it got AS1, but I have many fond memories of Lingo and building interactive CDROMs when everyone thought CDROMs would take over the world :D

This game is looking awesome  Coffee
Haha Lingo is the latin of programming languages - dead and dusty. This is certainly the last thing I make in it, and probably the last thing that gets made with it as well. It's good to be using a software that creates applications that you can be kind of sure will be possible to use even in a few years. I guess I'll have to emulate windows xp if I wanna play Rain World in ten years haha!


Contrary to the idea I have but never live up to - to have fun and interesting posts high up on new pages to draw new readers in - I will give you a dead boring update today. I know myself from following devlogs that boring updates are at least less frustrating than several days with no updates at all. Hrm. So here you go:

Update 109
Made a system that enables player entrances to be shut off. As those of you who have been reading this somewhat regularly might know the game will contain levels that can both be reachable from an open world and opened up through a custom game kind of setup. In the open world scenario I want them to have only one entrance, while in a custom game I might want to have one entrance for every player or something like that.

So now I can create a level with as many entrances as I want, and then shut all but one of them down from the code when loading them in the campaign. I simply make them lizard dens, because as it stands that was a good quick fix - a player entering a lizard den will be spitted out again right away. Had to make them not be counted when the lizards try to decide where to emerge, so that the same lizards will still come out of the same holes. It seems to work ok!






   JLJac on November 01, 2012, 02:01:05 AM:

Update 110
Now the game has flies - not the creature I've been calling "fly" but frankly is looking more like a bat kind of thing - but actual tiny little flies that buzz around. It doesn't really make any difference, but I hope it makes the world seem a little more lively.





   JLJac on November 02, 2012, 01:01:47 PM:

Oh! Almost forgot about that! Don't worry though, the game is already pretty playable, so I'll have something for you guys!

Update 111
Let me take a moment to tell the story of how to add a graphical asset to Rain World.

Let's pose the example that I'd like to put in a machine looking something like this:



Here any sane artist would just open a graphics software and happily go at it. I, on the other hand, have chosen to make it as difficult as humanly possible.

I start out like this:



Then I write some instructions for how that material will be handled, like this:



Then feed this through the good old



Before reaching my destination - something I could've drawn in half an hour. I guess that the good part is that I then can use that same machine part again, but that hasn't really started to pay off yet...





   jamesprimate on November 02, 2012, 05:25:58 PM:





ah that's gorgeous!





   JLJac on November 03, 2012, 12:51:13 AM (Last Edit: November 03, 2012, 01:19:39 AM):

Hehehe welcome to the depths of my insanity!

Update 112
Added a few sounds I got from James. Worked a little with the bubble creature, changed its appearance a little.

Update: Aaaaand added eggs into the same framework as other objects, so they appear in one place consistently!





   JLJac on November 04, 2012, 06:19:27 AM:

Update 113
What I should be doing right now (except from actual non-RW work) is adding a more decent main menu so that the Prince of Arcade guys won't bleed too much out of their eyes. It's hard though, because I don't know if I should start on the framework for the final main menu (and waste time making way for things that won't be used this time around) or if I should go for a quick fix (and waste time doing stuff that won't make it into the final game). Realistically I think I'll settle on changing the colors a little for the cascade of ugliness that's the main menu right now.

This is however not what I'm actually doing. I've been wrestling Macromedia Director's very 90's-ish code solutions once again today. A sound can have a "loop back here"-marker set in it, but the point from which you start playing the sound can't be set behind that point. This means that my plan, to have a song start playing at a random place and once it reached the end start over from the very beginning, was a no-go. This wasn't good, as a custom game session is shorter than the average song, meaning that there would be a lot of musical material that would never be heard.

I managed to fix it though, with a small hiccup in the looping. Maybe I'll get around to doing it differently for songs that actually start playing from the beginning, so that they won't suffer from the hiccup. Minimize the damages.

Ah well, it's sunday, I might as well make this a long post.

So, yesterday I made a small change to the level renderer that in turn made a small change to the level art. Very small, but I find it enjoyable.

Here, look:



Can't spot the difference? Try putting them in different tabs and switching between them. Here they are, overlayed:



The "earthquake" effect is because the second image is slightly scewed. I got tired of having everything completely straight and square, it seemed lifeless. But the problem was that I couldn't tilt or scew anything, because the game was mathematically built around a perfectly straight grid. The collision boxes of things would still be straight, even if the level was tilted.

The solution I found was this :



The level is rendered as 30 layers, and the objects of the game are drawn in layer 5. By having a "scewing factor" that increases as you move away from layer 5, but is fixed at 0 on layer 5 itself, it's possible to scew the background and foreground while keeping the actual gameplay relevant graphics in phase with their hitboxes.

I know the effect is very slight - I want it that way. When trying stuff out I made some renderings that made your truly sea sick, like this:



But I decided to keep it subtle. Maybe a little too subtle, now when I look at them I think I'll have a little more scewing in there after all... I'll settle on something. The point is that now everything isn't perfectly lined up, and just seeing a slight difference in angle between two things make the environments seem a little less artificial.

I guess I'm trying to strike a fine balance with the art. In one way I want it to look a little tile-ey, and not just like one big drawing made by hand. Not because I don't like hand drawn aesthetics, but because it has been done so many times before.

On the other hand I want one specific feature of the hand drawn aesthetic - the uniting of the graphics into one single image. Tiles tend to look like... tiles, different pieces that fit more or less well together. Reality - especially when dirty and worn down - tends to blend into one in a way that correlates more closely to the hand drawing than to tiles. But the drawing has certain quirks as well, such as some lines looking different than others because the drawing tool is held in one hand and not the other.

I want to have the cake and eat it. My goal is to create an aesthetic that looks like one unified image, but doesn't have the characteristics of the human hand. That's why I have this combination of tiles and effects going on. The tiles look technical and strict, while the effects make it look a little dirtier, and more importantly unifies it into one single image. What I want, after all, is to create images of worn down machines. I couldn't do without either the strict or the dirty.

On top of this comes another factor - the stylization. The game is - in a way - pixel art, with everything that comes with that art direction. One of those things is tiles. At the same time the game is not strictly classical pixel art, it's a subversion of sorts. I want to play with the pixel art aesthetic, but I don't want to play it straight. This is for example why the characters are kind of looking like pixel art, but not moving like pixel art  usually does. I want the same thing for the environments - something that's a wink to the classical pixel art genre, and something that's different.

I like to think of my game as a pixel art rendering of a world that is not a "pixel art kind of world".

The tiles are more in line with the pixel art tradition, while the effects and the scewing are something else. It's a hard line to strike, because if I get too happy about adding stuff I might go too far in one direction or the other. This is for example why I use blur in the graphics, but use it sparesly. If I just went ahead I would lose the aesthetic I'm aiming for.

So, in conclusion, now I have another factor to fine tune in this balance act!





   JLJac on November 04, 2012, 08:40:57 AM:

Well, the way this works is that the software I'm making this in is kind of ancient and not really able to display any exciting graphics - so to evade that I'm rendering pre-baked levels that take several minutes each and then just display them as images. So no, no parallax scrolling, just fixed screens. Rest assured though, my next project I'll move over to something (anything) else.





   JLJac on November 04, 2012, 10:08:08 PM (Last Edit: November 04, 2012, 10:52:50 PM):

Hehehe fact is I'm not a native speaker and don't have a clue how "skew" is spelled Wink your weird ass language has no correlation between how something sounds and how it's spelled! Now I now though, thanks Tongue

Edit: changed "doesn't" into "don't". If one is unable to communicate properly in ones statement about one being unable to communicate properly, what is that even!? Unable to communicate-ception?





   JLJac on November 04, 2012, 10:54:48 PM:

Haha yeah! I'd totally write this thread in esperanto, if it wasn't because I like to entertain myself with the idea that someone is actually reading it.





   JLJac on November 05, 2012, 02:09:35 AM:

Update 114
Started to patch things up for the Prince of Arcade sneak peek release. It suddenly hit me that the game should probably be... playable until then.

The original design idea was that in a custom game, if one player died, the timer would be set to something very low so that the other players would only have just enough time to get to an exit. There's a problem here, as the light fading/sounds playing/screen shaking stuff that goes on when the rain is approaching is triggered by certain key frames, and those can't be skipped - meaning I can't instantly set the timer to something very low. I think I can work around that though, in a way more or less hideous code-wise.

Also started on the very basic frame work for a main menu.





   jamesprimate on November 05, 2012, 03:37:19 AM:

when is this prince of arcades? sounds very cool, and I'll be very excited to hear the reactions!





   JLJac on November 05, 2012, 09:09:52 AM:

Haha I should look that up!

Update 115
Worked some one the "rules" of the game, like how it handles the game aspects of what's going on. I've got it to a point I'm decently happy with.

If one player dies the other one is given just enough time to get back to a hole. This means that you can win even if you die, because if you had more flies than your opponent and he/she doesn't reach their hole in time, you still have the victory. It's however still a pretty huge advandage to not be the one to die first.

If one player is dead, the game is halted immediately as the other player goes into a hole, and you don't have to wait for the rain.

If both players go back into their holes at the same time the game is ended. I might change the requirements so that at least one player has to be dead for the game to end - sometimes you go into holes in order to escape lizards as well.

When the rain comes all players that are outside are counted as dead - those in holes as alive.

I still have to make it so that the game stops if one player is already in a hole and the other one dies.


On top of this I added a fun little detail - in competitive game modes a player can't go into a hole that's already occupied, you're spitted straight out again. I hope this will create some fun and frantic situations when players race for the closest hole. Some levels might even have less holes than players, then the gameplay becomes a balance of trying to hunt effectively and staying closer to the hole than your opponent.





   JLJac on November 07, 2012, 07:48:31 AM:

Update 116
Poking around with the colors of the lizards. Sometimes I want their colors to change slightly to align with a color in the specific level's palette. For example, if one level has pink plants in it I want the pink lizards on that level to be that pink, not anything else. This is kind of a hassle in some cases, as some parts of the lizards are constituted of bitmaps loaded from memory, and for those parts the colors can't be changed from the code. So I'm doing multiple sets of those parts so that everything will be in sync.





   JLJac on November 08, 2012, 01:37:37 PM:

Update 117
Menu stuff...





   JLJac on November 09, 2012, 03:37:30 AM:

A video!

Click the image!


The video shows how you can play with the lizard AI - I, the white player, have a rock, and my friend has a spear. I attract the attention of the croc, and make it follow me. When the croc see me dissapear down the ledge it assumes I dropped to the bottom, and decides to drop down as well. Once down there it realizes that was not the case, and crawls back up to investigate where I might have gone. My friend is waiting for it with the spear.

This is of course an artifical situation, but it shows how the semi-predictable AI can affect the way you play. It's possible to make a plan based on what you'd think be a reasonable behaviour for the croc, and put it in motion. Not all plans will work as smoothly as this one of course, but I hope there will be fun in the element of surprise as well!





   JLJac on November 09, 2012, 07:36:49 AM:

Just bringing the video to the new page ~

Click the image!



That's... Surprisingly brutal for something so cute. I imagine the sounds are placeholder- I hope they'll be replaced with something more fleshy and visceral.
Also, what's the structure of this game? I don't have the willpower to look through the whole thread to find out- how does the game play? I only know the mechanics, not the goal or anything.
Hehe the sounds you're hearing are made by me, and I'm an amateur sound-wise. Whatever gets updated depends on whether or not my awesome sound guy has a sudden gust of inspiration!

The goal of the game is to catch and eat flies, not portrayed here, while at the same time avoiding the lizards with sneaking and jumping. Killing a lizard is just a means of survival, not an in-game goal.

BTW, are the characters sprite-animated or do they have bones?
(Seems like bones, but I'm not sure...)
I don't know exactly what "bones" is, have heard of it some time... but yeah, I think it might be the thing. The characters are made of several parts that interact according to simple physics.

Nice! Take *that* you shitty lizard! Bam! Love the way it frantically backs off, injured, too.
Hehe yeah! The spears almost always end up sticking out of their throats, beacause whenever they spot you they turn towards you and open their mouths. It backs off because if the tip of a spear that's stuck in its body interacts with terrain it gets a little spams in the other direction.

Suddenly I realize how gruesome this stuff is XD





   jamesprimate on November 09, 2012, 01:41:12 PM:

Awesome vid!  I'm have yet to play it 2 player, but the thought of tag teaming those lizard bastard makes me smile  Evil

As for the place-holder SFX that JLJac did... I think I've played it so much that I'm used to them and kind of like them! I had thought of just touching them up a bit down the road to blend with the newer SFX, but this is probably a good time to get your opinions oh wise TIG brethren. We have one vote for more "fleshy" (realistic I'm guessing?) sounds. Does anybody else have an opinion based on what you've heard in this vid?





   JLJac on November 10, 2012, 01:03:06 PM:

Update 118
I managed to make a working menu for the Prince of Arcade guys! I hate UI programming, but it has to be done, so, well, I did it. The menu is not the menu I'll use in the game, but now I have a framework, and that's a good start. Now I can do stuff such as adding a button or a list, make them clickable, switchable, highlighting, connect them to the machinery behind the scenes, and so on. I'm already feeling a huge amount of satisfaction over all the work I'm evading compared to the alternate reality where I programmed every button as a single special case with its own unique code.





   JLJac on November 10, 2012, 03:36:48 PM:

That's... Surprisingly brutal for something so cute.
My thoughts exactly.

What do you mean by this? Is it a good thing, or is it a bad dissonance?

I didn't really think of the characters as "cute" when I designed them, I just wanted a soft-bodied animal kind of character with a blank expression on its face. I guess in a way I wanted to create a contrast between a soft character and a hard world, but soft and hard in the literal, physical sense rather than anything else.

As always with art I as an artist can't really control your interpretation, while at the same time the piece is in your interpretation. I can try, though. I don't want my game to be interpreted as a "happy tree friends" kind of thing, where the entire point is "it's cute but violent", that's not what I set out to create. So if that is what I'm conveying, I might have a problem o.0





   jamesprimate on November 12, 2012, 05:11:44 PM:

when is this prince of arcades? sounds very cool, and I'll be very excited to hear the reactions!

Missed this post earlier -- it's tomorrow night! I'm totally stoked!

oh snap! I didn't realize it was in Montreal. I'll see if i can get some of my toy company friends to make it. I want that feedback! :D





   JLJac on November 13, 2012, 08:13:01 AM:

Peeeeeeeeew I managed to send a version to the Prince of Aracade guys.

Now I'm terribly tired of rain world, and might actually even take one or two days off.

See ya'll!





   jamesprimate on November 24, 2012, 01:01:55 PM:

IM BUMPING THIS THREAD LETS GET EXCITED! hopefully JLJac is enjoying is break, but I want to talk about Rain World  Gentleman so.... ill do what  can contribute: music!

This track, imaginateively titled "Rain World 12" will probably be menu & "city ruins" in a gritty electronic style: https://soundcloud.com/james_primate/rain-world-12a








   JLJac on December 03, 2012, 07:22:24 AM:

I know this is getting crazy, and I will get back to work sooner rather than later. It's just that after having spent several hours each day doing this without even thinking much about it the sudden contrast of not spending that amount of time sitting around trying to convince a lizard to crawl in some specific way was kind of pleasant for a change.

I'm alive, and I'll get back to work soon. The game only has its final 20% left, meaning that we're at least 25% through development!





   JLJac on December 06, 2012, 12:17:02 PM:

I got an email from James, and suddenly realized that it's been waaaaay to long - so, here I am again.

Update 119
Finalized the lizard-egg interactions. A lizard will now behave reasonably if you steal its egg, and the AI seems to not mess upp too much (from what I've seen so far).

If you steal an egg, the lizard will hunt you down and kill you, but let go and take the egg home first. Then it will return for your body. If you drop the egg to the ground the lizard will prioritize the egg over you, and you're safe a little while. If you snatch the egg from a lizard that's carrying it you're pretty much instantly dead though, as it'll just snap at you the very moment you snatch the egg. When carrying eggs they have their mouths slightly open, meaning that you don't even have the few frames it ordinarily takes for a surprised lizard to open its jaws before it can snap at you. A lizard always knows where its egg is, even though it can't see it. A psychic radio connection? Idk... But if they didn't, it would be way too easy to get away with an egg, as it is now it at least poses some kind of risk and challenge.

You don't need to press the "pick up"-button to get an egg from a hole, entering the hole without carrying anything in your hands will pick up the egg automatically.





   jamesprimate on December 06, 2012, 07:56:01 PM:

YAAAAAAAAAAY welcome back JLJac!

okay tell me more about the egg interaction. does it serve a purpose other than aggravating the lizards? is it food? it seems like a big thing. also... the bubble creatures? i feel like im missing a whole component!





   JLJac on December 07, 2012, 08:34:34 AM:

Hehe that's a cool idea! It's not what I had in mind for the eggs though - the eggs will work as a single player collectable. I'm planning to have a sandbox gametype where you can spawn whatever lizards you want, if you've collected their egg in single player mode. And maybe there'll be an "egg hunt" gametype as well, where there are no flies and the players compete to steal eggs from the lizards. Apart from all this the eggs will be worth some food points, they'll equal to 4 or 5 flies, or whatever seems reasonable.

James, what about the bubble creatures? They're just... bubbles. I'll send you a level where they're present so you can check them out Smiley





   JLJac on December 10, 2012, 01:14:05 PM:

Update 120
Found some text file handling code in an old game of mine and moved it over to RW. Am looking for a map of the world that I drew on some piece of paper, until I find it this:

Quote
mtx[2][1] = [#name:"w/21", #type:"hub", #exits:[point(1,0), point(1,1)], #lizards:[["green",1,10000,1]]]
  mtx[3][1] = [#name:"w/31", #type:"hub", #exits:[point(-1,0), point(2,0)], #lizards:[["pink",0,0,1]]]
  mtx[4][1] = [#name:"41", #type:"room", #exits:[point(1,0)], #lizards:[]]
  mtx[5][1] = [#name:"w/51", #type:"hub", #exits:[point(-2,0), point(-1,0)], #lizards:[]]
  mtx[1][2] = [#name:"rooms", #type:"room", #exits:[point(1,0)], #lizards:[["white",1,200,1],["white",2,110,2],["pink",4,60,3]]]
  mtx[2][2] = [#name:"w/22", #type:"hub", #exits:[point(-1,0),point(0,1),point(1,1)], #lizards:[]]
  mtx[3][2] = [#name:"w/32", #type:"hub", #exits:[point(-1,-1),point(0,1),point(1,0),point(1,1)], #lizards:[]]
  mtx[4][2] = [#name:"w/42", #type:"hub", #exits:[point(0,1), point(-1,0),point(-2,4),point(0,4)], #lizards:[["green",0,0,1]]]
  mtx[5][2] = [#name:"poles2", #type:"room", #exits:[point(-1,4)], #activeEntrance:1]
  mtx[1][3] = [#name:"rupture", #type:"room", #exits:[point(1,0)], #lizards:[["pink",1,121,1],["pink",5,353,2]]]
  mtx[2][3] = [#name:"w/23", #type:"hub", #exits:[point(-1,0),point(0,-1),point(1,0)], #lizards:[["pink",6,400,2],["pink",0,0,1]] ]
  mtx[3][3] = [#name:"w/33", #type:"hub", #exits:[point(-1,-1),point(-1,0),point(-1,1),point(0,1),point(1,0),point(0,-1)], #lizards:[]]
  mtx[4][3] = [#name:"w/43", #type:"hub", #exits:[point(-1,-1),point(-1,1),point(-1,0),point(0,-1),point(1,0)], #lizards:[]]
  mtx[5][3] = [#name:"stoneheads2", #type:"room", #exits:[point(-1,0)], #lizards:[["green",3,21,1],["green",1,106,2]] ]
  mtx[1][4] = [#name:"sky platforms", #type:"room", #exits:[point(0,2)], #lizards:[["blue",1,621,1],["pink",0,0,2]]]
  mtx[2][4] = [#name:"w/24", #type:"hub", #exits:[point(-1,2),point(1,-1)], #lizards:[]]
  mtx[3][4] = [#name:"w/34", #type:"hub", #exits:[point(-1,1),point(0,1), point(0,-1),point(1,-1),point(1,0)], #lizards:[]]
  mtx[4][4] = [#name:"w/44", #type:"hub", #exits:[point(-1,0),point(1,0)], #lizards:[["green",4,0,1]]]
  mtx[5][4] = [#name:"underground fan", #type:"room", #exits:[point(-1,0)], #lizards:[]]
  mtx[1][5] = [#name:"tut1", #type:"hub", #exits:[point(1,0)], #lizards:[]]
  mtx[2][5] = [#name:"tut2", #type:"hub", #exits:[point(-1,0), point(1,-1)], #lizards:[]]
  mtx[3][5] = [#name:"w/35", #type:"hub", #exits:[point(0,0),point(0,-1)], #lizards:[], #ambientSounds:[[#mem:"OM", #vol:255, #pan:-25]]]
  
  mtx[1][6] = [#name:"w/16", #type:"hub", #exits:[point(0,-2), point(1,-2)], #lizards:[]]
  mtx[2][6] = [#name:"w/26", #type:"hub", #exits:[point(2,-4), point(1,0)], #lizards:[]]
  mtx[3][6] = [#name:"w/36", #type:"hub", #exits:[point(-1,0)], #lizards:[]]
  mtx[4][6] = [#name:"w/46", #type:"hub", #exits:[point(0,-4), point(1,-4)], #lizards:[]]

is my only clue to how the world is layed out, and while I actually can decipher it it's like 24 times slower than just looking at the actual, drawn map. Worst case scenario I'll have to redraw the map from the above scribbles, I've done it before.





   JLJac on December 11, 2012, 02:59:06 AM:

Update 121
Added three new plants to the level editor: fern, mushroom and plain grass.
Also sorted out a problem with the light renderer that made a plant or object just a neon-colored silhouette when light hit it. The problem was that I had forgotten to rename a variable...





   JLJac on December 13, 2012, 01:53:07 PM:

Thank you very much!

Update 122
I found my map, and transfered it to a bigger sheet of paper. When looking at the map I realized that the single player campaign only has 7 levels, which is very limited compared to the like 40+ levels I've actually already made. So I decided to cram a few more of them into the single player world - it's a very small effort required and it will make the single player longer, giving me time to in peace and quiet introduce each color of lizard without rushing anything. So, now I'm well into extending the world map. Don't worry though, I won't make it too huge for me to handle. If I add maybe five hub rooms I'll have room for three or four additional swarm rooms, making the game 50% longer without much additional work.





   jamesprimate on December 14, 2012, 01:03:56 AM:


I found my map, and transfered it to a bigger sheet of paper. When looking at the map I realized that the single player campaign only has 7 levels, which is very limited compared to the like 40+ levels I've actually already made. So I decided to cram a few more of them into the single player world - it's a very small effort required and it will make the single player longer, giving me time to in peace and quiet introduce each color of lizard without rushing anything. So, now I'm well into extending the world map. Don't worry though, I won't make it too huge for me to handle. If I add maybe five hub rooms I'll have room for three or four additional swarm rooms, making the game 50% longer without much additional work.

MORE LEVELS

you dont know how happy this makes me...





   JLJac on December 14, 2012, 11:06:37 AM:

I've been following this thread from day 1 on, and I must say I really hope you'll have the breath to finish the game.
I love the aesthetics and the mood and idea and all the decisions you've taken within this thread; it's plain lovely and I am really looking forward to be able to play this game in it's final version. Keep on going!
Thank you for the kind words! Knowing that there's some anticipation out there certainly helps me catching my breath when it seems I'm out of it.

Update 123
James got inspired from the new levels, and made new music! Two new tracks of the same high standard as always. These tracks are a bit more background-ish according to me, so I think I'll try to fit them into the hub world areas. They could also work as a suspenceful background for a level with many not-too-dangerous lizards where the action is kind of even in intesity.

On my end I've been tampering a bit with the world map, and I also solved a problem where it would instantly transport you two rooms instead of just one upon entering a door. I went with an ugly solution, blocking the second of the double signals instead of finding the source for it and removing it. It's my game, I'm the only programmer and I do what I want Evil





   JLJac on December 17, 2012, 08:15:39 AM:

Update 124
The completion of the game can basically be boiled down to four points from here:

1 - Create a working menu(With art)
2 - Finish the world map(Including tutorial level)
3 - Make different gametypes for custom mode
4 - Polish and bug fixes (I'm afraid of this one)

Today I did some work on the menu, and created a way for multiple menu pages to exist. Now you can go from the "Main menu" page to the "Custom Game" page but not back again. Yay, progress!





   JLJac on December 18, 2012, 09:14:57 AM:

It's good to hear that you're getting closer to completion with this game, I'm looking forward to its release.
High hopes, low expectations, please Wink

I read the first 3 or 4 pages and then the last 2 or 3 pages in their entirety.

This project is really inspiring! It's such a crazy cool concept and it really shows what goes into the production side of a game when you produce and design at the same time. Just reading this has probably made me a better game designer and I can only hope that eventually I'm as good at figuring out issues and coding as you are. Haha. With my project I want to do something like you are doing (as far as documentation), but with design (I don't plan on producing anything for a little while).

Regardless, I'm excited to play this game whenever it comes out!
Thank you! From here my development process seems like the most amateurish thing ever, but I guess I'm good at covering that up then haha! You write that you don't plan to start working on anything right now ~ if I could give you a tip I'd say this: Don't wait in order to create a huge project, stuff like that are probable to die in pre-production if you're a lone developer. When working alone it's better to just get started with a small project, because the only way to learn is to do. If you're a hobbyist like me the keyword would be small project, as everything takes (no joke) about 50 times as long as you think. Rain World was supposed to be a two week project. Right now It's been in development for 1.5 years, and is still most likely nowhere close to finished...

Update 125
A little menu stuff. Started touching upon saving and loading single player games.





   jamesprimate on December 18, 2012, 09:16:07 PM:

personally, im psyched that the development is getting extended! it means more ideas and more polish! maybe... even MORE levels to make music for!  Evil Evil Evil Evil





   JLJac on December 25, 2012, 08:37:52 AM:

Haha. No worries! I've made a few games, so I know the feeling of a 2 week or 1 month project becoming a several year thing. I also have a fairly large support group behind me for games (college for game design!) xD I'm excited to see where your project ends up though. You seem like you are nearing "completion". ;P
Oh, you're in game college! o.0 Then I should obviously be on the recieving end of any exchange of advice haha! Maybe in my situation I shouldn't look at the gradual growth and feature creep as something bad, when doing this alone as a hobby maybe one could as well embrace the fact that there's no fixed deadline. I mean, there are a lot of people who have to cut in their projects in order to meet a deadline, and I don't. Plus, many indie game classics such as Cave Story seems to be the product of a fairly uncoordinated growth of a project.

Now of course I'm not alone any more, as I have James on board and he as well have hopes and expectations for this project. So I have to keep my s**t together to at least some degree! However, I'll of course take this:
personally, im psyched that the development is getting extended! it means more ideas and more polish! maybe... even MORE levels to make music for!  Evil Evil Evil Evil
as a que to keep pushing my deadline further and further away towards eternity ~ bad move James Evil

Nah, just kidding Wink

But, when we are on this lazy note, I should probably announce that I'm taking a christmas break, as you have probably noticed. And another thing - this spring I'm going on a longer trip, I'll get on the plane somewhere mid-january. James and I have been talking, and we're agreed that it would be impossible to rush a release until then, especially when taking things such as setting up a small website and the like into account. So instead the (already unspecified) release will be pushed two or three months forward into the next year. In the end this is a hobby, and as such I have to put life first, Rain World second. This said I myself don't think of it as something entirely negative for Rain World, as getting away from my screen and recieving some new impressions is good for my enthusiasm and inspiration, which in turn is what fuels the project.

In-between christmas break and travel break I hope to get some work done on the main menu, so that when I get back after my longer break full of inspiration I'm not met by a wall of user interface coding~ If I get a good chunk of menu made before I go that'll actually mean that most technical aspects of the game will be almost finished, and that means I can concentrate on giving it an awesome artistic presentation when I get back.





   JLJac on January 11, 2013, 11:01:47 AM:

Thank you! The prototype isn't available anymore, because I'm not too proud of it when looking at it in the light of today's progress.

The day after tomorrow I'll be leaving for Africa! From there on I know nothing at all, except that I expect to be back 12 weeks later.

This may be a backside of game making as a hobby - Rain World is not my job, and it has to adapt to my life rather than the other way around. Still, the game is fueled by my inspiration, and only staying in my room coding doesn't give me any of that. So in that way, what's good for me is good for Rain World.

Thank you all for your interest and your help. Don't worry about the game, I've put way too much time into it to not complete it. I'll be back in shorter than you expect, and I will bring with me new inspiration and renewed energy.

See you in a bit!





   jamesprimate on January 12, 2013, 09:29:59 PM:

But but, what if you die in Africa?
If Farcry has taught me anything it's that Africa is where you go to die.

worst case scenario, i have the alpha build!  Cheesy

but i kid, JLJac will be back in a few months and in the meantime we'll hopefully be chatting about and improving RW.

Happy travels Joar!





   JLJac on February 21, 2013, 10:47:00 PM:

Hello! This is just me checking in to let you know I'm alive and kicking. I've also actually been able to work a tiny bit on the game, starting to sort out how I want the menu to look like. Most of what has to be done is programming though, not art, and the african climate doesn't really encourage programming - it's simply too hot to think. I gradually get used to it though, and have high hopes I'll eventually be able to write some code.

Cheers!





   JLJac on March 07, 2013, 01:12:30 PM:

Update 126
Made the basic setup for a level tier for custom mode. Basically there are two lists, one that displays all the custom levels and one that displays the ones picked for the playlist for this specific game type. When you click a level in the first list it's added to the second, when you click a level in the second list it dissapears.





   JLJac on March 08, 2013, 12:42:19 PM:

Update 127
Tried to create a little bit of order in the complete and utter mess that's Rain World menu and options code. I have so much stuff from the old preliminary menu hanging about, together with three or four different solutions for everything, some preliminary, some not finished, others inbetween. Now things are starting to be reasonably tidy, at least to the point where I can understand what I'm looking at. I have a somewhat logical way of storing the state of the main menu, i. e. what options were selected, what pages were up and so on.

To give you a taste of what's up, imagine the following: For most game types there are two options that should be controlled by the player. These are the Spears option, which indicates whether or not spears will appear on the levels, and the SpearsHit option, which decides whether or not a player should be able to hit another player with a spear.

Now, these options need to be set and stored individually for each game type. If I change them in one game type's options page I obviously don't want them to be changed for all the other game types as well, I want to be able to custom tailor my play options for each game type.

At the same time, there's another factor of complexity - that some gametypes should forcefully override these options. For example, in the competitive game type you should be able to decide whether spears hit players (it has a huge effect on the gameplay, making the difference between a game where you try to outsmart each other and catch flies and one which is about fast reflexes in quick, brutal duels). In the cooperative game type I might not want this option to be available, because fighting lizards together becomes way too easy when you don't have to worry about hitting each other.

So, I need to store a lot of options separately, and I need to be able to override options, both of which I need a logical, reasonable system for which doesn't tie my brain up in a knot every time I look at it.

As I've mentioned, programming UI:s isn't at all my favourite thing. It's a lot of hard work, and you don't really get anything spectacular out of it. The greatest possible achievement for an UI is "not annoying", which seems like a not too exciting purpose to strive for. I'll get there though, as it's a necessary step in making all the good aspects of the game visible.





   JLJac on March 10, 2013, 01:02:37 AM:

Update 128
These UI updates are so boring I almost feel ashamed to post them... Anyway, here we go: Today I made a scrolling list! It displays 15 items, and if you go to the bottommost item and click down it brings up one new item. If you reach the very bottom it brings you back to the top. The same goes for clicking upwards. For mouse users there are little arrows at the bottom of the list that makes the list scroll. Yaaaaaawn.

My next game won't have a menu system, it'll just have an external text file were you can input your preferences in a terribly complicated code language.





   JLJac on March 10, 2013, 11:02:19 PM:

Update 129
Today I messed a little with keyboard/mouse controls for the menu, and how it'll know which one is currently in control. When it comes to the point where I start trying to implement joysticks I might do something with that as well.





   jamesprimate on March 12, 2013, 03:08:36 AM:

YAY! Glad to see the devblog back up and running  Hand Thumbs Up Left Hand Thumbs Up Left Hand Thumbs Up Left Hand Thumbs Up Left





   JLJac on March 12, 2013, 07:23:04 AM:

 Hand Thumbs Up Left Grin

Update 130
Managed to get the new menu connected to the actual game, meaning that it's now possible to start a custom game again. It also creates a playlist out of the levels you have choosen, and srambles it if you checked the little "shuffle" button.





   JLJac on March 12, 2013, 02:02:16 PM:

Update 131
And I finally connected the World game mode to the new menu as well, and started outlining the framework for continuing a game from a saved file. Also when running around in the single player world a bit for the first time in ages, I found a bug where a spear would re-appear if you lodged it in a lizard and that lizard then fell off a cliff. It was easy enough to resolve, the problem was because the lizards are created earlier than the spears. First the lizard object is created, and asks "is a lizard with my ID reported wounded/missing/dead in world memory?", and when it finds itself it deletes itself from world memory, as it is now loaded on the actual level. Then the spear would be created, and ask "is there any lizard in world memory reported to have me stuck in it?", and the answer would be no, as the lizard had deleted itself. So, the spear would appear on the level. The problem was solved basically by changing the creation processes so that the spears are created first, stay tuned for the bugs that will arise from moving the chunks of code around.





   JLJac on March 12, 2013, 11:04:06 PM:

had a quick play, love the minimalism Smiley
Sir, with all due respect, your post worries me a little. I don't remember putting out a public demo, and I remember spending almost a year implementing a gazillion details, so if all of those have dissapeared and given way to "minimalism" I have a problem.





   JLJac on March 13, 2013, 07:32:34 AM:

Well, playing a non-existent public demo is going to be a pretty minimalist experience!

Lol  Cheesy





   JLJac on March 14, 2013, 09:54:45 AM:

Update 132
As the new menu and the game are now connected I've started to mess around in the actual game a little bit again. Today I discovered that a problem I thought was solved was in fact not, which is always annoying. The problem is about the how the levels are supposed to have multiple entrances in custom mode, but only one when playing world mode. Because of this I set them up with an "activeEntrance" property in world mode, and shut down every other entrance, making them empty lizard holes. This works wonderfully when entering a level, and also when exiting it, if you exit through the leftmost entrance. If you exit through any of the others it returns an error which I feel perfectly confident I know what it is, but which has roots deep down in everything that has with inter-level connectivity to do. Which in turn makes me think that I should probably rewrite all that stuff...

But then again, I can always stack ugly hacks on top of each other Smiley There's nothing like changing a problem of today into a problem of tomorrow!





   JLJac on March 14, 2013, 10:30:46 AM:

Horrible hack: applied!

The solution completely relies on that swarm rooms only have only one entrance, which is - in my defence  - something I plan to stick to. Still, a beautiful solution would be dynamic and work in all scenarios, even those that are not included in the game. Still still, in my mind a beautiful game is a game that ever gets released...





   jamesprimate on March 14, 2013, 08:14:56 PM:

How much of my money must I give you to make this game happen.

now this is what we like to hear!  Hand Money Left Cheesy Hand Money Right





   JLJac on March 15, 2013, 01:14:17 AM:

How much of my money must I give you to make this game happen.
Why don't you just keep it coming, sooner or later you'll know what's the right amount  Grin





   JLJac on March 20, 2013, 03:32:09 AM:

Oh, wow!
I found out because my email was suddenly overflowing with notifications that people are subscribed to me on youtube... She says she hasn't been able to reach me, that's no good. I'll send her an email, I guess. Sooner or later I ought to make a website for this thing, so that stuff like reaching me won't be an issue.

To the people from Rock, Paper, Shotgun,

Welcome!
A few months ago I got the idea I should go to africa, and well, here I am. Because of this development of RW is somewhat slowed down, but I count on being back on a more regular schedule within a month.
Until then there's quite a lot of material back in the thread, if you're interested. Glad to have you on board!





   JLJac on March 23, 2013, 12:45:18 AM:

Thank you all for being interested!

The game is created in Macromedia Director and written in Lingo (At first I considered writing the game in iron-age runes on stone slabs, but then I settled on going with a slightly older and more traditional development environment).

It's very hard for me to estimate how far through development I am, as I've made the estimation "50%" about seven times already. Today I am definitely beyond 50% though, as pretty much the only things I can think of are: The menu, some more art, four-player support, joystick support and the menu art. If not on the final 10% I'd say I'm somewhere in the final 20-30.

At this very moment I'm living under very african conditions (I can literally see goats outside my window when writing this), which I have taken as an excuse to keep development on hold. Fact is I probably just really needed to take a break from the project, after one year + of development.

Very soon I'll move from the small town to Accra, and start at a desk job and live in an apartment. Then I'll try to get back to a strict minimum 1 hour a day schedule. Likely things will go quicker than expected then, as I'm fully confident in how to do all the remaining things that have to be done, it's just a question of sitting down and doing them.





   jamesprimate on April 04, 2013, 09:21:02 PM:

what! i leave town and rain world gets featured on rock paper shotgun??

i should leave the house more often  Tongue





   JLJac on April 08, 2013, 12:51:24 PM:

i should leave the house more often  Tongue
Hehe! The universe doesn't work that way ~  Tongue

People, I'm slowly getting back on my feet after a mild case of malaria  Epileptic
And now I bring you update... eh... where were we?

Update 133
Today I implemented saving and loading. The game has two save files, one for co-op play and one for single player. The files are encrypted, so you can't mess around with them. If there's no file the game will create one etc etc.

As you get back to the den after a successfull hunt the game is automatically saved, and when you hit "Continue" in the main menu it's picked up again.

Things seem to be working out just fine. Objects that are moved will, for example, be found at the same place after loading. Lizard are a little more complicated, as I don't want them to be found at the same place after loading. Pretty much the only data I want to save with them is their health, otherwise I'm happy with them emerging from their holes as if they had never existed before. I guess the easiest approach to this will be to just loop through them on save and delete all data that's not health-related.





   JLJac on April 09, 2013, 12:59:11 PM:

Update 134
When messing with save files some new problems emerged, because of some special cases that didn't occur if you just played a fresh world every time. So I rewrote the code that loads lizards from memory, in order to be able to be more selective about what to save and how when I save a lizard. This way I can for example save the health of a lizard but ignore it's position. It comes in handy when you end a hunt in world mode and want the lizards to have crawled back into their holes, but their injuries to be intact.

The current system supports the following scenarios:

Lizard has not spawned yet
Lizard has spawned offscreen, and should be generated out somewhere in the level
Lizard is saved as alive, and should be recreated close to where it was last seen
Lizard is saved as dead, and a corpse should be recreated on the same spot
Lizard is saved as dead and not on the screen (for example if it has fallen out of the level), and should simply not appear at all

Seems to cover it, right?

Everything's working out fine in the artificial de-bugging scenarios I've been running, but with stuff complicated as this it's hard to know if something has escaped me.

In short, saving/loading seems to be pretty much done by now. The next big step in getting the single player campaign up and running will be the between-level screen, which should have little animations showing how many flies you've caught and so on.





   JLJac on April 10, 2013, 01:48:46 PM:

Update 135
Dear readers, I'm happy to say that single player is up and running!
You go out into the world, follow the flies to where they're swarming, catch as many as are required, and then head back to your den. If you have enough flies, you're brought back to the "den" screen, and the game is saved. From here you can either get started on the next hunt, or you can quit the game. The next time you load it your progression will be saved.

What I did today was mainly to connect huge building blocks that were all done - saving was done, swarming of different rooms was done and so on. But today I could really see the flow of the game for the first time. Still haven't really played it though, so I can just imagine all the tweaking it's going to need.

Aside from that I also sorted out a few quirks and gave some things cleaner solutions. For example, if the requirement for this hunt is to catch 5 flies, and you enter the den with four flies in your stomach and one in your hand, it still lets you in. That kind of stuff.

Oh, and items your bring into your den at the end of a hunt will reappear on the ground outside the den the next time you start playing. I think this will be neat in co-op, you'll be able to collect a little "armory" outside your den and run through it to collect some weapons before heading out into the world.





   JLJac on April 11, 2013, 12:35:24 PM:

Update 136
Today I made it possible to change the screen resolution from the menu. The game's resolution will always be 1024*768, but if you have a widescreen you might prefer black borders on the sides to a stretched image.

Also I wrestled for a bit with a glitch that has been around a long time. When you exit one room and enter another there's quite a bit of data for the game to load, and it's loading it all in one frame. For some reason Director has a thing where it pauses the sound if a frame drags on too long. This messes up James' beautiful music tracks, the beat is broken by the hiccup. Today I divided the load so that some of the heavier parts are spread out over a few different frames.

The hiccup has become clearly shorter, and in some cases doesn't appear at all. The problem is the lizards mapping out what part of the level they have access to, for intricate levels this might take almost half a second per lizard. I'll see if I could possible divide it even more. It really helps the immersion to have the sounds play continuously across levels.

Oh, and here's my sketching up some logos:





Here's the one I'm most fond of right now:




I'm going to travel a little, so things might be a little slow here for a week. See you!





   jamesprimate on April 12, 2013, 04:35:46 AM:

ahh cool! im no visual artist, but i personally like these, because of the legibility AND because is looks sort of like some of the in-game environmental elements:





Here's the one I'm most fond of right now:




this one the stylization is really really cool BUT its a little illegible... "pain world". I think if its cleaned up just a bit it will look pretty awesome though.

One odd thing that I have an opinion on is having the lizard on the titlescreen. This may be just my silly opinion, but for some reason, I think it might spoil the spookiness of the first few lizard encounters by being confronted with it when you first start up. I liked having the initial impressions being about the bear and the environment and rain, with the lizards being this kind of lurking unknowable death in the shadows. Makes them more terrifying IMHO.

just my 2 cents!





   JLJac on April 12, 2013, 07:00:11 AM:

Hm. The lizard thing is a really good point. Perhaps the title screen could show off some more environment instead - it could still feature the "growers"(I hesitate to call them plants) that are a pretty iconic element of the RW environments.

The legibility issue is also something I should look at. The R should read R, for example. I think the type might need to have some more work done on it - it can most likely be made made more legible while retaining some of its graffiti-ish aesthetic. The drooping I versions are much more legible, but to me they look a little to "fantasy" and lack a certain "early cartoon" kind of vibe that I really appreciate in the other one.





   JLJac on April 21, 2013, 12:51:14 PM:

Update 137

Today I added a little HUD detail, an indicator on the starting screen to how many flies you have to catch this particular hunt.



Later I'll upgrade it with actual graphics. The functionality is in though, it shows how many flies are needed and how many you have.

Other than this I added a new thing - saving flies in the den. As some of you might now, the basic premise of the game is that deadly rains haunt the place for several days in a row. The... creature you play needs food to survive, so when the rain briefly stops it goes out to hunt for bugs. It knows how many days the next rain will last, and has to catch one bug for every day. The game is divided into these "hunts". As the rain season goes on the rains will be longer and longer, demanding you to catch more and more flies in the same limited time.

The saving bugs feature means that if one hunt demands 4 flies, but you catch 6, you'll have 2 at the beginning of the next hunt. I don't know about whether or not to keep this, it seems a bit cheap. Maybe only half of the excess should be stored? That would create complicated rules that would have to be explained in text rather than visually, which is never a good thing. Hm...

As the creatures are clearly shown as eating the extra flies in-game it has to be assumed that they throw the food up again, especially since in co-operative the players share the same numbers. And then it comes to how long a thrown-up bug would last in a inevitably moist animal den, which is something that's too squicky for me to be compelled to simulate in code.

Let's see where to take this feature. It might stay in, and it might not. In either case, catching excess flies will be the way to measure the high score of a campaign playthrough.





   jamesprimate on April 21, 2013, 04:22:45 PM:

Blink





   JLJac on April 24, 2013, 11:01:51 AM:

Man, never until I had one did I realize how fulltime a fulltime job is... It like... fills up your entire time.

Update 138
Today I worked some on the menu layout to have it make more sense. The most complicated menu screen is no doubt the Custom Game screen, so I started with that hoping that everything else would feel easy afterwards. Now I have the layout:



and also the functionality, so it's just a question of applying one on the other. And draw the actual icons and stuff, of course. These symbols are place holder.

The big squiggle will be the game type title, similar in style to the game's title screen. The arrows on the sides cycle through the game types. Between the two lines are the game type options, complete with level tier. The four little ellipses represent the players, you click them to toggle their participation in the game (four player mode is something I'm hoping to do, but I've not actually tried it so I'll have to see how the engine is able to handle it). Here I'll use the in-game sprites, they'll animate between the standard standing animation and a sleeping animation. Other than that there are some small buttons doing some small but necessary things, such as resetting things, scrolling and so on.

I think that I'll have the "all levels list" on the left dissapear down the edge of the screen when not used, in order to make the whole thing perfectly symmetric.





   JLJac on April 24, 2013, 11:08:11 AM:

@Wolfbane
Hey thanks! I really like your stuff. However, I already have a music/sound artist on board, James Primate, who has made no less than 15 (!) awesome tracks for me as well as some sound effects. So we don't really need any more music. But you could always contact James, he's the one in charge of the music and maybe he has some ideas. He's on these forums.





   JLJac on April 26, 2013, 01:44:43 AM:

Update 139

Yesterday I did some small but important changes, most notably changing the hard coded "if key is pressed" solutions for input into an actual input system, that I copied straight from my old game block towers. There's still no way to set up your controls, but I should get to that. Another thing I did was to save the options to a file in a similar manner to the save games, though not encrypted.

And I made this mock-up for a pause screen:






   JLJac on April 26, 2013, 12:10:03 PM:

Hm... I've been pondering on that and think I'll actually not. I think there's some interesting graphical contrast between the crazyness of the title script and the strictness of the menu texts. Something like this works well, according to me.



The title here is of course not supposed to be "rain world", but a name of a game type instead.

EDIT: And this is when I realize that I've based my menu layout on a 600x800 canvas while my actual game is 1024x768. Well, I'll have to scale it I guess. The proportions should be the same.





   JLJac on May 04, 2013, 12:18:44 AM:

Wow, that video was really cool!
As for the graffiti, I'm still kind of searching for my style... I knew from the start that I wanted the interface to have some sort of black and white graffiti, but I didn't know exactly what it would look like - that's what I'm trying to nail down now. I don't want it to be "cute and curly", rather I think what I'm going for could be summed up as "stange". We'll see how I'll get there.

As for the  Hand Money Left Hand Money Right I plan to release the game for free - that way no one can complain about it being buggy and unplayable hehe! I might put up a donation page though.

Update 140
I'm sorry for not writing here very often these days. It's for your own safety though, as you could easily die from boredom if I put all the things I'm currently doing up here. I'm doing... interface stuff -.- So, basically, I've been implementing stuff like sliders for sound and music volume, different kinds of buttons, frameworks for how buttons will handle highlighting, checking if the pointer is above them, and so on and so on.

The main reason why this is so time consuming is that I'm making the entire interface accessable through both mouse and keyboard. I think that will be a really nice feature in the end, especially for those players who prefer to use a controller (which reminds me that I probably should add joystick input too... but that'll go under the keyboard framework).





   jamesprimate on May 04, 2013, 01:26:14 AM:

I think you should at least make it pay what you want - to make the donating more part of the download process Grin.

listen to this man Joar. Its time you embraced commerce.

embrace it.

and embrace gamepad support.





   JLJac on May 04, 2013, 03:30:13 AM:

...embrace commerce...
Hahaha Cheesy
It's just that there's this really annoying bug where the player suddenly falls of a ledge at the speed of light, which leads to some really unfair deaths, and which I don't at all feel like tracking down and fixing ~ And that makes releasing the game for free the logical conclusion, as no-one can say anything as long as they didn't pay for it...





   jamesprimate on May 04, 2013, 10:20:11 AM:

in a game where you die 10,000,00 times during NORMAL play, you think that an occasional bugged death breaks the game?? Hardly. I've logged in probably 20 hrs of RW and haven't encountered it once.

also, it's not like games are released as some perfect ideal of coding perfection. every single one of them has flaws and unfix able things, but that doesn't stop them from being released and people enjoying them. Fez was for some people an unplayable mess: http://www.bitloaders.com/2012/07/19/fez-developers-will-not-be-fixing-game-breaking-bug-in-patch-re-release/ but that doesn't take away anything from its "worth". It's just a part of what game development is. everybody who buys games understands that. I can't even count how many huge budget AAA games I own that are buggy fuckups, I'm sure that people will understand when you, a lone game dev working in macromedia director, have a few rough edges.

plus, why not just release it, then do a patch or an update when you feel like sifting through? or hell, just get someone to do it for you (I know 10 programmer friends that would do it in a heartbeat!)

you've spent a huge amount of time on a really really awesome game and you are in the final stretch of the race. it's worth it! go all the way!





   JLJac on May 05, 2013, 01:05:40 AM (Last Edit: May 05, 2013, 01:51:29 AM):

Hehe thank you James!  Smiley

There's another argument against the "pay whatever you want" idea though - it requires people to have paypal or something. For me, the first objective is very clear: I want people to play my game. If I can collect some change in the process that's fine, money is fun. It's just that I don't think it's worth it if there are people out there who go "oh, you have to have a paypal account... nevermind then". I know I would. In that case I get neither money nor a player :/ It all comes down to the golden rule, I think. Do I like it when people charge me for their games? No. Or actually, I feel completely indifferent about it, because I won't even play the game. I haven't payed for (or illegaly downloaded) a game in something like five years - the few hours of playing games I've had during those years are all from the ever depleting pool of "download for free indie" games.

And on top of this I don't even know if it's possible to legally purchase the software I'm developing this on any more.

And And I have no idea about how to implement some kind of copy protection, neither am I very interested in it as I view that kind of programming as counter-productive. Who wants to sit down for 36 hours and code a device that keeps people from enjoyment?

What it all comes down to is that if I use myself as a template for my audience, paying makes the entire difference between actually playing the game and not playing it. Put that next to my priority list - players over money - and the outcome seems clear.

That's my logic, at least. I don't know if it makes sense to anyone else?

Update 141
More menu stuff. Made the game smarter in some regards - for example now it doesn't keep an entire world map in memory while playing a custom game, and it doesn't keep a custom game handler in memory when playing the campaign.

Also the pause menu is now working properly, and I have the framework for a game over menu. Oh, and the game now supports game pad for the menu, if player 1 is set to game pad. Basically the menu can always be controlled by arrow keys and space/enter, but it can also be controlled by whatever input player 1 has set up.



Noticed a bug where when a croc picks up a spear the spear will be displayed above both its upper and lower jaw, making it look like it's just kind of... glued to the side of its head. The correct way for this to be is that the spear should be above the lower jaw but behind the upper jaw, making it look like the lizard is pinching it in its mouth. This has to do with me changing the spawn order of lizards and spears a while back, so I'll just have to go take a look at that.





   JLJac on May 06, 2013, 01:33:20 AM:

Hahaha never in my life would I suspect so many people would ask to pay for something!
What about kids without credit cards, then? Or maybe stuff has changed since I was a kid, I guess these days they get their weekly allowance in bitcoins or whatever.

Perhaps I could make the game accessable in two ways: either you pay what you want (even 0), or (if you're a kid, or flat broke) you can send an email explaining why you can't pay for the game, and I'll send an email back saying "no worries buddy" and the game attatched.





   jamesprimate on May 06, 2013, 10:50:32 AM:

there was a time when the novelty of getting everything for free was a big deal, but I definitely think that the current culture of the indie games scene (and indeed a lot of other artistic scenes) has moved past that. people want to show their support. they ENJOY it, it makes them feel like part of the process, champions of their preferred art form, and that is important to them.. the insane success (and excess!) of kickstarter funding is vibrant proof of this. every day my twitter feed is assaulted by hundreds of my friends rallying around one new project or another. it means something real to them.

think of it this way: for a normal person who enjoys videogames, how else would you be able to influence what sort of games come out? they're not paying out of some sort of charity! they are paying because they enjoy it and want the developer to make more games, perhaps in that style or with that unique aesthetic. and fellow creatives want to celebrate their fellow developers successes as well, much like you would buy a friend or colleague a beer or cake for their birthday or some special occasion. as is evidenced by this thread, your friends want to take you out for a beer, let them  Toast Left





   JLJac on May 06, 2013, 12:13:26 PM:

If that's the case, then that's amazing! I guess you're right in that the gaming world, especially the indie one, is very different today.

And if it's like you say, that people want to give money to the projects they enjoy, then I'd certainly enjoy recieving some of that money. If not for anything else, at least because it would be proof that people enjoyed my work Smiley

Still, I remember when I was a kid and me and my friends used to play games during lunch break - if you had to pay, or if there was any kind of hassle, we would simply treat that game as non-existent. We played only stuff like Liero, that you could download in less than a minute and be playing in less than two.

I don't know... In the end, I'm pretty much decided in that there will be a way to download and play the game for free. But if there are people who want to give me some money, there should definitely be some way for that to happen too.

James, you and I have been talking about this before, but I don't remember what we settled on? Donations?

Update 142
Made it possible to re-map the keyboard controls. The excitement! Yawn Still it's cool to see how these things are coming together. I could make my way through the menues with the mouse, change the controls for player 1, make my way back with those new controls, start up a custom game, hit esc, see how the menu reacted to player input, go back to the menu, etc. It's a flow of... working stuff, which seems awesome in comparison to the separate shards this project has been up until now.





   jamesprimate on May 10, 2013, 11:54:42 AM:

James, you and I have been talking about this before, but I don't remember what we settled on? Donations?

i think we talked about it for a bit, but then got bored of talking about it, and were like "eh lets talk about this later", haha.

i think donationware is a really cool way to do it. i also like what hofmeier did for Cart Life, where there is a freeware version, then some bonus $ versions that include extras and memorabilia. that might be too much of a hassle, but i like the idea: http://www.richardhofmeier.com/cartlife/

basically im saying that because I want a rain world creature plushie doll   Well, hello there!





   JLJac on May 11, 2013, 02:07:47 AM:

@Jubjub: Thanks!
@James: Hehe I promise you, if this brings in enough money to make a stuffed toy, then we'll do it, even if it puts us back to 0! Plushie dolls always pay back tenfold, rule number 73 of capitalism.

Update 143
Work has totally flooded me these last couple of days, which is, for some strange reason, no only a bad thing. When you can't get the time to work on your own projects you tend to be thinking about them in the back of your head, and when you suddenly get that one hour of precious free time you make power progress  Hand Thumbs Up Left Mock Anger Hand Thumbs Up Right

Yesterday's power progress included hooking players up to their controls, changing the input system so that hard-coded uglyness was taken out (at one point I just wrote "if keyPressed("K"), completely ignoring whatever controls the player had set up. Seriously.) and making it possible to activate and de-activate players for the custom game type. For the first time ever I spawned four players on  a level:


(Player colors are subject to change, perhaps)

It seems to work. Then there are of course two different kinds of "work", one means "doesn't stop and throw error messages in your face" and the other means "plays well and is balanced enough to work as a game". The second of these I know nothing of at this point. But the lizards don't seem to be too confused, at least.

Next up is game pad support, which is going to be interesting as I'm in africa and I don't have a game pad. My idea is that I'll copy the code line by line from Block Towers, and then send a version to James to try out. We'll see how it goes. Worst case scenario I'll have to postpone the game pad stuff until I get home in two months.

I think the fact that I actually accept that the game will not be finished and released in eigth weeks time reflects some kind of new found maturity - the last year I've continuously been beliving that I'm in the last two weeks of development. Still, at this point it might be a reasonable estimation to say that the remaining devlopment is closer to two months than it is to a year.  Grin





   JLJac on May 11, 2013, 02:35:09 AM:






   JLJac on May 14, 2013, 10:07:14 AM:

Update 144

Working on portraits -



Any input?





   JLJac on May 14, 2013, 10:41:41 AM:

Hm... When ypu say it, 15 is good, but the head is a bit too flattened for me. If I could give it a little bit more of the head shape of 10...

Oh, and since everyone is doing it, here we go:


I'll put it on the first page, to give people an idea about what's up motion-wise.





   jamesprimate on May 14, 2013, 10:57:06 AM:

yeahhhhh +1 for scar definitely





   JLJac on May 14, 2013, 11:50:14 AM:

Yeah, you're absolutley right, it shouldn't be too anime. I don't want it to look like a pikachu clone.


(Pikachu clones)

So this is what I did - 10 and 15 had a baby. Then I refined that some, and then I slanted the eyes. For the last one I changed the nose (good) and the jaw (not so good).

Still need to make it less anime... The creature in the game is not exactly cute, it has more of a strange, blank expression. If anything I want it to remind of a 1930's cartoon, I'd like it to have a tiny touch of this:



So... how can I make it less pikachu?  Huh?

Hehe @Jubjub, I know that the artist should leave the interpretation to the audience, but this time... I'm sorry it has never been a mouth, it's a nose Smiley





   JLJac on May 14, 2013, 12:07:30 PM:

Tried following this gentleman's advice, and I can't say I dislike it...






   jamesprimate on May 14, 2013, 05:46:56 PM:

hahah I've always thought it was a mouth too XD

maybe the eyes are what is making it seem a bit cutesy. in the sprite version the eyes look so EMPTY, like "I've seen some shit".





   JLJac on May 15, 2013, 03:05:24 AM:

Started experimenting with giving the four players small, small differences. See if you can spot them!



hahah I've always thought it was a mouth too XD

maybe the eyes are what is making it seem a bit cutesy. in the sprite version the eyes look so EMPTY, like "I've seen some shit".
Lol!  Cheesy
Yeah, wanna get to that empty stare...

Somehow, I have never seen this project until now. I just read through the first 18 pages + the last few, and I'm feeling a little blown away.

The effects look great, from the hanging chains and wires to the light bloom that you have in some pics. Gameplay of course looks amazing as everyone has pointed out, I love how the animation blends into the actual mechanics, which look very fun in their own right.

I think the decision to go with a hub world won't have as many downsides as you predict (or at least, predicted). Maybe the time of day and such won't be able to change, but by manipulating the tile set you can still get a feeling of progression - one area is more or less stony/industrialized/etc.

Also, I tried the runnMaze2 demo, but it seemed kind of glitchy. I couldn't figure out how to jump with either player (tried all the usual candidates), and with the brown character, movement was mapped to ESDF instead of WASD, which - if intentional - seems very, very unwise.

On a final side note, it turns out a game I've been working on for the past month-ish is very similar to this, with the notable exception that yours is far better. :/ Oh well, I guess it will give me some ideas on how to make my game, ie, avoiding the stuff you're already doing - I don't want to make a total ripoff.

edit: Jump is K/Q? Why...

Sorry about the unconventional choice of keys... When I made that thing I was too lazy to look up the key codes for stuff like shift and control, so I mapped all the controls to letter keys instead Tongue The actual game has customizable controls.

I know that the game is feeling a little bit hacky, and that's sadly just the consequence of me not being the best programmer and my software being old and limited. This game will be far from perfect, but I hope people will be able to look past the sometimes amateurish execution and appreciate the things I have accomplished and am proud of. To me just making a game is an accomplishment in itself, be it with glitches and hacks.

On the hub world stuff I've solved it in a strange way - there's an area in the middle of the map that's underground. Around it are different areas, with different sun/weather conditions. You can't pass from one area to another without passing through the underground area. That way different times of day/weather conditions can exist, but you never have the super-obvious thing where you go from one screen to the next and the weather changes, as the underground always works as a buffer. It's a stretch, I know, but I have high expectations on my audience's willing supspencion of disbelief Wink

I wish you the best of luck on your project, and am much looking forward to seeing what you're up to. Will you be starting a devlog any time soon?

This is the most amazing thing I have ever seen, why have I not heard of it until today?!  Waaagh!
All the animations are so smooth and delicious!


By the way, I read way earlier in the thread that lizards do a sort of head vibrate with particle effects to indicate they heard something?  If they still do that, why not make them cock their head up and listen,

?

That sounds way more readable.  Grin

Thank you! When it comes to the body language of lizards, I too would like for it to be subtle like that, and believe me, I'm the first one to get involved in tiny little details! However we're talking about very small sprites here, and when a player is moving around they're not currently looking at the lizards, but at their own avatar. I had to make what's going on in the lizards' heads more loud and obvious, why I added the particle effect. That said, a lizard that hears a sound will change the angle of its head and freeze for a moment before setting off to investigate.





   jamesprimate on May 16, 2013, 09:46:30 AM:

Started experimenting with giving the four players small, small differences. See if you can spot them!



These look great! Just adding that pixelation seems to abstract them enough to make them mysterious. And the scarring is totally cool.





   JLJac on May 19, 2013, 01:11:05 PM:

Sorry, no. Not unless the game reaches a level of success where someone else re-codes the whole thing for xbox or something  Wink

Update 145
We now have a fully functional, and not too ugly-looking, options menu. You can set advanced graphics on and off, you can set the music and sound volume, you can change the screen resolution, and you can change the input for all four players. The icons for the buttons are not done, they should look like something sensible and not right pointing arrows. Speaking of which, can someone come up with a good symbol for "Define keys/joystick buttons"?



Except from defining keys you can also define the joystick input, which has its own screen which was a horror to create:



Here you can not only define the buttons, but also test them, so as to not have to start a game everytime you try to find out which is button 14.

In theory we have a working 4-player game with customizable joystick support. In practise I have no idea what we have, as I'm far away from home and don't have a joystick or three friends to try it.

James, do you have a gamepad?





   jamesprimate on May 19, 2013, 04:57:11 PM:

I do! Xbox 360 controller thing. send it over!





   JLJac on May 20, 2013, 03:39:30 AM:

Hahaha the insanity! Someone with 0 posts on the forum, meaning they created the account for this only, just sent me this in a PM:

Would something like this do the trick ?



Sorry for quality, pixel art on phone is not easy :D

And indeed, it would do the trick. I'll redraw it myself though. Thank you so much, stranger :D

btw this pink color looks a lot like white. and... it's pink!
is this color option more or less set in stone? how about some other choice in it's place, like gray?
The pink was a temporary thing, but then it kind of stuck. But you're right, I might need to think twice about it. Gray is no good though, as the backgrounds are grey.

I do! Xbox 360 controller thing. send it over!
Yes sir!

If you need any extra help, I've got 4 wired controllers and people to play it with. Smiley
Maybe... I'm always hesistant to sending the game to people I don't know, but your offer seems very tempting... However, James needs to check two things first: That it recieves Joystick input at all, and that it's possible to move the character with a joystick.





   jamesprimate on May 20, 2013, 09:17:11 PM:

just emailed this to JLJac, but heck, since people are interested why not loop everyone in?

"Yessss, joypad/joystick works! Controls are a pretty fluffy (as you assumed, anything other than a direct up/down/left/right on the pad makes problems), but the stick moves the lil guy around and i was able to change buttons and such. Not bad considering you are doing it blind!"

also, he has a really impressive amount of customization for controls and sandbox mode. you can basically do... anything.





   JLJac on May 22, 2013, 04:30:02 AM:

Yeah, sandbox mode is gonna be fun. It'll keep track of flies caught, eggs captured, lizards killed and so on, and just present the numbers without choosing an official winner - that way you can play with/against each other towards whatever goal you agree upon. It'll allow you to play on any map against any lizards, and you'll have full control over all the settings.

Update 146

Buttons:


And a little animation for the player:


This one is not going in the game, which is animated with programming, but is for the menu. The custom game screen has the four players standing at the bottom of the screen, and they can be clicked to switch between awake and sleeping to determine which players are in for the game. This is the transition animations between awake and sleeping.

In other news I moved the player colors from being hard coded in the player object to being defined in a list at startup. This means that they are now teoretically completely customizable, though I doubt I'll let people set them with RGB-parameters, liero style. Maybe you will be able to find a collectable in single player that unlocks new color choices? I don't like things like that too much as they're slightly out of canon - it's hard to tell whether they are actually supposed to be part of the world or if they're a gamey thing slapped on for the players. But it does add a little replayability.

I became a little bit tired of all the menu stuff and spent a few minutes adding a new object, a bait. Basically it's the same as a rock, except you can't throw it for damage and when it sits on the ground it attracts flies. It's funny how easy it is to add stuff like that compared to how annoying it is to just add a new button in the menu. The bait likely won't have a big role in the game at all, but maybe it'll be somewhere on the single player map just for fun.





   JLJac on May 22, 2013, 10:33:38 AM:

Thanks, I guess Smiley

Here's a pic of some new graphics I implemented today:


(Click for full size)

Just add James's music  Cool





   jamesprimate on May 22, 2013, 11:47:05 AM:

Thanks, I guess Smiley

Here's a pic of some new graphics I implemented today:


(Click for full size)

Just add James's music  Cool

OH MAN. THAT PIC.

so cyber sexy.











also i want to go on record saying that i really like the pink character. but, hey maybe i just like pink things.  
¯\_(ツ)_/¯





   JLJac on May 30, 2013, 01:44:29 AM (Last Edit: May 30, 2013, 08:27:49 AM):

Man, that image is incredible. Are the fans on the side animated?
Sorry, nothing is animated :/ The whole thing is just one big picture, that takes about 10 minutes to render. The sunlight is able to fade back and forth though.

Would this possibly be used while the game is loading, too? It'd make a cute loading icon!

Excellent idea lad!
At this point there's no loading time longer than one or two seconds, so hopefully that won't be necessary.

Update 147
I've been doing a lot of work, but it hasn't been the interesting kind of work, which is why I haven't been posting. For example I re-wrote the code for how lizards behave in relation to eggs, so now it's more or less working again. I also moved one of the filters that's applied to the levels - earlier it was applied when saving the level, now it's applied when tha game loads it. It adds a few fractions of a second to the loading times, but it cuts the size of the level files in half.

Other than that I've been doing a little bit of level design, for the tutorial levels actually:



There will be three of them, and they'll teach you how to run, crawl, jump and climb. When you're finished with them you'll enter the hub world, and won't be able to return.

Apart from all this I've started to modify the level editor in order to support a big change - a function that will render all the levels in one long go. The process will probably be several hours, but I hope that it'll be able to do it in the background while I use the computer for other stuff. What I've gotten done so far is: 1, the level editor is now able to render a level without showing it on the screen, speeding up the process somewhat. 2, the level editor now saves and loads the light mask. Earlier you had to re-draw what parts of the level you wanted to be lit and what parts should be in shadow every time you wanted to render it. Being able to render a large number of levels with the press of one button will make the creation and modification of bigger chunks of the hub world much more effective.

Edit: The mass renderer is up and running! I can select an entire list of levels and it works its way through them. I figure it's torture to the processor and RAM, but it's possible to do other stuff (such as writing this) while it's rendering. It's always an awesome feeling when you get a powerful dev tool working.

Edit edit: Aaaaand there's a bug. -.- Gotta track it down.





   JLJac on May 31, 2013, 05:31:34 AM:

Hehe! Got it to work Tongue

Another interesting thing that happened yesterday was that an extension I used suddenly became aware that it's actually a trial version, out of nowhere. And for the trial version I'm only allowed to use two functions, so I was robbed of the cryptation function I'd been using for the save games.

However, I used my brain and decided that I was perfectly able to understand how basic string cryptation works, and wrote the functions myself. Basically, I convert each character to its ASCII number, and add to that number the corresponding character in the key string. The decryptation works the same way, but with subtraction.

I'm pretty sure there's a way to decrypt this, especially if the key is short enough to see it repeat, but honestly, if you're gonna go through that trouble you're welcome to mess with your save file. The only thing I want is for it not to be too tempting to just open up the save and give yourself 10 000 spears.





   JLJac on June 01, 2013, 10:45:18 AM:

Update 148
Created some counters for stuff such as kills and eggs captured. If you throw a spear on a player or a lizard it's counted as your kill. If you throw a rock at a player or a lizard causing it to fall off the map it's also counted as your kill. If you throw a rock at another player and he's eaten by a lizard before his stun wears off it's your kill, but I don't know about that one as there are many other ways to kill a player indirectly, which are much harder for the computer to recognize. For example you can kill someone by blocking a corridor, and then the question is raised whether that kill should somehow be attributed to you as well? idk...






   JLJac on June 03, 2013, 12:56:55 PM:

Lizard-egg behaviour:






   JLJac on June 05, 2013, 03:07:44 AM:

If people are interested, I could go into more detail. The very basics of it is very... basic. You only need two functions: one to determine the distance between two points and one to give the direction as a vector from one point to another. With that you can emulate "chains", i.e. points moving about freely but being stuck to other points at certain distances.

So in my game, the player consists of two such points (upper/lower body) and the lizard consists of 3. Then I attatch to that additional points for limbs and so on. For example the tails of the creatures are several such points chained together.

On top of this stuff I draw the creatures, using simple sprite mechanics such as rotation. For example, the arm of a creature is drawn at the shoulder and then rotated towards the location of the hand point.

This is the reason why the creatures are one, solid color. In fact they consist of several sprites overlapping each other in awkward ways, and if there was any kind of shading on the sprites this would be visible. If I worked in a more reasonable software I could compile the whole body of the creature to one picture and then shade it, but I'm not, so the flat colors are staying. Instead I've tried to adapt my style so that it'll look ok.

When it comes to the more specific movement of limbs and so on it's a great deal of faking going on. The lizards for example do not grab on to stuff and pull themselves forward. Instead they move about with a magical force pushing them in whatever direction they are going. When a limb is too far behind the body it goes into a "search mode", looking for possible grasps in front of the lizard. Such a thing might be a wall, a pole, a platform or whatever. When it finds one, the limb connects to it, and then passively stays there until it's left behind by the body again. The magical propulsion force of the body is dependent on how many limbs are currently connected to terrain, making the speed of movement uneven and synced to the movement of the limbs (few limbs grasping - slow movement of the body).

If there is demand, I could make a more in-depth technical tutorial.





   JLJac on July 02, 2013, 02:07:13 AM:

I'm sorry this thread has been hibernating a while now - I'm going home in a few days, and because I've needed to finish a lot of stuff up before that date I've been very busy. Once I'm home the situation will be very different though (lots of time for development). You'll see the next update some time next week, when I've gotten home and settled down after 7 months of africa.

I would happily take a more technical tutorial! that is awesome that you wrote up what you have already though, and it works somewhat like I suspected it did! Kinda sorta IK implementation. One question that pops to mind though, if you have a propulsion force that is based on the number of limbs down, but that is unpredictable, are all of the character speeds in the game unpredictable? Or is there some other driving force at a higher level? Also, are these the same systems that drive the player characters in the game?
I'll write one up for you!
The variable movement speed is only for the lizards, the player has a constant speed and the movement of the limbs is purely cosmetic. For the lizards though, the answer is yes, the speed is unpredictable. However they do have a weak propulsion force even when no limbs are connecting at all, to not get stuck.





   JLJac on July 10, 2013, 07:06:47 AM:

Update 149
We're still stuck in UI hell, but at least something's happening. Because I don't seem to be able to create the design, I thought I'd skip ahead to the raw functionality, and that has been working better. Here's the "den screen", i.e. the screen you look at between levels:



What's going on here is this -
Up left is the calendar, showing all the days you need to survive. The marked days are the days when there's a paus in the rain, hunting days. The player is just coming in from his fifth hunt. Down in the corner is the pile of bugs. As you can see, the pile starts at seven, that's the excess from the fourth hunt.

The player has caught 9 flies, these are added to the pile. Then the calendar starts to move, and 7 days pass. Each day one fly is removed from the pile (eaten or digested or whatever). Finally we arrive at the sixth hunt, with 9 flies still in the stock pile.

As you can see, this means that there's no need to go out hunting the sixth hunt, because there are only seven days until the next opportunity. This is true, and the game allows you to just go straight back in the den if you want to. I think I like the ability to hoard flies like that, it creates more freedom for the player to play with their own style. When you reach the very end of the campaign, your flies stockpile will be your high score.





   jamesprimate on July 10, 2013, 10:48:31 AM:

whoa, are you back home JLJac?





   JLJac on July 11, 2013, 12:31:15 AM (Last Edit: September 25, 2013, 01:10:49 AM):

Yeah, I'm finally back in Sweden again! The reverse culture shock is kind of freaking me out  Shocked

Thank you all for supporting me, and bothering to read this despite me only posting boring UI stuff. Believe me, I too wish this was done so I could wrap up the game world and release this thing. Not too far away though.

As a thanks, here's a .gif showing me trying to keep a couple of lizards at bay by throwing rocks at them.


Update 150
Created a placeholder "end of custom game" screen, which seems to be working OK. Also made the level editor save, and the game load, a menu color for each level - that way the shade of the pause menu looks nice together with the overall palette of that specific level.





   JLJac on July 11, 2013, 01:57:27 AM (Last Edit: July 11, 2013, 02:06:18 AM):

Hi Graham!
I'd love to do a short interview, and if you need me to provide any material I'll do that too Smiley

However, for any press stuff, I want it to be crystal clear that this is not a cool new game in development, but a guy goofing around on his laptop and making some glitchy mess that could potentially be interesting from a theoretical perspective.

I think that what hype always does is making 75 feel like -25, because you were expecting 100. That might make sense if you're selling something and need the hype, but I'm not, so I prefer to keep expectations low. However, I'm always flattered when someone shows interest in the project Smiley

I'll shoot you an email!

This thing will revolutionize "simple" 2d game graphics for real. So amazingly beautiful!
Please tell me there will be a mac build.
Sorry, not unless some deus ex machina descends and offers to code the thing for me :/ Don't worry though, as a game the thing is kind of frustrating, it might very well be that the best way of enjoying Rain World is through gifs  Tongue

Edit: Oh, hehehe, just saw this.... I'm not back from sweden, but I'm back in sweden. Hope that doesn't mean trouble - if it does your interest is still noted and added to my energy meter!





   jamesprimate on July 11, 2013, 02:30:26 AM:

^ joar, you MAY be just too close to it to know how fun it is for someone playing it for enjoyment rather than to debug Tongue its one of the most viscerally exciting (and terrifying) games i've played in a long time!

but one can definitely appreciate the old mr. scott wisdom of "under promise, over deliver"






   jamesprimate on July 11, 2013, 08:35:05 PM:

How .. is .. this possible? Is it all in-game? Addicted

You sir are a master game maker.

not only is it in-game, its *typical gameplay* Shocked





   JLJac on July 15, 2013, 02:07:45 AM:

Thank you all for your support! I can't believe how excited everyone seems :O Just remember: High hopes, low expectations...

Välkommen hem, käre landsman.
Tack, landsman! :D

When it comes to porting, the problem is that I'm using Macromedia Director, and in order to do things such as changing the screen resolution or recieveing gamepad input I use add-ons. While I could compile a Mac version (which I think would lag, because that's my experience with Director executables for mac) I wouldn't have the add-ons, so the game wouldn't be able to do a lot of important stuff. Sadly I think this problem would persist if you try to run it through some kind of windows emulator or whatever. Maybe someone here is a Macromedia Director / Mac guru, and can help me sort it out?

On the subject of operative systems, I just tried the game on windows 8, and it seems to work. That's good news. It's lagging horribly on my notebook though, but as long as it's running at all I'm decently happy. Would've been a shame if the thing was already outdated at release. Game pad works too, but needs some tweaking.

Are you planning to release it in some form anyway?  I hope so ...
Yes, I do plan to release it. It will be free to download and share, possibly with a paypal account where you can donate something small if you're in that kind of mood.

As a lot of people seem to be interested in the technical aspect of the game, I'll try to find time to write something up on that. The basic idea is very simple though: While a game character normally consists of one box that can collide with terrain, the RW character consists of two boxes. So, instead of having a character that's always head up feet down, we have a character that consists of an upper body and a lower body, and they are moving around independently but at a fixed distance.





   JLJac on July 16, 2013, 04:28:08 AM:

...there was only 2 stages vaguely fit for competitive play as only 2 of them had two hideouts...
Yup, that's fixed now!

...Are you mad...
I guess that might be a possibility. This is definitely the last game I make in director, and with that perhaps the last game that ever gets made in director...

Update 151
Sorted out a lot of smaller errors. Added the possibility to have different "control modes" for when you play with game pads - for example the possibility that it doesn't register vertical input as long as there is horizontal input, so that you have to push up or down very deliberately in order to have the character react. As it was there was some trouble that the character would suddenly get into crawling position when you're running, because you happen to nudge downwards. This isn't a problem with keyboard controls, obviously - if you press a button you know that you're pressing that button.

Game pad users can now map a pause button, which takes them to the menu from the game. This means that if player 1 is on a controller, the entire game including menues will be playable from the controller, so that there won't be any need to touch the keyboard or the mouse.

Did a little work on the world map.

Also, the game has for the first time been played with three players. It seems to work fine!





   JLJac on July 19, 2013, 01:28:10 PM:

Update 152
Resolved some issues in the "Egg Hunt" game mode. Created a new function that makes it possible to repeat the level playlists. Created the functionality for a button that resets the game options to a default. Tweaked gamepad controls a little more. Resolved a few minor bugs.





   JLJac on July 23, 2013, 11:14:31 PM:

Forgive me for doing a minor modification to your posted pic, but look at the effect of solid colored eyes for the white and black bears as opposed to the pink and yellow; the white and black have a MUCH stronger hunted, spooky look. http://img.photobucket.com/albums/v143/artemi/RainWorld.png
Thank you sir  Gentleman When it comes to the creepy/cute factor for the main character, I actually want it to be creepy and cute, if that's possible. I know that the highlighted versions are a bit too anime, but I think a zombie version without anything going on in the eyes is a bit too... zombie.

I want to thank Chromanoid for the summarization of my many loose explainations. For those of you interested, try following the pseudo code - if you get stuck I'll try to help you. If people want to I could possibly make a proof of concept in as3, so that  you could look at the code yourselves.





   JLJac on July 24, 2013, 09:39:37 AM:

 Gentleman

Update 152
Added lizard respawning. It doesn't sound much, but the game is getting complex, so there's a ton of things to think about when doing something like this, that "breaks" the game's original mechanics. A lot of things need to be handled, such as spears stuck in the lizard's body when it dissapears and so on.

After dying the lizard lingers for a bit, before starting to produce smoke. After a while there's enough smoke (hopefully) to cover the lizard's body, at which point it can dissapear without it looking too ugly. I'm not too concerned about the way it looks, as lizards dissapearing isn't canon to the game world, it's just a fun feature for multiplayer.

Fateful to my tradition of ugly hacks the lizard will teleport to the bottom of the map, where the falling damage code will kick in, so I only have to write the respawn stuff once. The alternative would be setting up some kind of function that I'd call from both the death-by-damage scenario and from the falling-out-of-the-map scenario, but as no-one but me will ever see the code this horrible solution seemed more convinient  Tongue

I also added another setting for multiplayer, which disallows players from hiding in their holes; they're spat right out again. And I added a counter that keeps track of how long players have been alive during a match. Good for settling draws. These features will be fun for a new game mode I've been contemplating - Survival. Survival won't be about catching flies, but will pit the players against each other and respawning lizards, without allowing them to hide in their holes, and the player that stays alive the longest wins.





   JLJac on July 25, 2013, 01:37:35 AM:

Update 153
The dantesque journey through the 700 circles of UI hell continues. This time I managed to tackle most of the functionality for the sandbox mode menu. Sandbox will be a game mode that's extremely customizable, so that you can fight whatever lizards you want, under whatever conditions you want. It's a lot of fun to set up different insane challanges, such as trying to fend of 4 respawning red lizards without being allowed to hide in your hole.





   JLJac on July 27, 2013, 04:29:34 AM:

Yeah, sandbox is a multiplayer game mode. But you can fire it up by yourself as well, just to try something out. Weapon settings are limited to spears on or spears off, if you choose spears off all spears will be replaced by rocks.

Update 154
Kill indicators:


It's the same for lizards, the little cross will be the color of the lizard you offed. This is limited to custom mode, in world mode you won't see it.





   JLJac on July 28, 2013, 12:44:39 PM (Last Edit: July 28, 2013, 12:54:29 PM):

Update 155
Made portraits for the lizards for selecting them in the sand box mode menu.



Since I've already given up on keeping this devlog spoiler free, here are their descriptions as well (don't read if you wanna be excited by discovering them when playing the real thing):

Green: A slow and dumb creature - easy to avoid but tough to take down.
Pink: A quick and intelligent hunter that will use vision and hearing to track you. Try to not let it spot you to begin with!
Blue: This one can climb walls and ceilings. Nowhere is safe.
White: A passive but deadly hunter. It blends into its environment and ambushes you when you're passing by.
Yellow: Alone they're not much of a threat, but most often they hunt in packs - intelligently cooperating to track and kill you.
Red: A fast, strong and smart hunter with excellent vision and hearing. But what makes it most deadly is its persistance. Once it spots you it will never give up the hunt. Be aware!

EDIT: These descriptions will probably be in the menu, to add a little flavour. So if anyone wants to help out with the english that's appreciated.

EDITEDIT: Actually, whenever you guys spot some mistakes please point them out. For text that's going in the game that is, nitpicking my devlog posts would be kind of obnoxious Tongue





   jamesprimate on July 30, 2013, 01:04:11 AM:

Update 155
Made portraits for the lizards for selecting them in the sand box mode menu.



Since I've already given up on keeping this devlog spoiler free, here are their descriptions as well (don't read if you wanna be excited by discovering them when playing the real thing):

Green: A slow and dumb creature - easy to avoid but tough to take down.
Pink: A quick and intelligent hunter that will use vision and hearing to track you. Try to not let it spot you to begin with!
Blue: This one can climb walls and ceilings. Nowhere is safe.
White: A passive but deadly hunter. It blends into its environment and ambushes you when you're passing by.
Yellow: Alone they're not much of a threat, but most often they hunt in packs - intelligently cooperating to track and kill you.
Red: A fast, strong and smart hunter with excellent vision and hearing. But what makes it most deadly is its persistance. Once it spots you it will never give up the hunt. Be aware!

AHHHH this actually helps me a lot right now haha





   JLJac on July 30, 2013, 12:00:44 PM:

That means he's doing the lizard growls! :D





   JLJac on August 04, 2013, 01:26:28 AM:

Update 156
The menu is more or less done now. I have also made a few new graphical assets and hunted down one or two level editor bugs.





   JLJac on August 07, 2013, 09:12:34 PM:

Update 157
More stuff with the custom game framework. Made an option that gives you a spear every time you go down into a den.

Also James has started making lizard sounds! They're sounding very cool so far Smiley





   JLJac on August 10, 2013, 10:44:35 AM:

Hm... made a new version of the typeface. Old above, new below.



What do you guys think?





   JLJac on August 11, 2013, 02:27:07 AM:

When making a logo, do you use existing fonts? Or just make it yourself?
For this I make the letters myself.

Have to say that I like the old one alot more. Old one fits more with the game, new one is too strict or not rough enough, don't know exactly what. But as long as I can play the game I'm happy either way  Smiley
Hm... Why can't you all keep to one single oppinion, internet guys!?  Angry
I agree though - there's some kind of graffitiesque quality to the old one that I'm missing in the new one. What do ya'll think about these?






   JLJac on August 12, 2013, 01:20:37 AM:

 Cry

Which one is best, objectively?





   JLJac on August 12, 2013, 09:58:52 PM:

Thank you! I'll see if I can make the old one work better...





   JLJac on August 13, 2013, 09:12:47 AM:

Update 158

Worked on the art, created a few new assets:


(Click for full size)

There's more than this image, but I think there should be something left for you guys when playing the thing as well Tongue





   jamesprimate on August 14, 2013, 12:33:18 AM:

Update 158

Worked on the art, created a few new assets:


(Click for full size)



hnnnnnnnnnnnng so good. instant mood.





   JLJac on August 15, 2013, 05:35:07 AM:

What made you choose scanner lines?
It makes it a little less flat. They might be better if a little bit more subtle though...


Hm... I like the idea of somehow showing a little of what the world is about, but I think straight up depiction is too blunt. I'll give it a thought. You're totally right that the "i" is too much like a "z".

Update 159
I'm putting the logo stuff on hold - instead I've for the first time started to seriously create the world. I'm making art and implementing it in the levels - a lot of fun but a rather slow process. I'll have some screen shots soon.





   JLJac on August 17, 2013, 08:03:37 AM:

Update 160
I felt like doing something fun today, so I implemented sticking creatures to walls with spears. In the gif I pull the lizard into position with the mouse. The movement is jerky and the lizard looks chopped up, but needless to say there won't be any such behaviour  in the final game. It's just a convinient dev tool to be able to instantly move creatures around like that.


(When I look at this thing now I realize how horribly brutal it is  Shocked I don't exactly think of it that way, because to me it's all numbers and testing functionality. Don't worry though, the game won't play like this. It's not about cold-bloodedly placing helpless creatures in position for butchering - actually the real thing will rather have you at a disadvantage to the enemy.)

In the actual game there are very few situations where this happens, as it's not often a lizard is climbing next to a wall. But I like to have neat little details like this, even if they occur rarely. It gives the game another dimension of depth.

The spears can be wiggeled out, if the body they are stuck in moves around a lot. That means that a living lizard will sooner or later get free, and that a dead one can fall down if you jump on it/mess around with it enough.





   jamesprimate on August 17, 2013, 01:11:09 PM:

 Evil  Evil  Evil  Evil  Evil





   JLJac on August 17, 2013, 11:14:28 PM:

Thank you all for flattering me with questions! Smiley

looks like you can do everything in this game o.O
Well, that's actually one of my goals, in a way... Don't get me wrong, the game is not at all a "Spore" kind of thing where the goal is that you should be able to do everything. Rather the game has an extremely narrow scope - there are only three types of creatures and a rock and a spear for weaponry - but I've tried to make the interactions between those few objects as fleshed out as possible. So you can't do everything, because there are very few things, but you can do quite a lot with those few things.

Are spears a limited resource? Do they wear out?
Yes, and no. They are a limited resource - in custom mode there's usually only one per level that the players have to fight over, and in world mode they are even more precious as you will have to take a detour in order to get one. They don't wear out, but are still spent in a way. When you hit a lizard the spear is lodged in the lizard, and in order to retrieve it you'll have to get close to the lizard, which is extremely dangerous. If you hit a wall there's a risk it might get stuck. So basically, when you throw a spear there's no guarantee that you'll get it back.

Do you have any kind of procedurally generated textures / shapes? Or is it all hand-drawn pixel art frames?
Very little is done with traditional animation, almost everything is done by the computer. Track a few pages back here, and you'll see a little more about how I've animated stuff.

Can you only pin them to walls, not floors/ceilings?
You only throw left or right, not up and down.





   JLJac on August 19, 2013, 01:52:14 AM:

Yup, there's a little water dripping from the ceiling. It's difficult to include more effects though, becuase of the strange 2D/3D level image. I can't really draw something like a puddle on the level - as I'm restricted to draw everything between the foreground and the background it's impossible to draw anything that's aligned with a horizontal surface.

Update 161
A lot of work, but little to tell. Little visual details and so on beaing tweaked... Created a function for checking whether a custom game should end, so that in hopeless situations where you're captured by a lizard it just ends it rather than having you wait until you're carried to the lizard's den. If you're captured by a lizard but have a friend there to save you the game plays on until it's sure that all hope is gone.





   JLJac on August 21, 2013, 12:11:08 AM:

Update 162
Added a few missing interactions between objects. It's fun to see how for every possible interaction the narratives get richer when we play. Quite often something unexpected happens, and we scream little stories at each other about what happened. I think that the decently smart pathfinding/AI that was such a time sink was also a good investment in a way, because it allows you to read a lot of personality into the enemies.

The game has become insanely difficult. Since custom mode is so easily available I've been using it for most of the testing, and balanced a lot of stuff for it. But there are big differences - in custom mode there are a lot of spears available, and when you die you can instantly restart. Single player has few spears, and when you die you have to start over from several levels back. I find myself unable to finish some of the missions in single player, and I'm the second best player in the world (after my 15 y/o cousin, who always beats me). I think the solution might be to add more spears to single player, which will make the game less of a sneaker and more of an action kind of thing. That will be a little change in direction, but I think the game will still be fun.

The only thing I'll need to think about is to not make the spears too abundant, I still want you to hold on to them a bit, and try to retrieve them from lizards etc. Hopefully there'll be a good balance to find.





   JLJac on August 22, 2013, 11:36:13 AM:

Update 163
I made the red lizard spit. If you try to camp out somewhere high on the level it will hit you with a few sniper shots of black slime, and you'll fall down into its jaws. Just because shit wasn't insanely difficult enough.





   jamesprimate on August 22, 2013, 01:30:54 PM:

Update 163
I made the red lizard spit. If you try to camp out somewhere high on the level it will hit you with a few sniper shots of black slime, and you'll fall down into its jaws. Just because shit wasn't insanely difficult enough.

OH GOD. i was just getting destroyed by those sticky tongue bastards too.

the recent build is gorgeous btw. those sunset levels are stunning and the active rain effect looks sooooo good





   jamesprimate on August 22, 2013, 03:52:37 PM:

Could anyone provide a link to a build I could try? I'm not sure if it's public or anything, but I can't seem to find one from looking around in the topic  Embarrassed

oh, there isnt one. Im just working on the audio so get to play with it while its in development Hand Any Key Cheesy Hand Joystick





   JLJac on August 22, 2013, 10:21:09 PM:

James, maybe you could take a look in your archives to see if you have anything suiting for a tounge shooting out? Or for a lump of mucus hitting a wall? For the latter I've been using your "egg splat" samples, they work wonderfully but have a bit too much echo perhaps.

Also, what do you think we should do about single player? Add more spears and make it more of an action game?  Huh?





   JLJac on August 26, 2013, 05:04:46 AM:

Yeah, I share your concerns. It seems like the game could be very mechanical and monotonous if you just speared the lizards one by one and then caught flies in peace and quiet. There's no need however to worry about the respawn rate of spears, because they don't respawn at all. Once you've used it you have to retrieve it or go get another one.

The respawn stuff is interesting, and it made me think. I don't really want a megaman style respawn room, because I want to restrict respawning and saving the game world to the hibernation sequence. If I had a respawn like that I couldn't really save the game world, because if you went out again and "deactivated" the room as you describe, there would be trouble. Would objects you've moved inside the room still be moved? Would the room be tagged as visited? Also, as I have a timer ticking when the player moves about, it couldn't really save the game every now or then or the player could get stuck with an impossible save. I could have two different save systems, so you could revert back to the start of the mission, but I prefer to keep it simple and I don't want interacting with menues to be a part of the play experience.

However, I can see two possible adaptions of the idea to fit my game. One could be that there could be shortcuts, perhaps one-way routes, to many parts of the map. That way you could very quickly get to most places, but you'd still have to worry a little bit about going back. The other one is that there could be many different shelters, perhaps one per general area. That could also be interesting because it would save the extra flies you've caught separately. So, for example, you might have 4 spare flies in one shelter and only 1 in another. Whether you survive or not depends on which shelter you go to.





   jamesprimate on August 26, 2013, 12:19:08 PM:

i reallly really really like the idea of shelters. i think that would add a continuity element. at least for me as i always get absolutely brutalized by the rain




Well I'm happy he's going to get some great music for this awesome-looking game!

nice, you cannot go wrong with james, i approve him as awesome Wink


DAWWWWWWWWWW thanks guys Tears of Joy





   JLJac on August 27, 2013, 12:46:35 AM:

Hehe I don't really understand how you get killed by the rain, I myself always get eaten... In either case, it would be a lot easier if you were able to shelter in a few different places. Maybe there could be passages of very difficult platforming between those places though...  Huh?

Update 164
When the lizards mapped their accessable areas at the start of a level they would take their time, making a single frame that could be seconds long. That would make the music hiccup, which wasn't really making James' work justice. Now I've divided the area mapping over several frames. This increases the loading time for each level slightly, but gives the music a frame update now and then as a reassurance that the game is still running and the music should continue. From what I've seen the music is playing smoothly now.





   JLJac on September 01, 2013, 01:45:04 AM:

could be built into a larger world
This is why I'm hesistant. The system suggests a large world, and I want to keep the world rather small, in order to ever relaese it.


Update 165


A slight rainbow coloring, to make it look a little oily-like.





   JLJac on September 02, 2013, 12:00:23 AM (Last Edit: September 02, 2013, 04:17:50 AM):

Hehehe it makes you smell smells!? That's awesome, especially since the smells seem to be just right :D


Update 166
Complete makeover of the world map. It's now 7*8 screens big, and contains 3 different save spots...



I'm never finishing this thing am I?  Tired

EDIT: New world seems to work. A few screens make the game crash, and there's one that makes it lag, but over all the structure seems solid enough. Now I need to make a major re-write for the "return to base" functionality, in order to make it work with multiple shelters.





   JLJac on September 03, 2013, 12:37:28 PM:

Pew... that puts us at 1 more year... Hope it'll go quicker!

Update 167
Started the transition to the new shelter system, with graphical representations and saving/loading and whatnot. Also, there was an effect on some screens where the sunlight would fade back and forth as if clouds were passing by. When moving between levels this clouds value would reset. Now it's universal, meaning that the sunlight can start to fade out when you're at one screen, and continue when you enter another.





   JLJac on September 04, 2013, 03:19:58 AM:

Update 168
Somewhere half-way through the multiple shelters switch. We now have many different shelters, which saves excess flies separately. But we also have some issues, and some unfinished stuff. For example it's unable to start a game without you returning to the menu, it doesn't remember which shelter you saved in, there's a ton of cosmetic stuff and so on and so on. Progress, though.





   JLJac on September 04, 2013, 09:15:15 AM:


*kill me*





   JLJac on September 04, 2013, 12:11:53 PM:

His stomach was another himself. It's fixed now, but it was probably unpleasant...





   jamesprimate on September 04, 2013, 09:11:44 PM:

His stomach was another himself. It's fixed now, but it was probably unpleasant...

Sad
Addicted



 Shocked





   JLJac on September 05, 2013, 02:13:37 AM:

Update 169
Multiple shelters system up and running - functionality wise at least, all the cosmetics aren't done yet. For example the shelters should probably have some kind of animated doors that close, and a more refined look.



What you see up top is the calendar. It shows all the days, white days are the ones where the rain stops and you can go out and play. You need at least one fly per day until the next hunting day in order to survive.

White flies are excess flies that are stored in this particular shelter. Grey flies are the ones you're carrying in your stomach.

What the gif shows is: The player enters a shelter. There are already 2 flies stored in this shelter. The player has 3 flies in his stomach. The days go by, and we reach the next hunt. Now this shelter has 1 fly in storage, the excess from the last hunt.

And yes, it's pretty much official that he's throwing the flies up on the floor in order to store them. Go check some biology documentaries, animals do stuff like that  WTF





   jamesprimate on September 05, 2013, 08:58:12 PM:

Update 169
Multiple shelters system up and running - functionality wise at least, all the cosmetics aren't done yet. For example the shelters should probably have some kind of animated doors that close, and a more refined look.



What you see up top is the calendar. It shows all the days, white days are the ones where the rain stops and you can go out and play. You need at least one fly per day until the next hunting day in order to survive.

White flies are excess flies that are stored in this particular shelter. Grey flies are the ones you're carrying in your stomach.

What the gif shows is: The player enters a shelter. There are already 2 flies stored in this shelter. The player has 3 flies in his stomach. The days go by, and we reach the next hunt. Now this shelter has 1 fly in storage, the excess from the last hunt.

And yes, it's pretty much official that he's throwing the flies up on the floor in order to store them. Go check some biology documentaries, animals do stuff like that  WTF

i. love. everything about this. especially the little curling up move, SO CUTE!!! and the regurgitation.





   JLJac on September 06, 2013, 07:44:42 AM:

@Artemi, yeah, I think there should be a very violent but muted sound when you're sleeping. There should be a door, which I guess should go into the same category as all the other architecture - it's built by unknown creatures that aren't present any more (it's obviously not the bear creatures, as they are not capable of language. Which I imagine is a must in order to build this kind of stuff). I won't make it a cutscene though, I'll keep the door in-game. Oh, and don't worry about posting, I'm just happy to be reminded that people read this Smiley
@James thanks! I'll send you a build asap so you can try it out. Also, do you have anything in mind for the above mentioned rain pounding on the suface above sound? Maybe the same as the current rain sound but with the discant cut out? And thanks for teaching me the word "regurgitation". That's what I needed in my life.

Take a look at the save room. The central chamber is the shelter. To the sides of it you can see the slots where the doors will go. The tanks outside I plan to give an animation where they fill up with extremely high-pressure, turbulent water, in order to give a sense of the intensity of the rain outside. That stuff should probably have a sound as well...

Update 170
This morning I recieved some sweet lizard growls from James, which I've been fighting to implement. It has been troublesome though, for some reason I'm not able to make the magic happen. It's like, you see the lizard open its mouth, and you hear the sound, but it doesn't feel like the lizard is emitting it. I don't quite know what to do about this.

One idea I had was to open the sounds in some software that draws them as graphs. Then I could screenshot those graphs and put them into the game, and make the lizards read the graph as they're growling. Then I could map the openness of the jaw to the latitude on the graph, and hopefully have it look more coordinated. That's a huge big thing to do though, which might or might not solve the problem and which has many opportunities to go wrong. Hm... I'll keep thinking.





   JLJac on September 06, 2013, 11:29:28 PM:

@megaboy Certainly, sir. The very little I've seen of your pixels I really like. What do you have in mind?
@Ninja Dodo yeah, that might be it... I've managed to getting it to look a bit better. I'll check out the muppets.
@artemi I always hesitate to animate stuff that's not actually visible... I don't like it when games make bright sprites flow everywhere even for stuff that shouldn't look like that. Like the bees being yellow lines of glowing plasma in bioshock and stuff like that. It feels like they think you're stupid, like LOOKATIT! My game on the other hand is too far to the other side, there's a lot of guesswork, the levels are hard to read etc. So I try to keep the ugly sprites to things I posetivley have to have, such as items blinking when they're in range to pick up. But I could maybe make som slime particles fly out of their mouths...

Update 171
Made the growling look a bit better, and implemented it more completely. The lizards now react by growling to a number of situations, such as when spawning, when spotting a player, when damaged, when injured, and sometimes when bored. The system adapts the growls so that they're modyfied depending on the situation - some growls are short, some are low, some are intense and so on. Different types of lizards also have different growl patterns, which weaves into the different growls system. For example the white lizard is supposed to be the sneaky one, and as such tends to keep more quiet. The blue one, which hates taking shortcuts, will give a growl of frustration upon exiting one. The red one will mostly be quiet, but when it growls it's a big growl. Etc etc.

A positive development is that the growling seems to have made the game a little easier. For two reasons. It occupies the lizards a little bit, they move slower when growling. Previously they meant business, they would just hunt you like cold killers. Now they sometimes stop to express some emotion, which might give you a split second to jump out of the way. The other reason is the factor of communication - this seems to have improved it as a game in general. The growling makes you more aware of what's going on in their heads and where they are on the level. When they spawn they make a sound. When they spot you they make a sound. This seems to somewhat increase the player's understanding on what's going on, which decreases fake difficulty. Now you more often tend to die because you messed up, not because you didn't have enough information about what lizard were where and doing what.

Don't be alarmed though - you still die a lot.





   jamesprimate on September 07, 2013, 11:24:02 PM:


Don't be alarmed though - you still die a lot.

ahahah  Cheesy

this SFX system sounds absolutely amazing! it is exactly what I was dreaming about when playing with all those growls!

I have been thinking about your idea to graphically map the sound waves and match them to the lizard jaw movement, and if you still want to do that I think I can do a large part of that work fairly easily (if somewhat tediously). its at least worth trying  out with a few and seeing how it looks! let me know if there are any specifications you would need these "maps" to adhere to and I'll get on it (I'll email you about it too, just happen to be here now and thinking about it)

also, you've probably already thought of this, but a simple thing to increase the localization of the sound would be to have the position of the lizard/whatever be attached to the sounds position in the stereo field. it might work even better with the sounds in mono (rather than the tight stereo versions I gave you).






   JLJac on September 08, 2013, 02:56:59 AM:

@ James - I'll be sending you an email, with a new version included.

Update 172
Implemented the sound wave readign system I mentioned yesterday. I open the sound files in soundbooth, make screen captures, and create 300*80px monochrome images of the sounds. A script then goes through all of those images, and creates a 300*1px image with 16 bit colors. Depending on the height of the wave in the previously mentioned image the corresponding pixel on the very thin image is given a color between (0, 0, 0) and (255, 0, 0) where the amount of red represents the volume. A looooot of manual work...

When the lizards growl, they keep track of where in their sample they are, and read the corresponding pixel color on the volumeMap, as I call the thin images. The redder the pixel, the more open jaw, the brighter the color of the head, and the more shaky motion.



It looks a lot better, at least to me. The problem is that the system is not very dynamic, if James decides he wants to modify the sounds I'll have to sit through the entire process of screen capturing etc again - and there's a lot of room for errors to occur.





   JLJac on September 09, 2013, 01:15:02 AM:

The level editor makes these rainbow maps, which are kind of nice so it's a bit of a waste that they're not visible in the game:




Small fragments of this is visible in the final level, primarily around the edges of stuff.

The rainbow map is displaced by a depth map - that's why you can see the three dimensional shape of the level if you look carefully.





   JLJac on September 10, 2013, 06:15:10 AM:

Yeah, I know - the sounds aren't actually growls, it's just my bad english Smiley

Update 173
Started animating the shelter door.



It might not look so amazing, but I put my hopes to the sound, some heavy mechanical clicking and clacking ought to give it that solid feel.





   JLJac on September 11, 2013, 07:16:40 AM:

Update 174
Made it so that a lizard can change color after it has been created, not just on creation. This allows me to have a "random" setting for the custom mode, where every time the lizard dies it spawns as a new color. If you set all four lizards to "random" and enable lizards respawning you can fight a continuous onslaught of different-colored lizards.

The challenge with this wasn't to change the lizards graphics and stuff like that, removing some body parts (such as antennas, tounges, extra long tails) and creating some was fairly easily done as well. What was troublesome was how the lizards had mapped what areas were accessable to them upon spawn, and that stuff needed to be re-mapped, ingame.

I had some pretty funny and pathetic scenes when lizards that weren't able to climb walls thought they were, because they were respawning after a lizard that had mapped all the wall tiles as accessable. They'd scratch at the walls and wiggle around, without getting anywhere.

Luckily I had rewritten the area mapping recently, when I split it up over several frames in order to make the music play consistently. This more dynamic area mapping system could pretty neatly be tied in with the problem at hand. The only modification it needed was for it to be able to work on many lizards simultaneously.

Now, if a lizard is set to "random", and you kill it, it'll pick a new color. Then, before actually respawning, it will map its accessable area fairly slowly (10 bucket-fill steps per frame) while the game is running. It won't spawn until it knows what tiles are accessable to it, with its new and current color.

The wall climbing lizards (blue and white) have several times as many tiles available to them as the floor crawlers, and thus it might take a little longer for them to respawn. On most levels it doesn't seem to exceed the standard 100-tick wait for respawning though, so mostly you won't be able to note the difference.





   JLJac on September 12, 2013, 12:16:23 AM (Last Edit: September 12, 2013, 01:12:55 AM):

Update 175
What do ya'll think of this?



I'm not there yet, but maybe I'm moving in the right direction?





   jamesprimate on September 12, 2013, 10:52:02 AM:

Update 175
What do ya'll think of this?



I'm not there yet, but maybe I'm moving in the right direction?


im going to go against the crowd here and say that i think the direction is good! [note: i am possibly biased]. the new font is readable and a big improvement on the previous. what might do a good job counterbalancing the "cute wackiness" that people are disagreeing with would be to add some rain and make the character appear more forlorn. "ive seen things..." make him suffer a bit. cute but suffering.

i think what people really responded to in the original concept image was the combination of "cute" "alien' "mysterious"


i still really like the that image, especially the spots of color.





   JLJac on September 12, 2013, 11:29:22 PM:

James, what do you mean you're biased?

One of the main influences to Rain World's aesthetic has always been graffiti, believe it or not. In a way the game is set in a graffiti drawing, or in a graffiti world. It's the same kind of urban, abandoned areas, and if you take a look at the "plants" they're rather graffitti ornaments than plants as we know them. The lizards are very inspired by this aesthetic.

My other main source of inspiration is, once again believe it or not, early 20'th century cartoons, like this stuff:



This aestethic is visible in for example the look of the player character, and the choice to keep most levels almost colorless.

There are quite a few things that others have expressed to me that they've felt when they've looked at the material that wasn't really intended by me. I never intended for RW to be artsy, for example, I view it very much as a work of pop art rather than art. It's a cartoon rather than a french film. It's hip hop or electronica rather than a sonnet. I think pop culture can carry as much emotional/intellectual content as fine art, and I think pop culture is more fitting for a game (which, besides of conveying emotion, also should be fun), which is why I went with the pop culture path for this project.

Another one is that RW is dark and grim. This wasn't really my intention either. I wanted to create a sense of abandonment, and part of that was having these creatures live their lifes without any society or supervision. They're just trying to survive, and from that comes the behaviours of eating each other and trying to defend themselves. The game contains no sadism, no sexual violence, no torture, just the struggle for survival. It's not more "darkgrim" than nature is - I've never deliberately added any dark tones.

Of these:
"cute" "alien' "mysterious"
Cute was pretty much a by-effect of having a cartoon character as the protagonist. Also cute is in a way necessary for a good game protagonist, I believe, as it is also "relatable". A cute face is something we tend to project ourselves onto, while an ugly face we tend to objectify and think of as "the other". Alien is good, in the sense "otherwordly" - it is another world: Rain World. Mysterious is good, but I'm going for a certain flavour of it. I want modern mystery, not ancient mystery. Not an old forest, but that time you wandered off and ended up behind an old power station where no-one had set foot for at least 20 years and crows had been living their crow lifes without even understanding what a power station is. Urban mystery, perhaps.

Thus, this:
like a cartoon belly button.
is intentional and intended. And this:
...more traditional, probably with serifs.
Is not where I want to go. Still, I don't want it to be goofy, it shouldn't feel like Dora the explorer or whatever.

I guess what I like about graffiti is the contrast. It's loud, whacky, colorful and cartoony, but where the goofy voices stop there's an echo, a vast sense of abandonment. Because where all this whackyness takes place is some kind of no longer used industrial area, and at the feet of the cartoon character a little spruce is growing, year by year, and a plastic bag is slowly decomposing. Nature is cold and lonely, but never as cold and lonely as when compared to the meaningless chatter of our culture. There's no feeling of abandonment and godlessness as when you see pop culture next to a spruce growing, and understand that whatever we say and do, the universe doesn't even care.

I want to convey this, preferably within an area of 1024*768 pixels and with... typography. So I'm in for a challenge.

Sorry about today's post being a little different, I usually talk about what I do not as much as why I'm doing it when it comes to art. At the end of the day I believe these concepts can not properly be conveyed with words, which is why we have art to carry them. If everything could be written, why would we paint?

Still, it might have given insight into why this is a difficult hurdle and not something I've just slapped together already.





   JLJac on September 14, 2013, 08:10:11 AM (Last Edit: September 24, 2013, 10:55:58 PM):

Thanks guys!

@heinzius, yeah that contrast is what I'm going for. Thank you for taking your time to create that mockup! I think you're right in that there should be some architecture to acompany it... I won't use blur though, as there's no blur anywhere else in the game. Maybe I could use some sort of drawn backdrop - I'll have to experiment.

Update 175
James sent me a new bach of sounds, and they're implemented! I also added a sort of gradient to the start of each sound the lizards make, so that it fades in rather than starting at full power out of nowhere. Sounds a lot better.

What I've spent most time doing, however, is throwing the "egg hunt" game type out, and replacing it with a standard horde mode co-op survival thing. Egg hunt was boring, and it can be created by tweaking the settings of sand box mode.

Waves mode, as I call the new gametype, is the only one where players are cooperating. You're stuck on a level, and the lizards keep coming in waves. There's a function that creates the waves, which uses a "budget" that steadily increases over the waves in order to "buy" lizards that have different "prices" assigned to them depending on their difficulty. So basically it gets harder and harder with each wave.

As it stands the players get spears by catching flies. It doesn't make any sense at all, but I figured it would be fun. So there are a few flies flying around, and if you catch them they turn into spears in your hands. Other than that you have to rely on stunning lizards you've already speared with rocks, and retrieve the spears.

The new dynamic area mapping stuff seems to work OK:

-removed image, sorry-

What I do here is that as soon as the lizards spawn I throw them out of the level to kill them, so we can see how the next lizard maps its turf. The green lizard is unable to climb, and is thus restricted to the three leftmost platforms. Note how the last lizard in the gif, a wall climber, has access to the upper right area where the platform is missing. This is because wall climbers can climb on terrain in the background layer.

At one time it lagged a little bit when 4 blue lizards wanted to map their turfs at the same time, but I can probably do something about that. If I feel ambitios I could slow it down depending on how many other dynamic mappings are being done at the same time.





   JLJac on September 15, 2013, 02:43:41 AM (Last Edit: September 15, 2013, 08:23:16 AM):

Update 176
Resolved a lot of small issues. For example I made it so that objects (rocks, spears) can't occupy the exact same space - when they go to "freeze" mode they do a check for other objects, and if there are objects too close they don't freeze but instead moves away and try again. Also, when spears are stuck in the ground close to a wall they tend to lean out from the wall rather than in towards it, in order to make them more visible. Small stuff, but it makes the game more pleasant to play.

Also I've messed around with the menu for Waves mode, so that it has no options or anything, just a list of levels you choose from.

Waves mode is a bit addicting, so I tend to start playing it rather than making progress... I'll have to stop with that. It works OK, but there's some trouble with it very suddenly throwing a very big challenge on you, such as three white lizards and four blue ones or whatever. It feels a bit harsh when you've done well up until a certain point, and then you're just annihilated by an army of four sticky-tounged, camoflauged, wall climbing white lizards. It has to be a little bit more aware of the steepness of the difficulty curves it creates.

Edit: Did the dynamic area mapping speed thing. So now when you kill ALL the lizards on the screen at once, it takes a bit longer for them to respawn because they each map their turfs slower, but it doesn't lag. Also resolved the issue with the difficulty spikes - now when a new color of lizard shows up it is guaranteed to be alone on the level the first time you see it. So for example, from the third wave on there's a chance blue lizards might spawn. Then, during the third wave, the blue lizards will always be alone - they won't spawn unless everything else is dead, and nothing else will spawn while they're alive. In the next wave, the fourth, the blue lizards will be allowed to haunt the level together with one other lizard, whatever color it is. In the fifth wave, it is allowed to co-exist with two other lizards. Etc. This way there won't be any situations where you've never encountered blue lizards, and then surprise mofo, here are three of them, together with a white!





   JLJac on September 16, 2013, 07:59:43 AM:

Wasted today's dedicated development time by playing the game instead. Oh well. It's playtesting, I guess.





   JLJac on September 17, 2013, 06:53:48 AM:

That's a good sign! If you're not sick of playing it by now, it must be quite fun. That's just plain logic.
Hahaha yeah, perhaps. But it's a very different thing for me to play something I'm currently developing, as I simultaneously think about what I want to add etc. That might add a little depth to it, compared to when you guys play. Like, I would obviously not have spent as much time with this game as I have unless I was making it Tongue

@artemi - That's a very good point - giving the text a physical presence in the environment! I'll give it a try for sure!

Update 177
Started putting the shelter door animation into the game.
Also added respawning for waves mode. The game has a bit too many random factors in it for it to feel fair if you suddenly die after 10 minutes of fighting. Stuff like a lizard suddenly deciding to walk backwards and pushing you out from a cliff or whatever. With extra lives it feels a little bit more even, as each death isn't that big a deal any more.

You start off with three extra lives (no matter how many players you are) and after waves 5, 10, 15 etc you recieve one more extra life. If you're two or more players and run out of extra lives and one dies, the surviving player can try to reach the next extra life, and the teammate will spawn.

Being two players should be a bit better than being one, as you can inflict more harm, but not too much of an advantage as you also die more, and use the same pool of extra lives.





   JLJac on September 18, 2013, 02:20:13 AM:

Update 178



I might have over graffiti'ed it...





   jamesprimate on September 18, 2013, 12:39:06 PM:

Update 178



I might have over graffiti'ed it...

 Hand Thumbs Up Left Hand Thumbs Up Left Hand Thumbs Up Left





   JLJac on September 18, 2013, 11:23:51 PM:

Artemi, that's a really good guess!

The first four of the square buttons are lizards - currently one green is active, but you can have 4 reds or whatever, you just click them to cycle through the colors. The fifth button toggles lizards respawn, it's currently on. On the next row is eggs, allowed in holes, many players allowed in the same hole, spears (off, on, spawning at random, or available in holes - the last one currently choosen) and then friendly fire on/off.

See where it says "Levels"? That's the level tier - currently it only has one level on it, confusingly named "Levels" Tongue If you move the cursor out to the left a list of all levels pops up, and when you click these they'll appear on the tier. You can have up to 10 levels on there. Under the level tier are four little buttons: clear tier, shuffle on/off, recommended levels (for this gametype), and cycles. Cycles makes the game repeat levels, so if you put it to 3 it will play each level 3 times.

The five circles are match length options - 1, 2, 3, 6 or 12 minutes. Then flies density, and finally the little cross which resets all options to the gametype default. The little bear creatures can be clicked in order to toggle players on/off.

And this whole thing is controllable with mouse, keyboard AND gamepad! The menu truly is my greatest achievement with this game  Epileptic

Update 179
Got rid of some harsh gradients in the background, to give smooth surfaces and curves a smoother look. Lighter one is new:



Notice how there was previously some very sharp vertical lines on the big pipe in the background? Now they're slightly less sharp, and I think the whole thing is a little easier on the eyes. Also the slightly lighter colors create more foreground/background contrast, which might be good for gameplay purposes.





   JLJac on September 19, 2013, 05:05:16 AM:

Oh, and something I thought of earlier today. When you have yellow lizards spawn in horde mode, shouldn't they spawn in pairs, at least in the first wave? If you run into a single yellow, your fine, but if the next wave has, say, a blue and two yellows, suddenly it's a WHOLE different critter then the last wave.
Yeah, yellows almost always spawn in groups of 2-4. I think they could theoretically show up alone as well, but I haven't encountered it. It should be a very rare occurance.





   JLJac on September 22, 2013, 01:34:26 AM:

Barch asked me a question for a lecture - on how I developed my style. Here's my reply. Nothing new under the sun for those of you who have been around a while, but it might be interesting as a short summary of what I'm doing for those of you who have just arrived and are not too eager to scroll through 45 pages of devlog.

The game started with only the player character, as an experiment on how a character could be rendered and controlled more dynamically while still looking like pixel art.

http://forums.tigsource.com/index.php?topic=22849.0

The game is then built around that character.

Most platformers have characters that are just boxes, and I think that even if you paint non-box graphics on top of the boxes it's still perfectly evident from the movement that it's still just boxes. I wanted to try something else.

The world building aspect came later. As the creatures are fairly complex to render, some of them consists of more than 20 sprites, and as lot of processing power is used for AI, I didn't have much left for rendering scrolling levels or anything similar. Because of that I created a level editor that renders levels as still images. This turned out to be a good thing, because as I didn't have to render the levels on the fly I could make the rendering process as complex as I wanted. The downside to this is of course that the levels are completely static.

I have deliberately not been having a creative deisgn process that's separated from the technical development. This is because if I were to first design a game and then try to code it, there would be a lot of places where the code or my skills with the code weren't sufficient to create what I had designed. The final game would be a watered down version of what I had in my design document.

Instead I've allowed creative decisions to be influenced by technical limitations as well as having technical solutions serve the creative decisions. This is what's fun in making games according to me - having creativity and problem solving work together. Technincal limitations can actually sometimes boost my creativity.

Another important part of what makes my project what it is would be that I don't believe art and code can be separated. Many games work with an artist / programmer division in their teams, but as I'm doing this alone I can float freely between the two roles, which I think has played to my favour.

Programming is creating behaviours, and I think it's a bad idea to keep how something behaves separate from how it looks. How something, such as a creature, looks is what will give you the first impression of what it is. How it behaves is what will let you know it even more, what will make you understand it under the visual surface. But it's still the same creature. Looks and behaviour should be telling the same story, I believe. So maybe it's not such a good idea that they most often are created by different people, in different rooms, at different occasions?

In my game I've tried to make the gap between graphics and behaviour as narrow as possible. My ideal state is when the graphics and the behaviour of an object are inseparable, how it looks is how it moves.

To underline this ideal further (and for technical reasons, of course) the creatures in the game look very simple on a still image. Most of them have only one or two flat colors and consist of fairly simple shapes. What gives them character is their movement and behaviour.

In the end I think my goal is to create the illusion that these things are alive. I'm fairly certain that I share this goal with most people making games, as it's an important factor in immersion. Working with behaviour to create that illusion is a path I think is worthy of experimentation - and rain world is my take on such an experiment.

Update 180
Quite a lot has happened, so much actually that I don't quite remember everything I've done since last time. Mostly little details, like adding small spark effects when throwing a rock at a wall, and little bug fixes. The big change is that the shortcuts now look different, in yet another attempt to make it more clear where there are shortcuts, and where they go.

Also I've been changing a few things in how waves mode work. Now if you die, every lizard will go back in its hole and then you'll respawn to an empty level. Then it will initiate the same wave you were already on, again. This is because earlier you'd respawn with lizards still on the screen, and in quite a few cases they would be hanging around way too close to your spawn hole for it to be fair.





   JLJac on September 23, 2013, 12:26:34 PM:



Here are the new, bigger shortcut holes. I hope they'll make it a bit easier to follow your player with your eyes when you're moving through the shortcuts.

The little spark that moves back and forth is there to show where there are shortcuts. It's not usually this frantic, as it mostly have other shortcuts as well to randomize through. But this level has only this one shortcut, and thus the spark is making the best of it.





   jamesprimate on September 23, 2013, 01:16:45 PM:



Here are the new, bigger shortcut holes. I hope they'll make it a bit easier to follow your player with your eyes when you're moving through the shortcuts.

The little spark that moves back and forth is there to show where there are shortcuts. It's not usually this frantic, as it mostly have other shortcuts as well to randomize through. But this level has only this one shortcut, and thus the spark is making the best of it.

yeah that looks really nice, especially on the larger levels! its something that would never have even crossed my mind (hey thats why im not a visual artist!) but somehow subtly  adds to the atmosphere. the result feels more techno/"city-like". same with the slight change in gradient you used for the backgrounds.





   JLJac on September 24, 2013, 10:40:02 PM:

I've been avoiding yellow for some reason... don't quite know why  Droop

Mostly it was a matter of conveying what's going on to the player, with the big difference being that the new holes show direction, as they're not perfectly square. Hopefully this makes it a little easier to piece together what's happening from looking at those pixels.

So does the shortcut not exist in the physical space? I as because of the loop thing going on in the middle there.
Are you talking game engine-wise or in universe-wise? To the game engine the shortcuts are objects you interact with that moves your body out of the level, and then it walks tile by tile looking for another tile with the shortcut property until it hits an exit, then it reintroduces the player to the level.

The in universe explanation is more fuzzy... It's obviously some kind of pipe that the creatures move through (physically, it's not a teleporter). It's one of those places where game design meets world building, and the most obvious parameters of world building has to give way. I don't think those places are necessesarily akward though, they can give a touch of surreal quirkyness to the world that actually enriches it.





   jamesprimate on September 24, 2013, 11:55:46 PM:

hey, we'll take our pcgamer features where we can get them  Gentleman





   JLJac on October 05, 2013, 01:34:58 PM:

Thanks you! And welcome to the forum! Be sure to check out the devlogs subforum, there are many cool projects going on over there Smiley

Update 181



More fighting with the typography...





   jamesprimate on October 05, 2013, 05:58:35 PM:

Thanks you! And welcome to the forum! Be sure to check out the devlogs subforum, there are many cool projects going on over there Smiley

Update 181



More fighting with the typography...

ahhh so good!





   JLJac on October 07, 2013, 01:01:15 PM:

Thank you people! Good to know that I'm on the right track, even though I might not be all the way down it just yet.

And thanks to jubjub for re-uploading the movement prototype! Appreciate it Smiley

Update 182
More typography...



This is the raw vector art, before the pixel art touch up you've seen in the previous one.





   JLJac on October 11, 2013, 09:33:14 AM (Last Edit: October 11, 2013, 09:38:35 AM):

Yeah, I prefer the vector art too, but the game isn't vector graphics... However, I could go with the solid color approach for the pixel versions as well.

Update 183


This typeface I've got going works a lot better with some words than with other. "Paused" and "Sand Box" I'm happy with, because they have a lot of chubby letters where I can but my X's. Words like "Death Match" and "Complete" are hopeless though, as they just end up a mess of spindly tentacles...

Edit:
Just spotted a comment on one of the youtube videos simply stating "slug cats". I will never call them "bear creatures" again.





   jamesprimate on October 11, 2013, 11:45:30 AM:

Words like "Death Match" and "Complete" are hopeless though, as they just end up a mess of spindly tentacles...

I like "death match", a lot actually! but "complete" and "competitive" don't work for me.





   JLJac on October 12, 2013, 09:35:48 AM:

What's differing?  Epileptic

Update 184

Not quite able to convince myself with these ones....






Favs? Suggestions?





   JLJac on October 13, 2013, 02:25:07 AM:

Thank you for your constructive feedback. You're not too harsh at all, this is exactly what I want to hear. It takes an outside perspective to spot some things. For example I didn't really know that Competitive was illegible, but now that you mention it I can totally see it.

Update 185
Today I pasued from the font stuff, and did something that I really don't know about... I had this idea that the game had become too much about just feeding spears to the lizards, and I wanted to get some of the fun back that was present back before the spears, when the game was much more sneak oriented.

So I made the lizards have hard heads. That means, if you hit them in the head the spear bounces off.

Basically the idea is that if you hit them in the body you do 4 times as much damage as when you hit them in the head. If you manage to hit them in their open mouths though, you get a damage bonus.

This makes the game like 100 times as fun to me, as an experienced player. Suddenly I can't just wait at a ledge for a lizard to peek over it and then throw a spear at it. All the dull tactics of just sitting somewhere with a spear in hand and waiting for them doesn't work any more. Instead I have to out think them, create manouvers, trick them into a narrow opening and attack them from behind. In close quarters I need to use wit rather than brute force. In open areas I need to pull off twice as impressive action manouvers. Like climbing up a pole, having the lizard climb after me, then drop down to the side of the pole and on my way down lodge a spear in the side of the lizard. It's much more in line with what the game was originally supposed to be about, which is interacting with and outsmarting the AI.

The problem is that this makes the game a loooooot more difficult. And that's not what I needed. However, the idea was never that the difficulty would be defined by how easy it was to kill lizards, as the game was never supposed to be about killing lizards, but about avoiding them. The only thing this actually changes is that spears are less powerful. And spears weren't supposed to show up until like halfway through the campaign either way, so maybe it won't make the difficulty curve that much steeper?

I don't know... On one hand it's so refreshing to once again have to put some thought into what you're doing when you're playing. On the other hand it feels like it's akward to introduce yet another rule that new players have to learn (they need to be attacked from behind). On the third hand ( Hand Money Left Hand Fork Left Cool Hand Metal Right) the game wasn't ever really supposed to be about killing lizards with spears. Out of nowhere I decided to add spears, so why shouldn't I be able to nerf them out of nowhere as well?

 Huh?





   jamesprimate on October 13, 2013, 12:42:17 PM:

whoa! having the lizards deflect spears front on is going to hugely change things. I'm scared already! you're totally right that at present it was basically "find spear, go on lizard skewering rampage". Maybe an idea to keep it "easier" at lower levels would be to have the spear damage done to the head be a random figure within certain percentages, and lizard types that appear earlier would just have a higher chance of scoring a higher percentage hit. that way it's not TOTALLY impossible if you somehow have to face one head-on, just more threatening.

I would say that even as it is now, it's not "easy" by any means. it seems to take at least 2-3 spears (or a thorough pummeling with rocks and things THEN a spear) to take down a lizard, and often you will be chased by 2-3 lizards, so that's still some skill to pull off as spears aren't terribly common in the wild. But I think the idea is really good.

When I first started playing, I don't think that spears were implemented yet, so sneaking around a lizard to hunt those last few flies with time winding down was palm-sweating and nerve-wracking, but also probably the most intense/fun id had gaming for a while. the satisfaction of when you DID finally kill a lizard, by tricking it into falling off something, or some other trick, was HUGE. sort of like in half-life two when you finally destroy that first helicopter that has been dogging you. so if this brings more of that atmosphere back into the late game stuff, it's a great development.

Also, I really love the match complete screens! Like many, I think the last panel seems to work the best, with the clean white/ bold black stroke lettering. I think because the font itself is already so complicated visually, the gradients and lighting and all that of the other 3 just makes it too fussy to read.





   JLJac on October 14, 2013, 06:12:31 AM:

@christian, I like your ideas. The spear could definitely be made more of a multi-tool. Already it's possible to lodge it in a wall and use it for climbing, but your idea for rigging it as a pole and trick lizards to drop on to it is awesome as well. The core of the game is to have few things, but explore many interactions between them, and more functionality for the spear certainly fits in that theme.

@Keo, thanks for being interested! We've been talking a lot about the font stuff in the thread already. I know your frustration, it's like "gaah! He's making a cool game, but then he has to go wrong with this one choice and mess it up! Doesn't he understand the art he himself is creating!?" and I've felt that way many times too... Thing is, there isn't really anything I can say that will make you go "AHA! In that case, the font is awesome!" Here's my attempt to explain, at least, from the last time this was brought up.

Klick the quote

Short version is that I'm not trying to create something "artsy", or maybe I am, but in that case it's going to have its roots firmly planted in cartoons, graffiti and pop culture. In order to create some kind of weird contrast, that will make it feel even more desolate. It's probably not going to work, and it's going to be frustrating as hell to whatch me ruin what could have been a super atmospheric game, but well, I've gotta try to do what I want to do Smiley If the failure is too crazily big I might go with a "gritty" typography instead, it's never too late to give up~

@James, yeah, I've found a way to keep it reasonable, which is that spears and rocks still stun when they hit the head, they just don't do much damage. That way a spear is almost guaranteed to get you out of a tricky lizard situation, because you can smack it in the face and leave in the ensuing confusion.

And yeah, I know it's not easy  Evil Good thing with making it a little harder though, is that the excitement/processing power index goes up, as fewer lizards pose more of a challenge. Now 2 or 3 of them is quite enough for me to try to fend of, while earlier I had kind of a walk in the park with 4 of them at the same time, which was tougher on the computer.

it seems to take at least 2-3 spears (or a thorough pummeling with rocks and things THEN a spear) to take down a lizard...

This is something I've changed now (or fixed, as it was more or less a bug). Lizards were never supposed to fight till death, as it's not a war, it's about creatures wanting to eat. Back when spears where new a lizard would retreat to its hole if you hit it with a spear, but later something happened that made them keep on going like zombies. Now I've patched up the old system, and once again they stop pursuing you when you damage them enough. So, even though it still takes 2-3 spears to kill a lizard, one solid hit is enough to get rid of it. Then of course you might still want to kill it, because otherwise it will take a valuable spear with it into its hideout.

Update 186

This is what a typical action sequence looks like with the current game rules:



It reads a bit better with sound. Basically what happens is that I spear them, and then I action around in attempts to retrieve my spears without them biting me. Because I only have 2 spears, and these enemies take a minimum of 3 hits to kill. When their heads flash white, that's when they're deflecting spears. It might be a little hard to understand what's going on without the sound indicating when I actually do hit them in the flesh, but you get the idea.

Note how the blue lizard tries to pick up a spear, but I snatch it from its jaws. That's a very dangerous manouver  Grin

Other than recording this gif I spent today polishing some of the new stuff that has come with the "hard heads" change. For example, now that the game actually keeps track of spears going in the mouth of the lizards, I added a new separate "throat health". When lizards want to do mouth based stuff, such as spitting or throwing out their sticky tounges, they need to check against their throat health first. So if you manage to jam a spear down there, or even hit them with a few rocks in their mouths, they won't be able to do that stuff any more.





   JLJac on October 14, 2013, 06:33:26 AM:

Yeah, they have that behaviour. In this case it's because he's stunned though, he just recieved a hit to the head. If you don't harass them they're usually able to manouver around quite well, but when they get hit in the head they're often turned around so that their orientation is different from what their path finding brains think, and then they need a moment to readjust.

A moment that I, in this case, used to my advantage Evil





   JLJac on October 16, 2013, 06:20:21 AM:

Yep, we're submitting it :D

Update 187
Panic work rush because of IGF submission. I finally implemented the end of match screen, a new pause screen, and a game over screen for single player. This is stuff I've been putting up for like, a year. No, seriously, a year is a reasonable estiamtion for when I first started to think "maybe it's time to fix the end och match screen". Today I sat down and DID IT.

For all the typography I've used what I currently have. I know it's not 100%, but I figure it's better for IGF than the placeholder stuff that I drew with my mouse in 4.2 seconds in order to know which image was which. Lol. But the technical setup I have should allow to change graphics pretty easily.

Only thing left to do is the "end of multiplayer game session" screen. When you play multiplayer, you select a few levels and they're added to a tier. When you finish one of them, there's an "end of match" screen that pops up on top of the level, that basically states who died and who survived, and how many flies each player caught. Also a match winner is nominated.

When this has happened a few times, and the tier is out of levels, the game should take you to the "end of session" screen, where a session winner should be nominated (the one with most matches won) and some statistics for each player should be visible. That's the thing I need to do now.

But, James says we can re-upload after the deadline, so maybe I'll do that if things get too frantic Smiley





   jamesprimate on October 21, 2013, 09:57:32 AM:

that's a good point. I put this devlog as the official webpage on the IGF submission  Shrug





   JLJac on October 22, 2013, 02:08:08 AM:

Thank you  Smiley As for website, idk... This is not a commercial game, it's just a hobby project. Even if it has been taken one level further by James convincing me to submit to IGF. The question is, would you really prefer for me to spend time on making a website, rather than making the game?

Update 188
I've been taking a few days off from Rain World after the big IGF work rush. Today I picked it up again. The game feels much nicer with finished menues everywhere! But some of the typography still looks pretty awful. For now I'm focusing on the functionality, and then I can return to the graphical specifics later.

This is the match over screen I've been talking about, now programmed and functioning, not just mocked-up:

(Click for full size)

And this is what I did today,

a special game over screen for waves mode that lists all the lizards you've killed. The little crosses even appear one by one (quickly) with one of James' sounds accompanying them. Pretty awesome!

Both of these end game screens can scale up and down to accommodate different amounts of crosses/players, and move up and down accordingly so they appear in a spot that's easy on the eyes. The match over screen can display different outcomes such as draws, doesn't say "Winner!" if there's only one player, etc etc.

And yeah, the menues change color to match the level they're on. Thought that would be a nice little detail Smiley





   JLJac on October 25, 2013, 01:32:06 AM:

We're up on IGF!  Grin

Update 189
James just sent me a new batch of sounds, menu sounds specifically, and I'll start implementing those. Other than that I've done a little level editing and tiles since last time.

Also:

STICK ARRAOUND!

The white lizards are the ones that change color to blend with the environment, and when they're hurt they glitch out and blink like that.





   JLJac on October 25, 2013, 12:25:35 PM:

Update 190
Biiiiig sound update. Now all the menu interactions have sounds. It makes a huge impact on the feel of the menu, really makes everything more solid.

Also I added other "HUD" sounds, such as "custom game match started", "game over", "score", "kill", etc. Still a few things to go perhaps, for example the pause menu is still completely silent.

And as a bonus I finally made a sound for when the slug cat is chewing on a fly. I mixed together some old stuff I had with some new stuff I got from James, and managed a chew with just a little bit of wetness to it. It sounds OK. A fly is eaten in three bites. I've made the last bite have a slightly more high pitched sound, as a subtle cue that the fly is finished.





   jamesprimate on October 25, 2013, 11:59:03 PM:

God I can't wait to hear this game with sound effects, it's going to be super raaaaaaad.

yaay! its going to be awesome! but... also might take a while to get right. immersion is a big factor in this game, and the last thing i want to do is have sounds that take the player out of the game world, breaking the tension or otherwise affecting the mood.

the menu clicks and bleeps are going in the right direction, we have a pretty good ambient/atmospheric sound world already in place (plus i personally really like the action sounds Joar did initially), and now were moving into getting the non-diagetic stuff like sfx for "points", player indications, etc., and that for me is going to be the tricky part.

When I first saw rain world, i had a very very clear concept. for me, a huge strength of the game is your emotional connection to this lone, cute white little creature in this crazy death filled environment, and i wanted the aural experience to amplify that. sound effects would essentially be extensions of the emotion and instinct of the character; a subtle "fly sense" when prey is nearby, an unsettling feeling when lizards are close, an impending sense of dread when the rains begin to come. Even much of the music was to be an extension of the character: the beating of the heart, blood pumping through veins, hunger in stomach, etc.

But! Of course getting that to work AND be clearly understandable to the person playing it may take a bit of time and trial and error. Anyway, ive been thinking about all this for over a year, so im just happy to get a chance to finally talk about it  Tears of Joy





   jamesprimate on October 27, 2013, 10:05:41 PM (Last Edit: October 28, 2013, 01:43:34 PM):

Surprised it wasn't posted yet, so here's the



ahhh the secret is out! i really appreciate you saying its awesome. it was a frantic, stressful weeks work for me. I had actually hired some video peeps to do it (as neither Joar or I have much video experience), but had to do it myself last minute when they didnt deliver.

Pretty positive that's just a stylistic choice for the trailer.

yeahhhh, this was my first time doing a trailer and i thought the effect was cool, but obviously didnt consider that it makes it look like the framerate is bad in-game :/ nothing could be further from the truth. its one of the reasons we didn't post the trailer publicly actually.

the judges will get to play the game and see for themselves, etc etc, but to preempt this i also included 2 little movement teasers in the IGF thing (you might be familiar with them):

Lizards:




Showdown:
https://www.youtube.com/watch?v=gKqbqJF082Y





   JLJac on October 31, 2013, 12:23:37 AM:

Yeah, the framerate is looow. But a trailer was needed to submit to IGF, and as James said, the guy who was supposed to make one didn't really know what we wanted to have in it, so we ended up with a trailer that had a lot of unfinished levels shown. So James decided to make one himself, but neither of our computers are able to capture video very well, so here we are. As the game is not a commercial project it doesn't really matter that the trailer isn't the smoothest thing out there, as it's purpose isn't marketing, but just being a trailer so we could enter IGF  Tongue

Update 191
I've been away for a little vacation, if you wonder why I haven't been posting in a few days.

Yesterday I made a thing that I hope will have a big positive influence on the game - I threw together a sound prototyper for James. The sound prototyper is a special build of the game that can load sound files from a folder and replace samples in the game with these loaded sounds.

Earlier we have been having a problem where James make sounds, and send them to me, and I implement them and try it out. Then I give James useful feedback such as "It doesn't sound quite right. I don't know, just like, not quite right. Could you make it 'skueeeeshier'?" Then James would try to interpret that, make a new batch, send it to me, repeat and fade.

There is some kind of phenomena where a sound is percieved totally differently in the game than played by itself. I don't know if this is because of macromedia director's sound engine, or because of context. In either case a sound that appears to be perfectly awesome in windows media player can become lame in the game, perhaps because it doesn't sync with the animation.

Hopefully this problem is defeated now, as the sound prototyper allows James to work on the sounds and try them at the same time. The iteration process should hopefully be shortened from like two days to like two minutes.

I think this will make a big difference for the soundscape of Rain World, given that James can handle the horrible horrible user interface!





   jamesprimate on November 01, 2013, 11:50:34 AM:

ahh back working on stuff im actually good at!

yeah the sound prototyper is going to be great. it functions sort of like an ad hoc audio middleware, and will allow me to make essentially entire cohesive audio builds that I can send Joar, rather than just give him little pieces of the audio puzzle to sew together himself. (Certainly you guys with your modern game engines will laugh at this "why not use FMOD or WWISE?" youll ask, not realizing that this game is impossibly built in macromedia director hahaha)

One thing that Im not sure has been mentioned on here is that, as much of the character animation is physics / AI based, there is often no 'standard animation' for events, and thus by necessity much of the creature sounds are generative to one degree or another. Which is REALLY REALLY COOL. Despite collaborating on the generative audio for things like the lizard vocalizations, even I didnt know just how deep it all went until exploring with the sound prototyper and discovering subtle things like how the audio attached to each creature footstep or wing flap is actually generative within certain parameters. Pretty much everything heard in-world has aspects of randomness tied to the AI/physics behind it, which gives the game a deeply immersive, natural quality to it.





   JLJac on November 03, 2013, 12:43:50 AM:

Haha James, you're able to sell this game in a way I'll never will be  Grin But seriously, if you want a walking sound, you have to play it at each footstep, right?

Update 192
Adding new art assets...


(click for full size)

There are many new tiles etc, some of them can be seen in this image. See the metal spheres out on the left? Those utilize a new feature I've implemented for tiles, I call it vertical/horizontal displacement. To minimize confusion, let's talk about the vertical one. I have a tile that's repeatable. I chop it at some random height, and switch the parts. If I base the randomness of that chop height on the horizontal placement of the tile, all tiles that are in the same column will be chopped at the same place, and line up with each other. That way they will all be "scrolled" a random tile height up or down. I developed this for chains - now I can put several chains next to each other without them lining up perfectly.

Also I added a new framework for plant life. The thing in the screenshot I call "sprawlbush", and is the only implementation of that framework I have at this point. It basically creates branches and move them around at random in the 3D space, avoiding to collide with walls. If you look at how the leftmost plant has grown, you might notice that it has tried to avoid the airconditioner box or whatever it is. Previously I didn't have any plants that grew in the z-axis, and I think that these new plants have potential to look interesting with shadows - I'll do a little experimentation.

When moving in the Z axis the plants can never cross Z layer 5, because that's where the game is played. If a branch crossed layer 5 the player could pass through it, and it would look like it was cut off from the rest of the plant. Because of this these new plants are confined to either layers 0-5 or 6-29.





   JLJac on November 04, 2013, 01:56:19 PM:

Hi! A while back Chromanoid posted a summary of the technical stuff I'd written up until that point. I haven't really said anything significant since, so check it out,.
click the link thingie ^

@Artemi, I've been thinking myself about stuff such as tagging tiles as "dense plants" so that you would move slower, and other ideas. But since the plants are drawn into the level, they are not able to move, and it would looks strange if you interacted with them but they where completely static. So instead I've decided that the plants are never going to affect or interact with the player. There might be some deviations from that rule though, we'll see how it plays out.

Level color is different between areas, but the largest area by far is the one that's colored in the bluish grey you've seen in most screenshots. All levels may have 2 "effect colors", which are used to color plants etc. Plants can also be set to "dead", in which case they don't use effect colors.

The weird different fonts is an issue, yes. The grafitti/sign difference doesn't bother me much, because that's the way grafitti appears in real life as well; next to some sign with a industrial very proper san serif. But then Rain World has an asian looking alphabet as well, making the different writing styles as many as three (if you don't count the anonymous san serif in the menues). That might be a bit too much.

Update 193



More work on procedurally generated plants. This one is called "feather fern", and uses the same base code as the spraw bush. I don't know if I'm very happy with it yet... This is hard, takes a lot of iteration. At least it's nice to see 3D plants rather than completely flat stuff like I had before.





   jamesprimate on November 04, 2013, 11:43:44 PM:

 My Word!





   JLJac on November 05, 2013, 11:58:24 AM:

 Gentleman

Update 194



Fungi Trees. White fluorescent color and black. Like any plants their color can be anything, but I think I'm going to keep it to one (or maybe two) colours for each species.





   JLJac on November 08, 2013, 01:32:53 AM:

Update 195
Returned to single player a little after not touching it for a long time because of IGF reasons. Worked a bit on the shelter levels, how they're going to behave. For now it looks like the "death by rain" will be inactivated in the shelter, whether or not you're actually inside the doors. But if you're outside the doors, there'll be a jet stream of water that will kill you either way. Hopefully I'll have some graphics to show how this looks soon.

The case I'm still not very sure about is when you are inside the shelter, the time runs out, and you don't have enough flies. I don't think this will happen very often at all (if you screw up so royally that you somehow end up back at the shelter with no time left and no flies, you're probably just going to load your last game) so maybe an unsatisfying "You starved to death" - message will suffice.





   jamesprimate on November 08, 2013, 03:10:38 AM:

maybe an unsatisfying "You starved to death" - message will suffice.

maybe an animation showing you turning into a skeleton? it would cool because the screen would be black anyway, so you curl up like normal... then just whither away...





   JLJac on November 08, 2013, 09:58:58 AM:

That's actually both awesome and easy to do! Might give that a go Smiley

Update 196
I'm at crossroads again. Have I been talking about how I feel about single player, with it being a bit goalless and all? In case I haven't, quick recap:
(For those of you who know the basic premise of the game, jump to "jump to here" further down")

Rain World is set in a rainy place, where the rain is intense enough to kill a creature. Whenever the rain stops, for just a minute, creatures emerge from hiding to hunt for food. You are one of these creatures.

Single player is about surviving a certain amount of days (might be called "the rainy season", but might also not. I haven't decided on if every season in rain world is rainy season, or if it gets extra bad a few months). The catch is that most days it's raining, so when there's a hiatus in the rain you have to go out and catch enough flies to survive in hibernation until the next dry spell. This has been simplified to the creature digesting exactly one fly per day. So, if there are five days of rain ahead, you need to catch five flies.

Then there's another factor - you can't hunt in the same place twice. Next time the flies will not be there. So you have to go further and further from the shelter to hunt.

The amount of extra flies you catch, on top of the ones necessary to survive, is your high score.

JUMP TO HERE.

I like this game set up, because it has an element of old school infinite games like Pac-Man. It's a story in itself, you're introduced to a world and you'll just have to try to survive. The story isn't stitched on, it's in the game, self-contained. Problem is, Pac-Man, Snake and the like are infinite games, where you are destined to fail and it's just a question of how many points you can get before that.

For Rain World I want to have some sort of winning condition, mostly because it has metroidvania elements and a game session is much longer than in Snake. In Snake it's OK that you die, but imagine having an rpg where your chararcter will die... I guess we all know that everyone dies eventually, but if you've spent some time with a game character you feel good to have a story ending where the character survives to die another day when you aren't watching.

These two things make Rain World single player a bit of an awkward hybrid. It's a simple-goal game like pac-man or snake. "Survive! It will get harder and harder," is that simple goal. At the same time it has an ending. We are used to endings as devices to frame narratives, but here we only have a gaping lack of such a narrative. There's no personal development or anything, just survival for an arbitrary amount of days and then a lame "congrats!" screen.

I have been thinking about what sort of narrative I could insert into Rain World, without breaking the things I do like about it. A while ago I had a conversation with James, and he gave one specific type of narrative a name: "Silver lizard stole your girlfriend"-narrative. Rain World should NOT have a "Silver lizard stole your girlfriend"-narrative. Everything about it is wrong. I think what bugs me the most is the anthropomorphization of the bear creatures. Waaaay to many human qualities implied. Girlfriends. Individual villains. Revenge motifs. The bear creatures actually have very few human qualities. They obviously utilize simple tools, but they don't seem to be able to manufacture them, and there's no indication that they have a language.

"Silver lizard stole your girlfriend"-narratives also have another problem, that they're linear in just the same way as every other game out there. That's not very interesting. We've all defeated enough girlfriend-stealing last bosses, who are evil for no reason or for bad reasons.

Rain World is not about those kind of stories. Rain World is about survival, in a nature-like setting. The world is harsh and dangerous, but there's no evil or sadism. No-one want to steal girlfriends. Everyone just want to eat. There are no opposing wills or political clashes, just the harsh conflict of who gets to eat tonight.

When the "Silver lizard stole your girlfriend"-narratives were dismissed, I had another idea. This one would be that the environments would tell a story of the past of the place. This could potentially be cool, though a bit disconnected from gameplay. It would be like playing the game, and have a parallel and optional little story going on at the side.

Problem here is that this would, once again, go against the core of the game. The core of the game is that you're an animal trying to survive.

I'm interested in the industrial environments of rain world, obviously. I spend quite a lot of time creating them. There's a reason why I didn't just have the game be about wild animals in a tropical jungle (though there are references to that setting - for example the levels set high up among the chimneys are called "canopy area" in my dev documents. I'm also pretty sure that the original biome of the place, before becoming an industrial area, had rain forest characteristics). But would they be enough to tell a story? Perhaps not. And most importantly, that would be the story of someone else, of those who built the place. For some reason, if there's anyone in Rain World I'm not very interested in, it would be those forerunners. They came, built their industries (changed some life forms?) and now they're not around any more for whatever reason. Probably economic reasons. There's no interesting apocalypse that we are post- , and Rain World is about the now, not the past.

The environments are industrial because I'm fascinated by the idea that animals interact with artificial environments. I'm interested in how those environments are perceived by animals. I'm almost 100% sure that animals don't ponder too much about who built what and why. So if my goal is to re-create the experience of being an animal in an industrial landscape, past mysteries are not the way to go.

So that brings us to my current idea for a story. The story is extremely simple, but as of now I like it.

There are a few shelters around the map. In one shelter, you find three pups. Their mother has not been able to make it back with food, or at all for that matter. Now you can choose to take care of them. It's not a menu choice in a dialogue box or anything, it's just a question of giving them some food or not.

They are a burden. They eat,sometimes you have to move them to another shelter, and then they're in danger and you have to lure lizards the other way etc etc. Maybe the amount of food you have puts you in a situation where you have to choose between giving all of them too little food, or give enough food to only one.

If the pups die, they die. It's up to you whether you want to load your last save. It's always a possibility to abandon them all together.

This means that there is a story, with narrative, but it's not stitched on, it's all in-engine. No events are scripted. Also, the entire story is optional. If it's too hard, you can just skip it. Maybe save it for your next play through.



What are your opinions?





   JLJac on November 08, 2013, 10:43:39 PM:

It will be an optional main mission, so to speak. The "main story" is just about surviving, so I guess it would technically be a side mission, but it would be the only side mission.

Update 197
Started working on the pup object. I'm basing it on the player object. This happened:



 Who, Me?





   JLJac on November 09, 2013, 01:02:04 PM:

@Slader, yeah they can certainly starve - that's the main problem. I think they will also have a bit of different personalities among the three of them (and slightly different colors to set them apart). One thing I have planned that might be interesting is that one of them is extra bad. Either it's just not very good at surviving, or it has a wounded leg or something. That would really put you in some difficult moral dilemmas.

@Artemi, I think that as the game is now, trying to stay alive yourself is plenty enough reason not to save the pups. The game is haaaaaard. You don't at all need any extra handicap, even without worrying about anyone but myself even I have trouble in single player, and I don't even want to think about what it has to be like for a beginner.

@Christian, damn, stop pleading to pay me money... The temptation... Actually I'm in a pretty bad place economically right now, but hopefully that won't affect rain world too much. It does however affect how sensitive I am to temptation like that...

I want the game to be free because I remember being in my lower teens, and loving little downloadable games, and exclusively playing ones that were free. I liked it when they were free. It's another kind of atmosphere around a game that's free.

Also, if I charge people, there are expectations to meet. Fact is, I have no idea how I would put together a mac build, I have a super low-fi 2D game that runs super slow on any PC that is not very powerful, etc etc. That stuff won't fly if I charge people.

What I could do, is I could take donations. I could do it through kickstarter, perhaps. I work as a freelance graphic designer, and one idea is that people who are enthusiastic about rain world could donate some money, and effectively buy hours from me. So, I work on the game like I normally do, but if people put in some money I can work some extra, because I don't have to work on my actual work. Would anyone be interested in anything like that?

Drop a post if you'd donate something small.

Update 198
Started on (and almost finished)the first milestone in the AI of the pups - the terrain mapping. That's basically an algorithm that goes through the level and marks tiles as walkable, creates connections between them etc. For example, you might see little red arrows at the ledges. Those are "ledge drop connection", that flag that from this tile you can drop down to the floor below.



There are other connections except from ledge drops, there are jump-and-grab, short cuts, etc. They are sorted into incoming and outgoing categories. So, for example, a tile from which you can drop to the floor below has an outgoing ledge drop connection. The tile below has an incoming ledge drop connection.

This is because the A* path finding will work backwards, from the goal to the start. That works better for some scenarios, because then you can abandon a path finding session part-through, and keep all the direction flags in the tiles. This means that a creature that doesn't have a fresh path will follow an old trace in the level, meaning that it will be headed to wherever it was headed last time it passed by those specific tiles. The alternative would be that creatures without fresh paths would head towards where they were standing last time the path finding algorithm passed over these tiles which makes less sense. Not a big problem though, as most of the times they have decently fresh path to follow.

So, the path finding fill will start at the goal, and crawl outward looking for connections. Maybe it crawls across a floor, and comes across an incoming ledge drop connection. This means that you can drop to this tile from above. Then it goes to the ledge that connection refers to, and continues to crawl from there. Then, perhaps, it runs into the creature pathing - and the path is finished. The pathing creature will now follow the path, to the ledge, find the ledge drop connection, jump down, and proceed to the goal.

Basically it will work like the lizards already do, but simpler since I don't have the horror of not being able to turn around in a corridor to worry about.





   JLJac on November 10, 2013, 01:51:49 AM:

What would be in it for the sponsor? I won't add dr. pepper power ups to the game hehe... Art grant is a really good idea actually! I should look into it.

Update 199
The second big mile stone of pup path finding done. Now it actually finds paths! I can click the mouse somewhere on the map, and it'll look for a path from that place to wherever the pup is at the time.

Pups probably have the most limited movement of all creatures in the game. They can run, climb, and perhaps jump a little, but they can't reach a ledge that's two tiles high. This is because I plan to make the player able to pick them up - they'll follow you, but some times you have to help them across some obstacles.

This means that their pathing map is a bunch of scattered islands that are not connected. For example, they might be able to move around on top of a specific platform, but not able to jump to the next platform.

So what behavior should they have when they're trying to reach the player, and the player is out of reach to them? It would be stupid if they did what lizards do in the same situation, which is basically "screw it, I can't get there so I won't even try".

Say that you're up on a high platform, and you call the pup to come to you (more on communication with pups in later posts). There is a path from the pup's location that's unbroken almost all the way to where you're at. But before reaching you there's a big jump or something, that the pup can't do by itself but needs some help with.

In this situation it would be very stupid for the pup to just shrug and stay put. Frustrating for you, too. Instead, you want it to move to a position where you can help it. In this case, you'd want it to move all the way up to that last obstacle, and then wait on the other side of it for you to come and get it.

The solution I have for this is that when the pup path finding crawls outward, it is not restricted to tiles that are walkable for the pup, but it always prioritizes walkable tiles. So, in the above example, the pathfinding will start at the player location (remember, I work from the goal to the start) and quickly flood the platform the player is standing on. Once the entire platform is examined, and the pup has still not been reached, it'll resort to flooding into un-walkable air tiles. After a few tiles of moving through the air, it'll connect to the walkable tiles on the other side of the gap. Once it has walkable tiles, it will always choose to explore those rather than un-walkable. So, it'll flood the walkable tiles, and reach the pup.

The pup will then have a path, though not a path that it can actually follow all the way. But, it will be the path were it gets as closely as possible to where it wants to go, with the least amount of help.  It'll run along this path until it reaches the point where it can't proceed, and then wait. Unless the situation changes while it's running, which is pretty likely to happen with the player running around and all.

One frustrating situation that might occur is that the pup finds a path that leads to where you are, but that path takes it on a safari around the entire lizard-infested level. Like, you and the pup are standing next to each other, and you jump up the tiniest little ledge. Suddenly the pup decides that it can get to you through this huge detour, and you actually just wanted it to stay put. I don't have an immediate solution for this, but I can think of a few things. One would be that it simply doesn't bother to path to you unless you are a certain distance away.

The next step in the pup pathfinding development will be to make it actually follow the paths. That one also includes a lot of engineering of its movements, so that'll be interesting.





   JLJac on November 11, 2013, 01:10:45 PM:

Thanks guys!
So, when you back a game on kickstarter, is it about the things you get from doing that, or is it about bringing the game into existence? If, for example, I were to kickstart it to support myself during development, and then release it for free when I got done, would that be a good deal? Or would you think "But I payed! Why is everyone else who didn't pay also rewarded?!"

The way I understand it to work in most cases is like what Johnki mentions, you kickstart it and thereby pre-book it, some times with early access. If I were to kickstart something that would later be released for free, it would be the exact same situation for those who pay, with the difference that you don't get any special privilege for paying - you could as well just wait and hope for other people to pay. Would that be a huge turn off? What about donators getting the game a little bit earlier than the rest of the people? Would that work? I'm kickstarter illiterate, so I'd be happy if anyone with a little more knowledge of the psychology behind it could tell me what's up  Smiley

Update 200
200! Woooo!
About halway through making the pup follow the paths the pathfinder finds. The code for just going to the next tile and the next tile is done, but what's lacking is some specific movements, such as jumping up and grabbing a horizontal beam etc. Those actions have to be programmed event-by-event, and they have to be able to interrupt at any point without something too bad happening. The environment is unreliable, and sometimes another creature will push the pup mid-action, in which case it needs to be able to pulling itself together and start acting accordingly to its new situation.

For example, the "jump up and grab" animation is done in two steps - but it's not as simple as an animation. If everything was just some kind of linear animation, weird things like being pushed and pulled in different directions wouldn't be accounted for. Then it could end up stuck somewhere, because the AI can't think about anything else but "I should have grabbed on to that beam by now! Where is the beam??" That would be a bad hopeless situation. Rather, the pup has to position itself on the tile, and decide that "now I will do the jump and grab thing". Then it has to jump - and not forget what it was doing. It knows what tile it's going to jump to, keeping that in mind too. During the jump it'll check if it's in the right tile, if so, it'll go into the "grabbing" mode, and the animation is over.

But, it doesn't know when that's going to happen, or even if it's going to happen. It's not counting frames. When it jumps, that's a leap of faith. It could be 4 frames until safely grabbing the thing, or it could end up not happening. It's an adventure, baby.

If something weird happens, it'll end up in another tile, and ask the pathfinding what to do. As soon as it gets a clue, it'll start moving according to the new situation.

Dynamic AI like this is an asset to rain world, because it allows for a lot of fun interaction. The lizards already use similar stuff. For example, all the creatures in the game (except the flies) collide with one another, which enables stuff like lizards pushing at each other as they're both hurrying to get into the same small opening. And things like one lizard throwing out its long sticky tongue against the player, but missing and latching on to another lizard instead, pulling it in some weird direction. For stuff like that the AI has to be able to re-consider its situation dynamically. Hopefully the pup will tie in nicely with those Interactions.





   JLJac on November 12, 2013, 11:52:35 AM:

From you guys it sounds hopeful! Maybe donators could get the game two weeks in advance or something, as a gesture of gratitude. Or the impossible-to-use level editor could be included for them. Early access is another idea - then they could double as beta testers. Thing is though, I don't really want to beta test etc, I want to release and move on. But James has recently been trying to convince me that the game could be bigger, better, and maybe we should pursue that. The pups certainly are an epic feature creep.

I imagine a patron/sponsor relationship could work like in the art world. You find someone enthusiastic about games and culture, and (like an arts grant) you ask them for money to make your game. I think Jason Rohrer used to have a patron, but it's definitely not wide-spread.
This would be a perfect situation, but I don't really know if there are people interested in games like that. My prejudice is that the kind of eccentric old rich people I imagine doing something like this aren't all too interested in the indie game scene.

~$10k is about the amount of money I spend in... two life times, so if I could raise an amount like that I think that would be plenty enough to finish rain world and take me a healthy chunk into the next project. But, I might be optimistic.

Update 201
More pups following paths. Made a little "training level" with a lot of difficult situations (poles sticking out of slopes etc) and have just been having the pup run around chasing the mouse pointer - whenever it encounters a situation it can't handle I try to come up with a solution.

For most situations the AI actually looks at neighboring tiles and then emulate input, and then the input controls the pup through the remains of the original player code that are still hanging around. I can hijack this input and play the pup with the keyboard as well, for debugging. In some situations though, this doesn't really work. Either because the situation is too fiddly, with a lot of small, well coordinated movements, or because it's a situation that isn't possible to deal with given the pup's limited repertoire of movements. For example, while the player is able to balance on top of a horizontal pole, the pup is only able to hang below it. In some situation the pup isn't supposed to be able to go where the player goes (see previous posts), but in some situations it's just too annoying. For example if a horizontal pole connects with a platform just one single tile below the edge, it doesn't feel reasonable that the creature isn't able to climb that tiny distance to get up there.

For situations like this I've created something that's called "magic movement" in the code, which is basically a cop-out when I don't know how to make something happen by simulating input. When entering "magic movement" mode it designates a position it wants to end up in, and what mode it should enter when it gets there (modes are thing such as "standing", "crawling", "climbing" etc). Then it just kind of floats to the desired location, at an even speed, with the force of gravity severely reduced.

This might sound like it looks bad, but remember it's just a question of moving one single tile. For a distance like this it could just snap into its new position and you'd still be able to keep track of it, but I prefer to have this <1 second cosmetic little movement going on. It's very useful for situations when I'm not exactly sure of what to do to get the pup into the right position.

Once the movement is somewhat done, I'll work on the "puppet" of sprites that's rendered on top of the pup. Right now it's basically just the player graphics code, but with a smaller body, making it look like an adult bear creature with some horrible disfiguration. When I have some new spriting code I'll upload a gif of the pup moving around.

PS: working with the pup is fun, because I copied the code from the player and have seen some oooooold stuff that I had almost forgotten commented out in there. Like, today I found this piece that made the player able to fly, back from when he was a bird Cheesy RW has come a long way!





   jamesprimate on November 12, 2013, 09:45:13 PM:

I want pup plushies.

this is being looked into!  Gomez





   jamesprimate on November 20, 2013, 08:56:00 AM:

so since i have some time and there is cool new content worth showing off, im going to have a go at re-doing this trailer.



armed with some new hardware and video stuff, hopefully the framerate will suck a bit less.

other than that, was it effective? anything else that you wanted to see more of?



also
The obvious idea to me is to have them be the other three colors for the multiplayer bears. A) so you don't have to have a brand new color set for them, and B) when you get to multiplayer you get the idea that 'hey! I SAVED you guys, and now your all grown up!'

I love this idea.






   JLJac on November 20, 2013, 09:50:51 AM:

Go James! :D

Something to note, for the pups, what colors are they? The obvious idea to me is to have them be the other three colors for the multiplayer bears. A) so you don't have to have a brand new color set for them, and B) when you get to multiplayer you get the idea that 'hey! I SAVED you guys, and now your all grown up!'
Hand Thumbs Up Left

Update 202
I have nothing to say in my defense concerning why I haven't been writing updates, except perhaps that it has not been very visual stuff and would become walls of text. Like that ever held me back in the past.

I have, however, been working on the game! More or less the entire pup creature is built now, but it still doesn't have a lot of interactions. It moves around somewhat intelligently, and can do a lot of tricks like jumping and climbing and crawling in order to get from one place to another.

It also has a mad complex brain, which is still not entirely finished, but is pretty sweet. This brain works like the lizard's brain, but this second time around I was more orderly about it. What's basically going on is that it has a mental record of where it believes all other creatures to be. When they see another creature, this "brain ghost" is updated to the position of that creature. When it doesn't see the creature, the brain ghost goes on for a bit, simulating basic movement such as turning in corridors etc.

This means that if it sees you go into an opening, and then you're out of sight, it will follow through that opening. Seeing the room on the other side, it will assume that you probably went straight forward to the opening on the other side of the room. In reality you might have taken a turn to the left or something. This means that they can be annoyingly confused sometimes if you hurry too much and outrun them, but that's kind of cute as well Smiley They do this for all other creatures, including lizards and each other.

If they can see the place where they thought you were, but you aren't there, they'll go looking at the place where they last saw you, as a last resort. Then they'll tag you as "don't know where this entity is" and will maybe look around for you for a little bit, or go hang out with one of their siblings whose position they are aware of.

They have a kind of complex pack behavior, where they prioritize what to do, like such (if I remember correctly)

 1 - follow a player I see with my eyes
 2 - go look for a player whom I think I have an idea of where he/she is
 3 - follow one of my siblings whom I can see, and who looks like he/she knows where a player is
 4 - follow one of my siblings who is as clueless as I am
 5 - keep my head down and hope I won't get eaten, maybe do a little cautious looking around for pack mates

You guys will have to educate me on who/whom/whose later.

Players can also communicate with them, through moving around in some specific ways. I won't go into detail on that, because I want to send it to James and have him try it out to see if it's possible for him to figure at least some of it out by himself, or if we need some sort of tutorial.

They have behavior modes such as "follow player" or "lie low". They can be picked up, and then they climb to your back and allow you to use both your hands for hunting/wielding weapons. Later I plan to give them an unconscious mode, where if you feed them too little they might still survive a while, but you have to carry them around cumbersomely, with your hands. They can be thrown, which is kind of fun. When thrown, they will grasp anything they can, meaning that you can throw them to a platform above or some other safe space to get them out of danger momentarily.

They still don't interact with quite a lot of objects, most notably the lizards. Lizards and pups are invisible to each other, and in fact live in different planes of reality. That has to change. They also need to be hurt by rocks and spears, flies need to flee from them, etc.






   JLJac on November 22, 2013, 01:10:30 PM:

Update 203
Pups are now hit with rocks and spears. A grim feature, but it had to be put in. I'm thinking about whether they should survive a rock to the head... I'm leaning towards a 50/50 chance of survival. You shouldn't be throwing rocks at them anyhow.





   JLJac on November 25, 2013, 02:18:40 PM:

Hm, that's very interesting. The very first thing that went through my head reading that was "if not for mistakes, then what should I punish the player for!?"  Cheesy

In one way I think you're right. In one way I think you're not. It's interesting. I guess it is, as all design choices, a good or a bad design depending on what you're designing. If I we're making a futuristic racing game, that was all about the super smooth, trance-like flow of gameplay, I would totally agree with you. Then it would be all about designing an experience around the player, and that experience should be as slick and enjoyable as possible, with no weird annoying things happening such as mistakes having consequences.

Now, on the other end of the spectra we have dwarf fortress. I've always thought DF is kind of awesome because it isn't a slick gaming experience. Misunderstand me right, horrible UI is horrible, and would be better if improved. But the difficulty curve, the unforgivingness, is really appealing to me.

For two reasons - the first one is what I believe is the reason it is in DF, in-game narrative. Mistakes are stories. Losing that one goblin somewhere in your fortress, and have him trash a lever or whatever which in turn floods everything, is a story. It's punishing a mistake, and according to the "slick gameplay" philosophy shouldn't be there, but if it wasn't there wouldn't be a story.

The second reason is the sense of world it creates. A "don't punish mistakes"-game world is a show put up for the player. It might be a good show put up for the player, and some games should be like that, but it will make you feel like the world is an illusion only for your eyes. An unforgiving world, like that of DF, has much more of a sense of existence of its own. It's "Welcome, fool, let's see how you can handle this world." There are rules, and interactions, and the game doesn't care about what might be better for the player, much like our world doesn't care about what we would prefer. Gravity will do its thing, even if you, the "player", makes the mistake of stepping off a cliff. DF giant alligators will destroy doors, even if it floods the player's fortress. Rain World rocks will hurt creatures, even if you might not want to or might have made a mistake.

A world like that feels like it exists, it's not just a show for the player's enjoyment.

RW is a little bit in between, I guess. It's very good that you brought this up, because it forces me to think more about it. Is RW a play for the player, or a pre-existing world that the player is allowed entrance to? I have actually battled many design choices directly related to this, most notably the linear/open world decision, where I went with the open world. Still there are a lot of show going on, such as whenever you enter a room in that open world there just happens to be a lonely fly that's on its way to the closest swarming area, for your conviniece to follow. Maybe I should abolish those things as well, go all the way to the "simulated world that you're allowed in"? Or maybe I should drift more towards the middle?  Huh? One thing I'm pretty sure of though, is that in RW, if you throw a rock at a creature, that creature is hurt whether you want it or not...

Update 204
Making lizards see pups was surprisingly easy. I contemplated making a custom-tailored solution for pups in the lizards AI, but I'm happy I didn't. Instead I created a "pupsAndPlayersGlobalList" which has all pups and all players in it, then did an automatic replace everywhere in the lizards AI code changing "playersList" for the new one. Voilá, the lizard booted "brain ghosts" for all of the pups, spotted them, kept track of them, hunted them, and even carried them back to their dens more or less flawlessly.

One intersting feature is that a player can tug at one end of a pup while a lizard pulls the other. I think I'll keep it, with some adjustments, it has some really intense visual/emotional qualities to it.





   jamesprimate on November 26, 2013, 05:27:13 AM:

This game...

i like every single thing that you said.





   JLJac on November 28, 2013, 07:13:44 AM:

@artemi, actually I think of it the other way around - single player is Canon, and the rules there are the official rain world rules. Multiplayer sometimes deviates from that, because of Fun. I also expect the player to play single player first, then multi player.

The single player rules of friendly fire is that everything hits everything, whether you like it or not. RW doesn't have a health meter for players, just dead or not dead, and stunned. Rocks stun you for a while, spears kill you. Note that in single player none of these effects are wanted, as the you are on the same team.

In multiplayer you can switch spears off, which means that rocks still hit, and spears still hit lizards, but spears don't hit players. This is because the insta-kill spears tend to makes competitive games rather short, but you might still want to be able to use them on lizards. That's not Canon, it's just Rule of Fun.

@bandreus, this is yet another game vs simulation situation. As you say, it would make logical sense for them to pursue pups before players. On the other hand, from a game perspective, you want to be able to lure them away from the pups. If they follow a pup, you have an interaction between two AIs that you're not able to change, there's no "play". If they prioritize the player, you can save the pups by playing well - your actions matter.

Maybe the best balance would be to have them prioritize players and pups equally. But I really like your suggestion of having them differ depending on color as well.

@Dayvi, the consequences are not that grim, the "punishment" is only very temporary (the pup being stunned a little while) so in this case I don't think it's very unfair. If you hit them with a spear though...
 





   JLJac on November 30, 2013, 01:14:13 PM:

@ Bandreus, thanks! It's really nice to know that someone likes the project enough to know as much about it as you do Smiley Right now I don't really remember how the lizard prioritization works, but I know it's based on distance somehow. However it doesn't do the distance calculation every tick, so sometimes a lizard can actually ignore a closer player. I think the system has a little commitment, like if it has started hunting one player it will continue for a while even if another player is closer. This is because otherwise two players would too easily be able to game a lizard by standing on each side of it, and quickly approaching it one by one, keeping the lizard bouncing back and forth without being able to decide which one to pursue.

You should be able to throw pups at flies to catch them.
This goes straight in the game. Excellent idea.

Update 204
It's really interesting to try to create intelligent behavior, because it certainly puts things in perspective. With a loooooot of work I've managed to lift the pups' intelligence level from -say- beetle, to -say- fish or perhaps chicken. Creating a system like this makes you realize that the intelligence of an average mammal or bird is truly staggering. The intelligence of that super slow guy in the back of the classroom in middle school is incomprehensible vast.

Still, it's a weird chimera of intelligence levels. It's more stupid than a chicken in regards of being able to understand what jumps it is able to make, but on the other hand it can flawlessly solve mazes that would be a challenge even to a human.

The lizards had the huge difficulty of them not being able to turn in corridors, making path finding at least four times as difficult. But other than that I think the pups have a more complex AI. The fact that they have to be able to flee as well as pursue added an entire dimension.

Having a game AI flee away from a particular coordinate is a lot more complicated than having it pursue a particular coordinate. The reason is pretty simple - because if you just back away from it you will almost always end up in a corner.

When trying to get to a coordinate, the question of where you want to go is obviously answered. When fleeing away from a coordinate, you have to figure out where to go instead. This new "defensive destination" (defensive because it's not where you really want to go, it's just where you want to go right now in order to put some distance between yourself and the coordinate you're fleeing from) has to have a few parameters be correct. It has to be in a direction which is away from the thing you're fleeing from, it has to be a place you can actually go to, ideally it should be a place which offers further fleeing possibilities, ie not a dead end.

Luckily the pups' AI doesn't really have to be perfect, it just have to look like behavior that is somewhat reasonable for this particular imaginary creature. They will run into dead ends etc, and when a lizard is very close they go into panic mode and just run away from the lizard, whether that'll get them into a corner or not. As I said, they're fish smart, not cat smart. But because of their complex way of handling information on other creatures they still manage to surprise me some times.

I did a test where I stood on one side of a divide with the pups, like this:


That's a lizard down below!


I jump across, but the pups can't. They're still in "follow mode", so they'll try to figure out a way to get to me.


After a while of thinking, the path finder gives them a path and they start to move. They have still not seen the lizard.


Because the path finder is aware of the level layout, but not the lizard's position, it gives the shortest path, which happens to come across the lizard. When they see the lizard their internal image of what creature is where is updated, and they flee back into the corridors to the right. In a normal game situation they would have pretty much no chance from here on, but for testing purposes I held the lizard in the courtyard to see how the pups would react.


With their internal maps containing the information "there's a lizard in the courtyard" the next round of path finding tries to avoid tiles close to that area. The next attempt at approaching the player gives a much longer path around the top of the level, but still a path that takes them to their destination.


Sadly, this won't help them much. They just die and die and die and die and die. The game is very hard for you, and you're a much more able creature, with a much more powerful brain behind it. The pups can't do half of what you can, they're extremely stupid, and they don't have the advantage of seeing the entire level as you can.

They're truly pathetic, so I'll just have to hope that looking at them will induce the desired protection instinct haha! At least I'm proud to have taken them to a level where they not (very often) literally run into the gaping jaws of a lizard.

In fact I don't think the AI will show much in the game - you can carry one pup on your back, and grab one with your hands, and move around that way, so you don't really have to rely much on them moving around on their own. When it comes to actual game play, I think you'll not even bring them to a level where there are lizards, but rather have them wait outside for you to hunt. Or back in the shelter, hehe.

But it was a lot of fun to program Smiley Not implying that I'm done  Tired





   JLJac on December 03, 2013, 01:06:34 PM:

Can't record video Sad

@artemi, yeah, we're on the same page then!

Update 205
With the pups' behavior somewhat done, I've started to look at their appearance. Picking apart the two year old animatronic doll of the player character in order to adapt it for smaller size is very interesting. Honestly I had forgotten my solutions for many of the problems, and now have to discover them all over again. Also it's a challenge, because now we're down to a size were every pixel counts, and things like pixel displacement because of sprite rotation can have a huge impact on the general appearance.





   JLJac on December 05, 2013, 08:48:50 AM (Last Edit: December 05, 2013, 01:20:17 PM):

Should've left yourself better notes!  Tongue

Heh, actually I don't comment at all... This is just a two week project anyways, why bother Wink

this game is fucking amazing, one of few games i am actually genuinely looking forward to playing, massively inspirational as well thank you for making this game man
Thank you! Remember that it's extremely difficult and frustrating though Tongue

Update 206
Finally have something I can show:



Not much to add really, this is what I've spent the last couple of days doing. We started out with the pups just looking like squashed versions of adults, now most of the sprites they're compromised of are unique and not shared with the player. Other than that they work pretty much exactly the same, just simplified.

You can pick one up on your shoulders - the animation solution might be a little wink to the puppies in cave story. The one sitting on your shoulders doesn't affect your movement at all, which doesn't really make sense, but I have to go with the less frustrating solution sometime, don't I? You also have both hands free.

When you have a pup on your shoulders, you can "pick up" an additional one, by just grabbing it. The pup will run next to you, and you can pull it up ledges etc. This is what happens when I have the black pup on my shoulders and the yellow pup attached to my side, in the gif. This pup will also weight you down, and make climbing and jumping slower and less effective.

This last mode also works for stunned/dead pups. The idea is that when they're sitting on your shoulders, they are holding themselves in place, but if they are unable to do that you can still drag them along in the second mode. If you for example drag an unconscious pup with you, and it wakes up, it will jump up on your shoulders shortly if that spot is free.

You might notice that the pups cut into each other a little bit - some of their sprites are below the other pups, some in front. This is an issue when they grab free sprite channels, because they all want to have channels as close as possible to channel 400 or something like that, which means that the first to spawn gets 400, 399, 401 etc, and the next one gets 395, 406, etc. That's pretty easy to solve, I'll just have to get around to it.

Also the framework for pups holding flies/objects is in, and if you throw them at a fly they catch it and eat it. While the player can carry two objects, a pup can only carry one at a time.





   JLJac on December 05, 2013, 01:21:33 PM:

Aaaaaah!  Epileptic
Fixed it! Strange though, it was broken on my phone but not on my computer... tried a new host, this is definitely the last time ever I try something new!





   jamesprimate on December 05, 2013, 02:59:42 PM:





OH. MY. GOD. that is next-level cuteness.





   JLJac on December 07, 2013, 02:09:49 PM:

Hahahaha! In the next shrek movie my characters will be featured, promise!

awwww you held that little guys hand awwww
This game is becoming a very strange mix between ultra-violence and a hand holding-simulator! The project is officially out of control...

If the hand holding pup only takes one hand, can you still hold stones and spears with the other? How do you juggle between throwing the pup or throwing the spear?
I've been thinking about this, and while it would make sense to be able to hold a spear in the other hand, that would kind of make you question why you're not able to hold a pup in each hand - and then you would be able to carry all three of them around, which wouldn't be as fun gameplay-wise, as you pointed out. So for now holding a pup in one hand takes up both of your hand slots - that's not set in stone though. If it's just too annoying I might allow you to carry a spear or something simultaneously.

Thank you everyone for keeping my motivation up Smiley

Update 207
Made a new version of the pups' path finding, that works in one single calculation, contrary to the ordinary path finding which ticks along in real time as the game is running (to save framerate). The one-shot path finder will be used for when you exit a level, and the pups following you to the next level need to calculate if they are able to follow you, and if so how long it will take them to reach the short cut.

This path is saved as an array of all the tiles the pup has to pass through in order to get to the exit.

I also plan on saving the time when a pup is offloaded. That way, if you exit a level while a pup is running towards you, and then quickly re-enter before the pup has caught up, I can calculate how far along its route it will have gotten, and load it on that tile. That way I can fake some activity going on in rooms you are not currently viewing.

The lizards should probably get some similar treatment. Right now they're just re-loaded in the same general area where they were offloaded, but not much else is saved. Except their health, of course. Ideally I'd want to be able to exit a room, as I see that a lizard captures a pup and start off towards its den. Then return to the room, and have the lizard and the pup re-loaded, with the pup in the lizard's mouth, in a reasonable position you might expect it to have reached in the time it was off screen.

Gah, today I totally broke my rule of "write what you have done, not what you plan to do"... But well. Planning to do those things is the reason why I made a new path finding function for the pups today. More to come, stay tuned.





   JLJac on December 09, 2013, 03:22:46 AM:

Update 208
Ok, so here's why it's not a good idea to promise things in advance... You know those things I wrote about last time? I did some of them. Nothing new to write Tongue

Actually what I've been doing is making the pup an object that exists consistently between levels. Like, its position is saved when you exit a level, it can follow you to the next level, etc etc. It's also capable of some very abstracted movement when off-screen.

Generally if there's anything I'm not extremely happy with in my game it would be how inactive the world is when off screen. Everything just goes into stasis, and is basically just saved as coordinates to later be loaded. This is because the game engine was originally written for a single-screen, multiplayer game - and when you maneuver between rooms it basically starts a "new game" for each room you enter. It has gotten a little bit more dynamic, and at least there is a pretty decent illusion that the entire world exists simultaneously, but part of that "each room is a new game" skeleton is still around.

Maybe I'll write a little engine that's capable of moving off-screen entities around and even have some very basic interaction between them. It's just a question of whether the current illusion of consistency is solid enough - it might be to a player that's not actually aware of what's going on under the hood.





   JLJac on December 09, 2013, 01:25:03 PM:

Update 209
Added the ability to give items to pups. If you place an object on the ground in front of them, the one who's closest will go to the item and pick it up.

Pups will be able to use weapons in panicked situations, but likely it won't help them much, and the feature is mostly intended to be used as a way of carrying extra items. Now at least the pups are good for something.

In order to retrieve an item from a pup you can pick it up in the piggyback mode, and then hit the action button again. Then the item is taken from the pup, and put in your hands. If you put the pup down with the standard release item command, down+fire, it'll jump off still holding its item.





   JLJac on December 10, 2013, 12:24:34 PM:

Hi and welcome!

The difficulty is actually the games' biggest issue right now, IMO. The game single player campaign doesn't really suffice for the type of game play you describe, where you get into a comfortable pace of finishing levels one by one - rather I want you to have to retry each hunt a few times before you make it through. The problem is that right now you have to retry waaaay to many times. I'm looking into ways of making it easier.

Multiplayer mode offers some replayability, I think. Me and my cousin have logged many many hours of competitive play during the development of the game, and we are not really getting tired of it. Which may be because the game has been developing and changing, of course Wink

The thing with the pups is actually that they don't help you. They are there as my take on a "story", taking care of them is an optional side quest, and the only quest in the game except staying alive yourself. So if you don't want to be bothered, you can just ignore them. Actually an important part of the narrative will likely be that you can't save all three of them, but will have to prioritize. I think it would be interesting to have events like that, and the decisions are yours, ie not a pre-scripted cut scene.

Update 210
Misc pup stuff. What happens when a pup is off-screen holding an item? What happens when you enter a short cut, with a pup in the piggyback-position, and the pup is holding an item? What should it look like when a pup is carrying a spear? Etc etc.





   jamesprimate on December 10, 2013, 02:52:30 PM:

many hours of competitive play during the development of the game, and we are not really getting tired of it. Which may be because the game has been developing and changing, of course Wink

having played the game a lot, i agree. even solo! the enemy AI is really challenging, so each new hunt is a different experience. you can't just "figure out the trick" and win. even if you are good, often the lizards will just straight up out-maneuver you. even now i die constantly and in amusing new ways XD

 





   JLJac on December 11, 2013, 07:23:08 AM:

Hehe too easy isn't going to be a problem!

Actually the very thing you identify as a problem is the thing I want to achieve. Many games have tried to incorporate "moral choices", but many times it's just a question of choosing your flavor of progress, red or blue sprites. For example I remember bioshock having the options of "saving" or "harvesting" little sisters (my memory is a bit foggy as i didn't own the game, just saw it at a friend's) but both choices were beneficial. This is, I figure, because they didn't want to have the conflict between emotional stuff and the "play brain" as you call it. In real life though, as I see it, the very definition of a moral choice is going against your "play brain".

Well players usually reduce a game to inputs and outputs after a while and if the pups don't have any advantage at all the player may feel a bit of conflict between like, the mood and setting of the game on one hand and the actual rules on the other hand.

My idea is that this internal conflict in the player will enhance the mood of the game. The game describe a very harsh world, and choices such as "should I save these children or let them starve" are very harsh choices to go with it. If you are the "inputs outputs" kind of player, the option is always available to ignore them, though!





   JLJac on December 12, 2013, 10:06:50 AM:

Thanks!

P.S. The black pup is my favorite. :D
Heh, you just saved him, he was going to be replaced, but now I think I might keep him. The colors will be yellow, black and green-ish, as it stands.

Update 211
Worked some on the pup AI. Instead of being hardcoded into special behaviours for lizard, players, other pups the pups are able to have a few template attitudes towards other enteties, NEUTRAL, FRIENDLY, FLEE and HOSTILE.

This means that in a situation where you kill one of the pups, the others might consider you something to FLEE from or be HOSTILE towards, and then the same AI as when those behaviors are applied to a lizard can kick in.

Here's a horrible chaotic gif of me and the pups spawning, with the pups having the "HOSTILE" attitude towards me.



As you can see the green one is quick to grab a spear and kill me. The others are just trying to flee. You may also notice that the green pup doesn't throw the spear until there are no siblings between it and its target - me.

Now, a situation where the pups are hostile like this likely won't occur in the game, unless you murder one of the pups in front of the others while no lizards are even around. But the same behavior can, as said, be applied to lizards as well.

The pups have different personalities, and the green one is the violent, heroic and brave. When you find them he is holding a spear, and guarding the others. He always wants to carry a spear, and if he doesn't have one he'll pick up whatever weapons he can find around the levels. The HOSTILE behavior is more or less reserved for Green, he is the one responsible for protecting his siblings, and if the player betrays them or if a lizard is carrying a pack mate off towards its den he'll try to use his spear.

I've actually had him "rescue" me once, when a green lizard was carrying me away he lodged a spear in its back. Sadly I was already dead, otherwise that would have enabled me to continue playing.

The other pups are also able to use weapons, but only in panicked situations when a pursuing enemy is getting too close. At this point I don't know exactly what their personalities will be, but I'm contemplating having one of them sickly or injured, so you'll pretty quickly have to decide to get rid of it.





   JLJac on December 13, 2013, 01:52:12 PM:

Thanks people!

Yeah, they should be able to get past each other easier. I'll look into a "walk above" solution. Thanks!

Update 212
Today I finished(?) the "social AI" as I call it, a horrible thing that's way too complex for a game like this. Theoretically it's able to simulate shakespearian dramas such as taking pups 1 and 2 off to the side, place 1 in the sight of 3, who's a little bit to the side, killing 1, but make sure that 3 thinks that 2 were closest to 1 at the time, making 3 hate 2.  Tired Because of bad communication between the game and the player this whole system will basically look like "a weird bug happened, where one pup suddenly became aggressive" but it was fun to make lol.

Each pup has, for each other bear creature, a value -100 to 100 for how much they like that creature. They also have a temporary "like" value, on the same scale, that slowly adjusts to the base value. This is used for a situation like if you throw a rock at a pup - then they will all get a very negative temporary value towards you, meaning that they'll flee. But the base value is only lowered slightly, meaning that after the initial shock settles, they'll come back to you and be your friends again. But the base value is still lowered, so if you throw a lot of rocks, they'll eventually lose their temper and start to avoid you for real.

The relationship will only be able to heal (by throwing up food, rescue from lizards) until a certain degree of hostility, after which they will never trust you again. But that is more or less reserved for spearing them to death one by one in a room where no lizards are around.

By now we have an engine that can understand that a violent situation is going on, who is the victim, who is the offender, who is able to see the crime, etc. And, as I mention above, if they are not able to see the offender they'll make their own assumptions about who did it, which will probably not show up in the game, but it was fairly easy to implement, so well. They can also understand if an act of violence was an accident, by looking if there are enemies close to the offender or victim, and if so react less harshly to the crime.

If you commit an act of violence towards a pup, the other's will react depending on how much they like that specific individual. If they were enemies with it, they won't react as negatively.

It's a mess. But hopefully we won't see much of that mess, because it's not that usual for players and pups to hit each other with weapons - most of the times those situations are accidents, which the violence recognition engine accounts for. But if you are a crazy evil person, the game is able to understand that and react accordingly, which I'm happy with.





   JLJac on December 15, 2013, 08:20:29 AM:

Yeah, the black could be the sickly one... only problem is that since it's the hardest to see, if it's also sickly, the choice of which one to dump first might get too easy.

The sickly one developing is interesting, but I won't ever be able to make them behave in a way that's beneficial to you Tongue I'm just not good enough for that kind of AI.

Update 213
As the pups fleeing behavior was just too pathetic (running into a corner an shivering there) and fleeing behavior is one of the things you might actually want them to be able to do, I updated it a bit. The big difference is that they are able to move between rooms by themselves.

For each of the room's exits, a dijkstra map is created, mapping the distance from each pup-available tile to each exit, using pup-possible types of movement:



When a pup is threatened, it looks at the dijkstra map values for the tile it's on, and the tile it's fleeing from. Then it can decide on which exits it is closer to than the enemy. If there are several, it can compare them, and go for the one where the difference in distance is the greatest. Then it's just a question of running! This is exactly the kind of fleeing behavior that the flies already use, but with hives rather than exits.

When reaching an exit, the pup object is put in stasis, and the pup is saved in the next room. Upon entering that room the pup is loaded, in a position that has roamed around the level a little bit, the number of steps determined by the amount of time since the pup was last seen.

When fleeing from players, this behavior is pretty fun. The pups run into another room, you follow, they run to another, etc.

If the pup is unable to reach any exits, or the enemy is between the pup and all reachable exits, it uses the old fleeing AI, which is horribly bad but at least enables it to move in somewhat the opposite direction. The bad AI running back and forth actually looks pretty cool in this new context though, because it only sets in when the pup is cornered, and it conveys a suitable feeling of panic.





   JLJac on December 19, 2013, 12:55:30 AM:

I think I started at about fifteen, and now I'm 24, so that's...  Epileptic almost ten years Epileptic

Update 214
Behold the beauty and grace of nature:



Throwing up officially added!





   jamesprimate on December 19, 2013, 01:26:40 AM:


Update 214
Behold the beauty and grace of nature:



Throwing up officially added!

AHAHAHAHAH  Hand Clap





   JLJac on December 21, 2013, 07:55:25 AM:

Update 215
Ugh... One of those days.

James wanted me to make a t-shirt that could be used as a kickstarter reward, and because a t-shirt probably should have a logo on it I decided to revisit the text elements of the game. After all there has been some talk back and forth about that, so it could use a little improvement.

There is a little bit of a tribal theme going on in rain world, or tribal industrial you could probably call it.

Look at this level, for example. (Click for original size)


I kind of like this little bit of flavor, and would like to explore it more. What could I do with tribal/industrial?

So then I had this brilliant idea, that I would draw inspiration from mayan writing, mix it up with graffiti, and make "if mayans developed to the modern and post-modern age, did graffiti, and that graffiti was rendered through pixel art" kind of typeface. With roman letters. There's no way this could fail, right?

I started out being kind of happy with my work. It looks mayan, it looks a little graffiti and a little high-tech. Sweet, this is going to be awesome. I'm already planning all the new art assets for the game, including mayan runes in 3D and mayan high tech gargoyles to stick to buildings, etc etc.



Then I try to move the linework to photoshop and give it color. Now I encounter the problem. If I want it to be somewhat legible, I have to fill in the main letter shapes, and leave the little beads and dots and stuff as they are. Or at least somehow put the letters apart from the decorations. But. Filling in shapes takes away from their mayan look, because the mayan look is more or less based on it being only line work, no solid areas, and all the lines being of equal thickness. Finally I manage this:



And realize I've wasted two days  Lips Sealed Contrast the old logo:

¨

and you'll see that it is both more legible, and cooler looking, which makes this new mayan adventure kind of meaningless. I haven't given the mayan typography all the finish I could've, but I think it's not really needed, it's painfully clear that it doesn't work.

Back to the drawing board.





   JLJac on December 21, 2013, 08:27:11 AM:

True... Monochrome might look better, but I think it would be harder to read as the hue difference is meant to set the letter shapes apart...



 Undecided





   JLJac on December 21, 2013, 10:04:26 AM:

And you guys are able to read it? Not like, decipher, but read?

I'm curious now, just how sentient is the playable species exactly?
This isn't really known, but there are a lot of indicators. They are able to use tools, but not manufacture them, and they don't seem to have language. I think religion is beyond them, actually.





   jamesprimate on December 22, 2013, 09:53:09 PM:

True... Monochrome might look better, but I think it would be harder to read as the hue difference is meant to set the letter shapes apart...



 Undecided

i think its going pretty well too. just a thought, but i think the lettering could look really amazing in that distressed glowing neon style that you do in levels like this:


that, large, with the cat in front of it perhaps? NICE.





   jamesprimate on December 28, 2013, 07:17:57 PM:

as a horribly underpowered netbook user, rainworld runs flawlessly for me even with 10 other windows open. fear not in that regard!





   JLJac on December 31, 2013, 09:29:51 AM (Last Edit: December 31, 2013, 09:34:59 AM):

It's mostly running well enough, in some of the more extreme situations I can notice some slowdown on my machine. I think most people will be able to enjoy the game perfectly well Smiley

Update 215
It's been kind of quiet here, with the holidays and all - I hope to get back on track soon enough. Also James has been setting up the kickstarter, and I've been assisting him some in that. James said it might be a good idea to do a count down to opening the kickstarter, in order to get people hyped, so here we go:

THREE DAYS TO KICKSTARTING RAIN WORLD!

In other news, I've added the feature of jumping on other creatures. Preciously you could collide with other creatures, but not jump on them. Now, if you press the jump button while colliding with another creature and not being like, below it, you can jump on it. The jump will propel you upwards, while the other creature is inflicted with an equal force downwards, and in the case of lizard a tiny 3 frame stun. For lizards the downwards force is also boosted a little bit compared to what the mass of the two creatures would suggest (screw conservation of energy) to make up for the fact that they're most often fairly steadily anchored to whatever they're clinging to, and you didn't see much effect otherwise.

Jumping on a creature gives that creature your kill tag, but only if no other player has a kill tag on it already. This means that you can (in theory) get a kill on a lizard by jumping on it and making it fall to the bottom of the level, but only if no other player has recently damaged it. This is because it would feel kind of cheap if you speared a lizard and it's just lying there, not quite dead yet, and then your friend comes by and nudges it with his feet and that makes the kill count as his.

EDIT: Some answers to questions, sorry guys:
@DarkWanderer - the game can either be finished with a fairly small map, or, if the kickstarter goes well, be expanded to proper metroidvania size. We'll see what happens Smiley
@NicoM - get ready to laugh... Macromedia Director. It was the only platform I was comfortable with when I started two years ago, and this was just going to be a month long project or so anyways... There isn't exactly a demo for this current game, but there is a movement prototype from when only the player character was made, in which you can move around a little and get a feel for the controls. Someone re-uploaded it a few pages back, if you do a little digging and searching you'll find it.





   JLJac on December 31, 2013, 04:42:09 PM:

Whoops, there's obviously a little delay on getting projects started for them to review the project, so we can't launch until the 7'th. Sorry!
ONE WEEK TILL KICKSTARTING RAIN WORLD

and yeah, we have been trying to make the game look appealing to newcomers as well!
Happy New Year everybody!





   jamesprimate on January 01, 2014, 11:46:46 AM:

great info gents, we really appreciate any advice and especially previous experience! Thanks, and I'll be in touch shortly  Gentleman





   JLJac on January 01, 2014, 12:05:32 PM:

Wooow! Look at this, people!

And in first place, leaps ahead of everything else, is the sneaky AI focused plaformer with neat physics animation, great looking environments and the most intense looking combat gif, it's ...



Rain World



Hand Clap


Congratulations, JLJac! Your game has been voted as the best devlog of 2013 by the TIGSource community. Here is your trophy.


It's super awesome that you appreciate the devlog so much. It started out as a thing more or less for myself to log my progress, and it makes me very happy that it has developed into this thing that's a source of enjoyment to other people. Now that I know how appreciated the devlog is, I will definitely try to step up and give it some more love myself - I'll try to keep it more consistent, informative and entertaining, and minimize the update slips and neglect it has seen at times.

I'm not really sure if you guys nominated it because of the devlog, or because of the game being devlogged. In either case I will try to make both the game and the devlog as good as I possibly can, in order to make this project enjoyable both prior to the release of the game and after it. I have noticed that many people are interested in technical details, and I've been lazy in answering those questions. That I'll try to change. Thanks again!

In regards to the kickstarter stuff, thank you all for helping out. What you write seem to make a lot of sense, and you guys seem to have a very good understanding of what makes those projects sink or swim. James and I have been dividing the work in a way where I focus more on the strict core of developing of the game, and he is taking care of pretty much everything else (not that I let him do his work in peace). So this input of yours is most relevant in relation to James' work - I don't really know much about this stuff - and I'll be interested to hear what he makes of it. Thanks for your engagement in the project!





   JLJac on January 04, 2014, 08:57:45 AM:

Congrats rainman! :D
Thanks!

Haha yeah a crossover would be sweet! I'll see what I can do Tongue

Update 216
I'm sorry I was all like "OMG I will never again neglect this devlog" and then turned straight to neglecting the devlog haha! The reason is James and I have been working some on a kind of minimalistic website, in order to have something to connect the kickstarter to. What do you think?

joarportfolio.com/rainWorld.html

Please don't post this around or anything, we kind of want to make a reveal later in order to get attention when the kickstarter is up.





   jamesprimate on January 04, 2014, 10:59:42 AM:

are you planning to have several iterations of this game, each one being exclusive to whoever pledged a certain tier of money in the kickstarter campaign?

no way! full version will be available to *everybody*. We do have some pretty exciting reward tiers planned though. At least, IM pretty dang excited for them.

And just for the record, the crossover idea didnt come from any of us, lol Blink





   JLJac on January 05, 2014, 01:07:19 AM:

I'm kind of a purist when it comes to what is canon in the game. We have talked about having creating your own playable character as a reward - in that case there are two solutions I'm willing to go with:

Either the parameters of customization are extremely limited, basically just color.

Or people are allowed to put sunglasses on their slugcats or whatever, but the content is purely cosmetic, and unlockable only through some kind of far fetched key combination or something, so other people won't have to hurt their eyes by seeing it. Or perhaps a text file with a code that unlocks that specific character.

In this latter case you won't strictly have the whole game accessible to everyone, but it doesn't matter that much because all of the content you're missing out on is purely cosmetic, ridiculous and off-canon. You're not missing out on official game content, you're missing out on some dude's desire to play as a slugcat with Johnny Bravo hair, and that's not such a big tragedy in my eyes.

When it comes to crossovers, my canon purism also applies, but some very subtle little references to other media is acceptable as easter eggs IMO. Like, finding a secret room with a little drawing on the wall that could be interpreted as a wink to some other game or something.





   jamesprimate on January 05, 2014, 11:27:52 AM:

uh oh!

Blink JUST FOR CLARIFICATION: KICKSTARTER IS *NOT* IN TWO DAYS Blink

We are aiming for the 9th, but there are still some hoops to jump through first.





   jamesprimate on January 05, 2014, 04:00:58 PM:

no problem!  Hand Metal Right

joar has been hard at work on the press page, fixed some of the layout problems and added super cool fly section breaks. You guys have any further suggestions? http://joarportfolio.com/rainWorld.html





   jamesprimate on January 05, 2014, 07:33:40 PM:

Side-note, can one of the KS rewards be some Rain World wallpapers?

ill put them in there just for you :D

Thanks for all the suggestions guys, we really appreciate it!





   jamesprimate on January 06, 2014, 10:43:15 AM:

STEALTH FERRET PLATFORMER

stealth.

ferret.

platformer.


 Hand Thumbs Up Right





   jamesprimate on January 06, 2014, 09:20:01 PM:

Do you plan on putting Rain World on Greenlight as well?

Oh, and here's another informative KS post-mortem from fellow TIGforum dev Nition on his game Scraps:
http://www.scrapsgame.com/scraps-kickstarter-postmortem/

Thanks Christian! Yes, greenlight i actually FORGOT ABOUT (until last night) with all the other stuff going on, but thats all lined up now.

ahhh regardless of the outcome of all this, in 30whatever days it'll be pretty great to go back to "actually working on the game"





   jamesprimate on January 06, 2014, 11:34:09 PM:

Will Rain World's MP modes be playable against AI bots? Like a survival or practice mode for offline play?

totally. the way Joar has it set up now in the alpha, there are like 5 sandbox "multiplayer" modes where you can choose all the variables, and pretty much all are completely playable for single player. Like, there's an endurance mode where you face wave after wave of lizards of increasing difficulty, that sort of thing. when i play for fun now thats pretty much what i do

But all this still doesn't tell us if this kickstarter will have stealthy ferret plushies.
Well, hello there!





   JLJac on January 07, 2014, 01:37:48 PM:

Thank you to everyone who's engaging themselves in this! It's very nice to see how concerned you all are about the success of our project :D

I'm putting a little bit of a lid on the devlog for a few days, in order to build up for the kickstarter release (and because I won't be doing as much work on the actual game). Michael who's on board as a sort of kickstarter consultant (care to introduce yourself, Michael?) has been telling me that it's better to not leak out any stuff on the side while making the preparations for a kickstarter. You don't want to release any pressure before the big opening of the flood gates. So hold tight people, and be excited about the kickstarter launch!

Right now we don't exactly know what date we're going for, 9'th is not entirely out of the question, but we could end up putting it a couple of days later as well.





   jamesprimate on January 07, 2014, 02:42:49 PM (Last Edit: January 07, 2014, 03:08:10 PM):

you are all probably totally very right. ill set up a rainwold twitter account at the very least. maybe joar wants to do thw tumblr, being that hes super cool visual artist  Cool

for now, mine is @brightprimate

UPDATED: Rain World twitter is at @RainWorldGame

and i wont neglect it! Hand Metal Right Hand Metal Right Hand Metal Right





   jamesprimate on January 07, 2014, 10:31:44 PM:

thanks you guys rock! if you do follow us, let me know youre from TIG and we'll follow back of course  Toast Left





   JLJac on January 08, 2014, 06:47:03 AM:

Update 217

I'm breaking the "don't show anything" rule a little here, as I feel I need feedback in order to continue. We're in this situation where I pretty much have to finish the logo, a task that is completely out of proportion difficulty-wise for me, as you may know.

I tried modifying the old logo a little bit in order to make it less "cuddly" and a little grittier. What do you think?



What I'm looking for is basically something with a graffiti vibe that looks cartoony, but without looking like Care Bears. Like, gritty cartoony, if that makes any sense. And if it's somewhat legible that's a plus. Does this meet the criteria? For some reason I still feel like I'm not all the way there.





   JLJac on January 08, 2014, 07:35:17 AM:

The symbols are the same language as is visible throughout the environments in the world. My idea was that it'd tie the artwork into the world more. IDK though, they're easy to remove...


How about this?





   jamesprimate on January 08, 2014, 09:10:43 AM:

not that you need MORE opinions on the matter, but i agree with christian on the positioning. otherwise it looks fantastic in my humble musician opinion





   jamesprimate on January 08, 2014, 05:23:58 PM:


HOLY SHIT!





   jamesprimate on January 08, 2014, 06:17:07 PM:

jeez, i hadnt even seen half of those!

looks like we have quite a lot to live up to  Epileptic





   JLJac on January 09, 2014, 01:37:30 AM:

Wow, things are moving fast now! The timing for the kickstarter couldn't be better Smiley

As for selling the game vs it being free, right now seems like the most transformative few days in the history of the project, and thus might not be the time to make adamant statements. BUT, most of the time I've been developing this thing I've been a broke sucker, and I will always have a special place in my heart for other broke suckers out there, no matter where this goes. So if we end up selling it, pay-what-you-want or something like that would be the way to go. Or, in the worst case, I could pirate my own game hehehe :D



I agree with you guys on the ferret placement issue, and that's going to change. When it comes to the actual letter shapes... I've been looking at them all morning, doing tiny changes and then removing those changes. The big question now is how do you tell stuck from done? I have no idea, they feel exactly the same to me.

Let's make a check list:

Graffiti influence [YES]
Touch of old black and white cartoons [YES]
Legible [OK?]
Wet, melting, affected by rain [YES]
Not too childish, it shouldn't feel like disney, dora the explorer, care bears, etc [You tell me? Idk... Less childish than the last one, at least.]

Yeah, it's all about that last one. It is a very fine balance right there, I don't want it to be the dark grim future like warhammer 40k, and I also don't want it to be Spongebob. I want it to be a cartoon, but a dark cartoon.





   jamesprimate on January 09, 2014, 09:06:00 AM:



I LOVE THIS ONE LETS DO IT!!!!!!!!!





   jamesprimate on January 09, 2014, 05:55:58 PM:

LOGOPOCALYPSE





   JLJac on January 10, 2014, 01:05:48 AM:

Update 218

Thank you so much everyone for the help!  Grin I think many of you have very good points - elements from the environment needs to be worked in there, and maybe we should drop the cat?

Michael and I talked some yesterday, and sent some images back and forth. One thing that came out of that communication was that I was more able to define what I want - I want something that's sweet & sour. Sweet as in cartoony, sour as in desolate. When doing these logos many people have been suggesting that I should more or less drop the sweet and go entirely sour - which I don't want. My problem, on the other hand, has been that what I've made is entirely sweet, not good that either. For it to be an interesting taste it has to have booth.

Michael works with an art collective, and they've been helping me with a little feedback. You can't imagine how nice it is to have some kind of reality check, rather than just doing something and then staring blankly at it trying to figure out if it's good or not!

One thing we came up with was, the same as many of you guys have been suggesting, to give the logo a bit of texture as if it was part of the environment and affected by the rain.

Here's the latest (and hopefully final) version:



The cat is dropped, it added too much sweet. It will be featured only on the press page, making it more of an "illustration" rather than an integrated part of the logo.

Michael and his artists didn't like the asian signs, but both James and I do, so we'll respectfully disregard that unless someone can come up with a killer argument to leave them out  Wink

Still not 100% on the color - it looks less cute if you use for example blue instead of pink, but this pink/red is featured everywhere in the game's environments, and thus ties it together nicely. I've tried to fade the color down some in order to not have it appear too sugary.





   JLJac on January 10, 2014, 06:48:59 AM:

Thank you Grin I was actually pretty nervous to see whether ya'll would approve of it - it is my game and my decision and all that, but in the end it really does matter what people think. Like, something that's liked by 90% of people has to be better in some way than something liked by 4% of people... or defining quality becomes very difficult. So I want to make something that's my own, but also strikes a chord with the rest of you out there, and hopefully we've gotten there.

My friend expressed concerns that the asian text made it look like many japanese box arts, which apparently tend to have a big title in roman letters and then a smaller one in japanese. I didn't really think of this, but when shown some examples I totally see that it looks similar.

The problem with this is a complicated postmodern layer-on-layer culture kind of thing: It looks like the creator of the logo is trying to imitate japanese box art, but the creator is an idiot, and doesn't realize that japanese writing contains meaning. Instead he thinks it's just some sort of decoration some games have, and tries to imitate it.

Basically it looks like I'm "trying to be japanese" or "trying too hard to be cool" - and as we all know, trying hard to be cool is not cool. (Obviously I am in fact trying to be cool [I mean c'mon, look at it], but if this is too obvious it doesn't work, accordingly to the rules of coolCool

Does anyone else think this is a problem? I myself recognize the problem, but I suspect it's only a problem for those of us who are culturally hyper-sensitive or whatever you'd call it, and that even we may perhaps be able to look past it. Although, when it comes to the kind of people who back indie games on kickstarter, I guess cultural hyper-sensitivity is to be expected.





   JLJac on January 10, 2014, 07:11:47 AM:

In the game, there are two alphabets you can see on signs etc. One has its aesthetic stolen from korean hangeul 한굴, the other is based on cyrillic/roman letters. These are the asian ones, exactly as they appear in the game. No entire fictional languages are created, I'm sorry to say, as I felt that might not be the place to put work when creating a game without dialogue.

The signs are grouped into two words, so I guess the most reasonable thing to assume would be that it's a translation of the title.

The question of offence is actually kind of interesting. Many Swedish people can recognize how annoying it is when people ignorantly use ÅÄÖ for their metal band logos etc. Motörhead for example. They just seem to assume that Ö is pronunciated as an O, which is obviously stupid, because O is filling that niche just fine. Or they don't at all care about us and our language, but are just trying to create a cheap rip-off of our culture/aesthetics that is entirely for and by non-swedes. That's annoying too - if you like our culture, freaking take 2 minutes to look it up on wikipedia then!

I myself am guilty of this cheap rip-off crime, I suppose.

In the game it's somewhat forgivable, as it's pretty obvious that it's just a fictional language that you're not even supposed to decipher. But in the logo... IDK...





   jamesprimate on January 10, 2014, 10:05:01 AM (Last Edit: January 10, 2014, 12:48:40 PM):

my argument for the faux language is thus:

#1. it looks awesome

#2. it adds an element of metatext that's a big part of the actual game atmosphere.

#3. it adds an essential element of incomprehensibility.

in the game there is a palpable sense of 'layers of history': the weathered dilapidated buildings and machines, objects that look familiar but who's purpose you cant discern, and a few varieties of vaguely recognizable text, as if different cultures lived in the same area over centuries of time. For me, this is all an essential part to reading the main character: an intelligent, tool using creature who is able to sense that there is meaning to the world s/he lives in, but that meaning is unknowable. this atmosphere is key, and the logo conveys that.

I don't think of this as "fake koeran" anymore than the other languages are "fake Cyrillic" or "fake English". it is a remarkably effective way of conveying that uneasy sense of *almost* understanding, like reading language in a dream. removing all that because of the possibility a few people might misunderstand is a biiiiiiiiiiiiiiiiiiiiig mistake in my opinion. plus it looks rad, c'mon.





   jamesprimate on January 12, 2014, 07:32:25 AM:

SOON....





   jamesprimate on January 12, 2014, 01:09:24 PM:

but like, for real this time!!!  Facepalm





   jamesprimate on January 12, 2014, 06:46:34 PM:

Hand Metal Left**OFFICIAL KICKSTARTER ANNOUNCEMENT THAT IM DOING BECAUSE JLJAC IS SLEEPING** Hand Metal Right

Tomorrow, Jan 13th at 7pm EST / 4pm PST / 1am Sweden, The Rain World Kickstarter will commence! For real!


Leading up to that, we will be doing a little pre-launch live-stream party and chat with JLJac (and myself), taking a peek at never before seen screenshots, videos, sketches and listening to 15 tracks from the Rain World soundtrack. This will be 6pm EST / 3pm PST / 12am Sweden, at: http://www.twitch.tv/rainworld

Thank all you amazing people for your help, comments and companionship this far! Rain World would not be what it is without your tireless enthusiasm and interest in the project. 2 years and 67 pages, oh my!!





   jamesprimate on January 12, 2014, 08:59:14 PM:

yes indeed! thank you friends!





   jamesprimate on January 12, 2014, 11:05:39 PM:

classic "make important post, immediately becomes new page" Facepalm just to reiterate...

Hand Metal Left**OFFICIAL KICKSTARTER ANNOUNCEMENT THAT IM DOING BECAUSE JLJAC IS SLEEPING** Hand Metal Right

Tomorrow, Jan 13th at 7pm EST / 4pm PST / 1am Sweden, The Rain World Kickstarter will commence! For real!


Leading up to that, we will be doing a little pre-launch live-stream party and chat with JLJac (and myself), taking a peek at never before seen screenshots, videos, sketches and listening to 15 tracks from the Rain World soundtrack. This will be 6pm EST / 3pm PST / 12am Sweden, at: http://www.twitch.tv/rainworld

Thank all you amazing people for your help, comments and companionship this far! Rain World would not be what it is without your tireless enthusiasm and interest in the project. 2 years and 67 pages, oh my!!

and my apologies for the redundancy





   jamesprimate on January 13, 2014, 02:46:28 PM:

HEY FRIENDS!

join us for a special top secret Rain World livestream, video preview, new screenshots, listen to 15 tracks of rain world music, kickstarter hype and all sorts of hanging out

http://www.twitch.tv/rainworld






   jamesprimate on January 13, 2014, 04:27:42 PM:

 Hand Money LeftKICKSTARTER IS GO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Hand Money Right



http://www.kickstarter.com/projects/rain-world/project-rain-world

 Beg





   jamesprimate on January 13, 2014, 05:22:07 PM:

rain world greenlight page, for those of you who are so inclined:

http://steamcommunity.com/sharedfiles/filedetails/?id=213453611





   jamesprimate on January 13, 2014, 05:49:55 PM:

Backed! Good luck guys! And if you need a c++ guy, feel free to hit me up. [:D]

oooohhhhhhhhhh  Hand Thumbs Up Right





   jamesprimate on January 13, 2014, 09:12:03 PM:

Hello I'm the Michael guy the wonderful Rainworld devs were talking about before, and DevMicco on the twitch stream chat. I help indie people bring their games to the public.

^

Pandara has been a *fantastic* help. if you are willing to get serious and work HARD, talk to this man. (but maybe later, cuz hes busy right now)  Gentleman





   jamesprimate on January 13, 2014, 11:29:34 PM:


aww i was just writing a follow up email to him with more info! guess i need to be quicker  Durr...?

http://tigsource.tumblr.com/post/73282834344/johnsandoval-project-rain-world-a-game-by-joar

for great justice

good luck guise

i tried to upload the gifs but they run into tumblrs 2 mb cap Sad

great justice indeed! thank you Lord Sandoval!

Do you guys have any plans on doing another twitch streaming? That first one was awesome  Coffee

i had a lot of fun! id' totally do another one but problem is, both Joar and I have terrrrrible internet, so we had to get Panda to host this one for us XD

Maybe we should do another one for kickstarter update video launches or something? Then we can get him to give us his sweet, sweet internets again.





   jamesprimate on January 14, 2014, 10:17:42 AM:

Judging by how quickly the $200 rewards sold out, I would stop developing the game and rather start selling slugcat plushies  Hand Money Left

you guys DONT EVEN KNOW, hahahaha





   jamesprimate on January 15, 2014, 07:00:36 AM:

Seeing some stretch goal talk on KS page, posted this:

Other than Linux support, consoles, and online MP, I really don't want them to have stretch goals. The devs already stated their intentions and ideas for a bigger game; I'd rather see funds be used for polish and improving the game than just cramming features in because of stretch goals

How do you guys feel about stretch goals?

honestly, we've been sort of wracking our brains to figure out what to do for stretch goals that would generate some excitement but also wouldn't compromise anything. as Joar explains it, there is a kind of grey area no-mans-land between "comfortably funding Rain World as it is" and "totally rebuilding as Rain World 2.0 so its super slick". We sort of use the analogy of Spelunky vs. Original Spelunky, although its not quite that extreme.

RW2 would guarantee all the cool jazzy stuff: multiplatform, internet multiplayer, much easier console porting, etc etc., but is still quite a bit out of our grasp at this point. RW1, we can probably bolt on some cool stuff beyond the original scope, but Joar is already stretching poor Lingo to its breaking point, so without actually doing the work, its unsure how far exactly we can go with it.

Which makes me very relieved to see people say "more rain world" as a stretch goal, because we know for sure thats possible.

###

ALSO! We're trying to not be too annoying about KS stuff, but today Rain World is the Kickstarter pick of the day so I've got to be that guy and say "please share and RT and help us hype" or whatever, because, hey now is the time to do that right??





   jamesprimate on January 15, 2014, 01:33:44 PM:

^ this is great advice and we will take it into consideration. As you say, for the revamp we are talking about 4-5x ballpark, so there is a lot of space yet to go in that regard.

Anyway, on an almost DEVLOG sort of topic, we managed to work a nice little write-up of Joar's procedural animation style (with new gifs!!!) into our first kickstarter update. So that might be interesting and worth reading even if you aren't a backer!  http://www.kickstarter.com/projects/rain-world/project-rain-world/posts

(you may have to scroll through a bit of the usual fluff first though)





   jamesprimate on January 16, 2014, 12:07:18 PM:

thank you! seriously! im so excited that you guys are excited with us. but we're not quite there yet though. seems weird to say this considering the hype, but i'm not celebrating anything until we actually cross that line. still 28 days of kickstarter war to be fought Epileptic





   jamesprimate on January 16, 2014, 05:46:41 PM:

So you're asking for about $20k (after all the cuts/fees)... but that's just for a bare-bones version right?

It just seems like a kind of low number for a year's worth left in development. Are you expecting to hit some other goal that would allow for fleshing the game out more? Like at what amount would you consider the game to be no longer "bare-bones"

thats a good question! a significant aspect of this kickstarter is to allow for us to figure out what resources we are going to be able to put into Rain World in the coming months, and therefore to a certain degree the scope of the game. we've worked on this for years with no thought to money and would gladly do more, so its not about "recouping expenses" or "getting paid for the work" or anything like that.

the original goal was a figure that takes into account all the things that it would take for just Joar and myself to finish into a publishable state, including a little freelance programmer help on the side. the game itself wouldn't be 'bare-bones', thats probably an unfair statement to make and i feel kind of silly having made it, but i wanted people to understand that at that budget it would be basically limited to what the two of us in our basements could do. with more funding brings more options: new tools, better hardware, more time with awesome programmer wizard pros to help us out with things like internet multiplayer (and expanding the game in that direction), people to dig through code and port to new platforms, etc. all that jazz.

anyway, back to the actual question: i've talked a little in previous posts above about the differences between our ideas of "rw1" vs. "rw2.0", and it seems like a decent version of rw2.0 starts to be become feasible at around 100k KS (minus fees and related expenses). So, we're still a long way to go before that discussion!

but in related, amazing news: only $600 to goal!!!





   jamesprimate on January 16, 2014, 08:26:32 PM:

Hand Money Left Hand Money Left Hand Money Left Hand Money Left Rain World: FUNDED! Hand Money Right Hand Money Right Hand Money Right Hand Money Right








Thank you all for your incredible support and enthusiasm! It goes without saying that we wouldn't be anywhere without your help and encouragement. 2 days and 3 hours... absolutely unreal. Now, if you'll excuse me, I'm going to go slip into a brief coma.  Gentleman





   jamesprimate on January 17, 2014, 10:28:59 AM:

I asked in the stream, but I don't think it got noticed. Can you rebind this to play on a controller and what not? It doesn't... SEEM like you'd use that many buttons to play the game... lol

they were working on it way back in the devlog. iirc, it's already possible, even though the controls might not yet be finetuned for controllers.

yep! gamepad support is already implemented, i play on my 360 controller. needs a bunch of fine-tuning before its "ready", but totally functional.





   jamesprimate on January 17, 2014, 01:35:02 PM:

Congrats on getting funded, guys. Looking forward to seeing how the final game turns out with all the funding.

Probably going to donate when the budget allows for it. Is early access planned for August and/or 4 months before launch like the rewards say?

oh geez! thats a pretty egregious typo, i can't believe nobody caught that  WTF

actually... might not be a problem as we already have a build in place so we can very likely have SOMETHING to throw out there in Aug, but certainly wasn't intended to be that early, seriously thanks for pointing it out to me.





   jamesprimate on January 19, 2014, 12:35:59 PM:

thanks all for the kind words! we're working hard on getting some interesting updates and new directions up in the next day or so, ill post more then.

Since you're going to add a C++ programmer post Kickstarter, can I assume you're moving to another engine/SDK?  Or perhaps you're building an Xtra extension to increase performance?

very much so looking into those options! we're in a sort of interesting position because the game as it is now, Joar is basically straining Lingo as far as it can go. Many of the things that people are requesting and we'd like to do (especially ports to other platforms/consoles) would likely require migrating/re-building the entire game into another programming language. By all accounts, that would be the best thing for Rain World, BUT its expensive and tedious, so we'd need to make sure that the resources are in place first and its, well, not completely impossible. More on this soon i hope!





   jamesprimate on January 20, 2014, 01:26:36 PM:

NEW STRETCH GOALS ANNOUNCED: TO LINUX AND BEYOND! http://www.kickstarter.com/projects/rain-world/project-rain-world/posts/723027





   jamesprimate on January 20, 2014, 05:30:24 PM (Last Edit: January 20, 2014, 05:39:46 PM):

I understand it must be very exciting getting a lot of attention at the moment and you want to please everyone and release on all platforms .. but doing a rewrite of a 3 year long project sounds like a terrible move to me. It's a good marketing move (yay, new better tech!), but ultimately I think RW looks great as is, and being dependant on a new programmer to achieve what you've already achieved is a huge risk. I also really think this game will shine in its simplicity, and having more dynamic and larger levels that break the 'single scene' format we've all seen so far doesn't sound like it would add much.

I'd love for Joar to go in some depth here, but he's slaving away at code as we speak, so for now please take my modest understanding of the situation and perhaps we can get him in later: 

there is no intention to move outside of the structure of the game as you see it now. we hoped to make that clear in the update: Joar has a very strong idea of what he wants rain world to be, and the tools currently being used are a limitation to actually achieving that. the reason that Unity was chosen specifically is that Unityscript shares a lot of similarities with Lingo, and thus we will be able to migrate most of the current code (and hopefully all the art assets) with relatively minor tweaks.  were not trying to make Rain World 3D here, just get it so it runs nicely and looks as good as it can! further, there wouldn't be a second programmer writing the game play of rain world or anything, rather someone who is familiar with the things we are not helping with things such as porting and Unity-specific tricks.

I hope that clarifies some!





   JLJac on January 21, 2014, 08:53:33 AM:

Hi there! Sorry I haven't been around much lately, there has been quite a lot to do.

Let me clarify a little what we've been thinking about this. Very obviously, moving to another dev environment will set me back. But there are some arguments for it that I find kind of compelling:

* The three years of development has not been full time, rather it has averaged at something like 1 hour a day. Also it's not three years - yes, the first prototypes for character movement etc were initiated a little earlier - but then the project rested for some time, and active development didn't start until early 2012, two years ago. So in the absolute worst case scenario, where it takes exactly as long to re-make the game as it has taken to write it the first time, we get 2 years / 8 which give us about 3 months of full time work. Aaaand...

* A major chunk of my development time goes towards finding solutions for complicated problems such as path finding, through iteration, and fine tuning animation stuff, through iteration. If I'm porting the game, I wouldn't need to spend 4 hours determining whether that jump force should be 1.2 or 1.4 by playtesting over and over, I could just grab the number from my old game and move ahead.

* An undetermined but monstrous amount of time has gone to creating the level editor/renderer. Perhaps we would like to port the level editor too, but it's not strictly necessary. If the schedule becomes tight we can as well use the old one.

* Another sizable amount of time has been put towards making art assets for the level editor, and making levels. Some of this work could also be redone if we have the luxury of extra time, but could as well be skipped. A little bit of conversion code could make the old levels/level editor projects work just fine.

* Anything is better than Director. For three generations I've feared that newest version of windows wouldn't support Director applications. Lingo is a dead language, we need to move to something that we can count on continuing to exist for a few years into the future. Plus, updates, and active help boards on forums! I imagine googling for a problem and finding something else than a post from 2005 with no answer.

* The things we listed in the kickstarter update. I too like the single room layout, and the game idea is pretty much based around it, so it'll probably stay. But imagine how awesome to have these things by choice, rather than necessity! Maybe some rooms in the hub world could be a little bigger, with a scrolling screen, to convey scale? Maybe we could have water? Maybe we could have this really big impressive room where 400 flies are swarming? I don't want to turn this into a gears of war spectacular effects fest - I just want to expand my choices a little bit so I can do the things I want to do without having to worry about how many milliseconds fatter each frame becomes. I've always wanted to have dangling chains and plants that move a little as you pass them, but it's been impossible for technical reasons. I would be super happy if any of it became feasible.

* Personal development. The current idea is that I would read up on the basics on whatever language we're moving too, and then sit next to the expert guy as we port it. During the process of us porting it together I'll learn the new tool. This way we don't only migrate Rain World to another language, we also migrate me. I already have some experience of different coding languages, and I tend to pick them up fairly quickly. So in the worst case scenario, where we aren't able to pay this guy for more time than it takes to port the thing up to where we are today, I can jump in and continue development from there myself. If it isn't the worst case scenario, we could continue to use this guy's expertise to further optimize the game and overcome technical limitations.

Right now I can only have 1000 sprites on the screen at a time, and I've had to cap the number of lizards at 4 because otherwise it ran too slowly, etc etc. I have managed to work with these limitations, and I have a working game. Also I'm kind of fine with it, because I didn't intend for this game to be something with 100 enemies on the screen. But it would be cool if I knew that the choices I made was because of artistic license, not technical limitations. Also I trust myself to not put 100 enemies on the screen just because I can haha!

I don't think it'll be that bad at all. Unity is a tricky choice due to its architecture and associated mentality (drag'n'drop before code - some love it, some not so much (I'm firmly in the second camp)), but porting rain world should still be possible.

Hm, that's a little bit worrying. I want to have as few pre-made solutions for game stuff as possible, actually, because it will only collide with my code and become annoying when porting. I've written all my collision logic etc myself, and it's far from perfect, but it's custom made and well integrated. I worry that some misaimed helpfulness would only slow me down.

What do you recommend? I want something that's easy to learn, performs nicely, but doesn't come with a load of drag-and-drop stuff and physics engines etc. Just a good clean development environment. We've been thinking about AS3 as well, do you think that would be preferable?

All of this might not even be a problem though, we don't have the money yet haha!  Wink If we don't raise enough to do this, I'll just continue in Director, and we'll take in a c++ guy to see if he can help us out with some xtras to speed things up or polish them.





   jamesprimate on January 21, 2014, 03:54:43 PM:

WOW, utterly astounding! Massive tanks for all your "i would play this" thumbs up, we'll see you guys on Steam!






   jamesprimate on January 22, 2014, 07:38:00 PM:

Check out the most recent kickstarter update for new, never before seen alpha gameplay footage! Plus, insight into the creatures of Rain World, gameplay, AI and animation: http://www.kickstarter.com/projects/rain-world/project-rain-world/posts/726944





   jamesprimate on January 23, 2014, 03:28:27 PM:

The lizards hunt you, with different behaviour depending on their head colour, while you hunt the bats and the bats hunt the lizards.

Bats can hunt lizards now? Who, Me?
that's what made me wondering too

Not going to spoil TOO many surprises Wink





   JLJac on January 25, 2014, 02:07:23 PM:

Haha I for one am not as concerned about spoiling stuff, so I'll just ruin your excitement right away! No, bats don't hunt lizards, but they tend to flock around them because they enjoy picking on them, and because they know the risk of Slugcat ambush is smaller if they're hanging out next to a lizard.

On the questions of the game world layout:
The game world consists of many interconnected rooms, that you can move between metroidvania style. Some of these rooms are "swarm rooms", where the flies swarm and where you go to hunt. The swarm rooms can also be played as stand-alone challenges in custom mode. My idea has been that once you have traveled to a swarm room in world mode, it would be unlocked and appear in the menu of the custom mode game types.

On lizard personalities:
Lizards come in a few breeds, identified by head colors. These all have different abilities and feats. Green is the "tank", big, slow, lazy, stupid, but takes a lot of abuse. Blue is the "ninja" lizard, smallest in the family, with the least health, but with the ability to climb on walls and in ceilings, and with a sticky tongue it can shoot at you. Then there are a few others, and then there's red. If you see red, run  Epileptic





   JLJac on January 26, 2014, 09:46:56 AM:

I haven't enabled playing as a lizard, not because it wouldn't be easily done but because it would be kind of dull - you'd just steer in four directions, no jumping or exciting platforming. I might explore the possibility in the future though Smiley

I'm starting to think more seriously about what development environment I should move to, and whether unity is a good idea or not.
So, ever helpful and supportive community, would you mind throwing your advice this way? I know that we did have some discussion about this earlier, but this time around I'll actually spell out what I need from the tool I'm moving to:

* Fairly quick to learn, fairly quick to write in. I need to spend as little time as possible learning the new language, and it can't be 10 minutes just to define a variable or something like that. Development has to be easy and quick. But...

* Not drag-and-drop, no-code user interface, pre-defined behaviours, built in physics engines. I have written behaviors for things like collision physics etc already, and built-in engines doing that same stuff would do more damage than good. They'd collide with the behaviors I already have, and make the porting slower by preventing me from doing straight transfers of the solutions I already have. I'd have to solve problems again, rather than just move solutions. Still...

* Some pre-defined stuff would be great, especially for rendering graphics. Like, rotating, stretching, changing the content of sprites etc. I don't know what's common practice, to have some kind of sprite system or to draw everything with some copy pixels like method to the screen each frame? In either case it would be great if rotating etc would be as easy as possible. Also, drawing simple vector graphics with bézier curves.

* Other than that, I would prefer some pre-defined stuff for strictly technical tasks such as getting keyboard input, setting screen resolution, reading/writing to external files etc. That kind of stuff is not what I'm interested in, and the less time I spend making the screen resolution reset code work on different computers or whatever, the better.

* Good debugging. In director I can pause and look at the actual value of every specific variable, track variables in a window so I can see them change in real time, etc. When I've been working in Adobe Flash I haven't found that stuff, and have had to rely only of the trace function for all that, which has been frustrating. I need better than a trace function.

* Performance! I need to make a lot of calculations each frame, and don't want any slowdown.

* A living community and continuous updates. I'm tired of being the last dinosaur alive working on a software that I'm never quite sure will run on the next version of windows. I want the environment and the community that works in it to be alive and healthy.

So basically, I'm not interested in building everything from the ground up just for the sake of it - I'm super happy with using other peoples' solutions for things like rotating sprites and getting keyboard input. But on the other hand, I don't want something klick&play-like where I just tick a checkbox saying "platformer movement", I need to fine tune more and I want to build more myself. Just a good, clean, easy, fast development environment where I build the game with code. Suggestions? Is unity my match?





   JLJac on January 26, 2014, 11:15:34 AM:

Paging my question ~

I haven't enabled playing as a lizard, not because it wouldn't be easily done but because it would be kind of dull - you'd just steer in four directions, no jumping or exciting platforming. I might explore the possibility in the future though Smiley

I'm starting to think more seriously about what development environment I should move to, and whether unity is a good idea or not.
So, ever helpful and supportive community, would you mind throwing your advice this way? I know that we did have some discussion about this earlier, but this time around I'll actually spell out what I need from the tool I'm moving to:

* Fairly quick to learn, fairly quick to write in. I need to spend as little time as possible learning the new language, and it can't be 10 minutes just to define a variable or something like that. Development has to be easy and quick. But...

* Not drag-and-drop, no-code user interface, pre-defined behaviours, built in physics engines. I have written behaviors for things like collision physics etc already, and built-in engines doing that same stuff would do more damage than good. They'd collide with the behaviors I already have, and make the porting slower by preventing me from doing straight transfers of the solutions I already have. I'd have to solve problems again, rather than just move solutions. Still...

* Some pre-defined stuff would be great, especially for rendering graphics. Like, rotating, stretching, changing the content of sprites etc. I don't know what's common practice, to have some kind of sprite system or to draw everything with some copy pixels like method to the screen each frame? In either case it would be great if rotating etc would be as easy as possible. Also, drawing simple vector graphics with bézier curves.

* Other than that, I would prefer some pre-defined stuff for strictly technical tasks such as getting keyboard input, setting screen resolution, reading/writing to external files etc. That kind of stuff is not what I'm interested in, and the less time I spend making the screen resolution reset code work on different computers or whatever, the better.

* Good debugging. In director I can pause and look at the actual value of every specific variable, track variables in a window so I can see them change in real time, etc. When I've been working in Adobe Flash I haven't found that stuff, and have had to rely only of the trace function for all that, which has been frustrating. I need better than a trace function.

* Performance! I need to make a lot of calculations each frame, and don't want any slowdown.

* A living community and continuous updates. I'm tired of being the last dinosaur alive working on a software that I'm never quite sure will run on the next version of windows. I want the environment and the community that works in it to be alive and healthy.

So basically, I'm not interested in building everything from the ground up just for the sake of it - I'm super happy with using other peoples' solutions for things like rotating sprites and getting keyboard input. But on the other hand, I don't want something klick&play-like where I just tick a checkbox saying "platformer movement", I need to fine tune more and I want to build more myself. Just a good, clean, easy, fast development environment where I build the game with code. Suggestions? Is unity my match?

@JubJub from the looks of it, basically all I'd use would be the 2d graphics stuff, yeah. My friend just suggested C#, SFML + Mono, MonoDevelop, instead, and I've been looking up C# and feel like I kind of like it. There are other technical stuff I worry about though, such as memory leaks etc. Maybe Unity would take care about that stuff for me? As said, I'm not thrilled to spend time creating intricate technical solutions for problems that have been solved a thousand times before just for the sake of it, I'd rather work on the game.

@Christian, that's exactly how it works. Players compete either in lethal combat or in competitive play (catching the most flies and staying alive) and the lizards hunt them as a "neutral" threat. If you hit the other player with a rock so that s/he is eaten by a lizard, you get a kill.

@Bandreus, that sounds cool! How does debugging work with that? Are there libraries for doing stuff such as rotating sprites etc? I'm not interested in re-inventing the wheel here. I do have some experience with ActionScript and Javascript, and I think they are pretty much exactly the same as Lingo, so those transitions hasn't been hard.





   JLJac on January 27, 2014, 12:26:40 PM:

Thanks all!
I think I'm leaning C#, I like what I've seen of it. But I can use C# with Unity as well, right? Couldn't I write my game in unity/C#, and basically use almost none of the unity built-in stuff, but instead use unity's debugging, etc? For those things I want, I could use the stuff JIMBERT listed, and the stuff I want to do myself I can do myself. And get the multi platform stuff as well...?

I won't move to XNA, because I don't want to move from one dead language to another.

Noogai03, why do you hate sfml? Is it unable to do stuff, or is it just personal preference?

In the end, I think what I will do is to download 2 or 3 of them, give them a day or two each, and try them out. Mocking up pong or something. But it'd be nice to narrow down the alternatives so these trials can eat away as little as possible from actual development time.



One of the things I've always wanted to have in Rain World is dynamic shadows. Seeing your shadow play over the objects in the background would do soooo much for immersion, because suddenly these things would not just be a flat background image, they'd be part of the same world as you. I'm having ideas about how to implement this, and would like to hear what you guys think about the ideas in relation to the choice of development tool.

Doing it for real
Currently a Rain World level consists of 30 layers of graphics, of which the first 5 are baked together into a foreground image (in front of game sprites) and the remaining 25 are baked together into a background (behind game sprites).

What if I didn't paste all these together, but kept them as 30 separate sprites in the game? And had them all cast shadows on each other, in real time. Then it would be as simple as implementing the sprite layer as one of them, between #5 and #6.

Maybe shadow calculation could be done as it currently is in the level editor, with a "light image" which is used as a mask for each layer to decide where it uses the sun/shade palettes, and to which each layer adds its silhouette in black so as to cast a shadow on layers behind. But each frame, rather than in a minute long rendering process.

Built-in dynamic light stuff
Or maybe there is some kind of built in shader for this kind of stuff in for example unity, that runs much faster? In that case, would it work with my resolution, no anti-aliasing, exactly the colors I want etc?

Depth map light
This one is really theoretical. I save a depth map for all pixels that are sunlit as I render the level. Say that the light source is top-left. Now say that we want to know if pixel (432, 122) is sunlit. The depth of (432, 122) is 7. Now we step seven pixels to the left and seven pixels left, and see if this specific pixel is occupied by a sprite (because we have drawn all the sprites to a bitmap each frame, I guess) and if it is, we color pixel (432, 122) according to the shade palette rather than the sun palette. Stuff that is further back in the depth map is shadowed by things that are further to the left/up, making the shadows play over the objects as supposed to without having to bother about the static elements that are the same each frame.

Could maybe be made less processor intense (but more RAM-demanding) if you had one mask for each depth layer, and just applied the sprite silhouettes to those with different offsets. There would be 25 masks... Idk, this one probably wouldn't work.

Other ideas?





   JLJac on January 27, 2014, 02:36:07 PM:

Thanks so much! I'm absorbing all this like a sponge. Or the things I understand - I don't have much experience with this stuff and I'm not a native english speaker, so sometimes I run into trouble trying to decode your helpful advice. This for example:

barebones unity sounds cool, I just hope you can do 2d with that without having to do it in an awkward 3d editor.

What exactly is an "editor"? Dragging and dropping sprites/polygons/objects to the stage? Why would I do that, when I can just place everything with code? Or are you talking about code editors? Why would those be different for 2d/3d? Once again, excuse my ignorance.





   JLJac on January 27, 2014, 02:56:16 PM:

This is waaaaaaaay too much pre-defined stuff. That stuff would get in the way and become a huge problem for me. But you say it's possible to just turn it off and use only the things I like? Having sprites in different layers for example would be kind of neat.

The camera stuff as well - I don't want that. If I need that I'll do that myself. I worry that it'll chip away at performance simply by *actually being a 3D camera* though I don't use any of that functionality.

Edit: like, it runs slower because it could do a bunch of things I don't actually do. Like, the fact that it has the potential to zoom slows the rendering down compared to if that function didn't even exist, which would be preferable if I never use it.





   jamesprimate on January 30, 2014, 01:37:19 PM (Last Edit: January 30, 2014, 02:02:03 PM):

Julie from Cliqist wrote this really nice little mood article (poetry? first person narrative?) on Rain World. I dunno, maybe I'm just a weirdo art type, but I thought the style of it was very thoughtful and cool: http://cliqist.com/2014/01/28/existentialism-in-rain-world/





   jamesprimate on February 03, 2014, 03:56:10 PM:

hey do you guys remember when a bunch of us hung out on twitch and it was a lot of fun? Well we're going to try to do that again tomorrow (Feb 4th)!

Join Joar, myself, and our host Michael (Pandara) for a new video launch and chat party on http://twitch.tv/rainworld at 10am PST / 1pm EST / 7pm CET

Links and stuff are in the new update:
https://www.kickstarter.com/projects/rain-world/project-rain-world/posts/737473

Gentleman





   jamesprimate on February 03, 2014, 09:05:41 PM:

you guys are da best!





   jamesprimate on February 04, 2014, 09:41:34 AM:

in 20 minutes! you can catch us at http://www.twitch.tv/rainworld  Hand Metal Right





   jamesprimate on February 04, 2014, 06:05:59 PM:

Do all lizards use their tongues? I'd hate it if that were the case.

nope! only a certain breed





   jamesprimate on February 07, 2014, 03:52:55 PM:

Been lurking for a while, but the recent trailer got me thinking. The first lizard in the trailer, I just can't tell if its one of the color variants for the pink lizards to match the foliage, or just a green lizard. Is there any chance the lizard appearance could change slightly for those of us with color blindness issues? Like crests on yellow lizards so they don't look so much like blue ones, or even a button in options to put a letter over their head representing that color.

this is a very good point and thank you for bringing that issue up! we will keep it in mind.

Hey I'd just like to mention how awesome this project is, not an original person but found out about it on kick starter and spent the last 12-14 hours reading the de log from the start. Pretty interesting I must say. Though I would have loved to have been a part of some of those discussions. So offering my support in anything you need, this project/hobby/ masterpiece is awesome and I can't contain myself Smiley. A question though in your kick starter you said that for one hundred twenty dollars you got your own creature, will that be in the final version of the game or just in those players games. Also if you could make more of that option I'd gladly fund it.  Smiley and yeah end of rant. Big Laff

"RainWorldISAwesome" awwwwwww, thank you! Beer! responded in email, i liked your idea so maybe we can figure something out!

Less than 1.8K $ to hit 200% funding.

YES WE CAN  Hand Money Left

YES! Getting close to growing Linux Beards! http://linuxbeard.com/





   jamesprimate on February 08, 2014, 05:31:27 PM:

no stress! we have a big update coming, with new video and info on what everybody is really here for: PUPS!!!!!









 Hand Money Left Cheesy Hand Money Right





   jamesprimate on February 09, 2014, 02:05:43 PM:

woooo! thank you gentlemen, for all your support and kind words!

Backer Animmikean sent us this cuuuuute $50k fan art to celebrate (wow those DA people are FAST, she sent this literally the MINUTE it hit $50k):



more news and updates very sooon!





   jamesprimate on February 10, 2014, 04:30:35 PM:

3 DAYS! Then we finally stop spamming everybody! Seriously though, the support has been fantastic and you guys have all been amazing. Thanks for putting up with this ruckus.

We're doing another live-stream tonight as a sort of kickstarter wrap-up party to hang out with backers, media and friends, and you all are most welcome to join us. We'll be on http://twitch.tv/rainworld tonight, Feb 10th, at 8pm PST / 11pm EST / 5am CET

Hand Joystick





   jamesprimate on February 12, 2014, 08:19:59 PM:

THE COUNTDOWN BEGINS!

This is it, only 24 hrs remain in the Rain World kickstarter! Help us give a big final send-off and spread the word: rt/share/blog, anything you'd like. Do it... for the slugcats!



~~~> https://www.kickstarter.com/projects/rain-world/project-rain-world





   jamesprimate on February 13, 2014, 05:52:26 PM:

james "the other guy" primate  Who, Me?

for real though, i can't wait to get some more legit updates in here rather than my PR blathering. but hey, it's a dirty job and somebody has got to do it XD





   JLJac on February 14, 2014, 06:35:17 AM:

Hahahaha XD That applies to all of us on the internet though... So thanks for all the good work James, who ever you are!

And in life. We never truly know each other - everyone we ever meet is a "whoever you are".

This has been philosophy corner. Back to Rain World stuff.

Thank you all for your support! This has really been a ride, and we are super happy and excited with the outcome. As you might have noticed, I've been mostly absent from here during the kickstarter days, which is because I figured that the kickstarter updates would be more fun if their content was a surprise. Now I plan to get back to transparency and back-and-forth communication again, so you can all look forward to following me in real time as I wrestle tedious little technical issues etc.

My plan for what to do next is basically play corner with different dev tools. Do a tutorial, mock up some sprites moving and some collisions, functions, objects etc just to see how it works, then try another one. This obviously shouldn't take weeks and months, as we want to get started on Rain World ASAP, but I think it might be a good idea to try two or three different setups before making such a long-term decision.

First up is Unity, I think. You are all more than welcome to drop suggestions for dev environments that you recommend! I'll also go back to the last time we had this discussion and look through what people said back then.

Cheers!  Toast Left Grin





   JLJac on February 14, 2014, 06:54:19 AM:

If any of you know about a Unity 2D game tutorial with c#, throw it at me! The ones I find are very drag-n-droppy, with boxes that get behaviors attached to them etc. I'm looking for something that's more stripped of the unity stuff, where the game is written more in plain code - I want to have unity for the publishing options and debugging etc, the less user friendly drag-and-drop stuff I have to deal with the better.





   JLJac on February 14, 2014, 07:14:37 AM:

When I look at the tutorials, I see a million things that makes me worry that they are unnecessarily performance heavy. Like, what I want to do is draw my characters from 20 different 1-bit 2D sprites, that are all moved from the same object instance in the code. In Unity they make sprites by creating a 3D box, giving it a "material" and then applying a graphic and a bunch of behaviors to it. They set an "ambient light" to 255, 255, 255 so that the sprites will have their natural colors, but I can't help feeling that that "light" function is still multiplying its color to every pixel every frame, even though it's invisible, and that makes me uncomfortable.

I want to use a much cleaner environment, not a 3D klick&play. But I'd still be up for using the debugging and structuring of assets etc that Unity seems to have. Problem is that I kind of need a real tutorial to get started, I can't figure everything out by myself. And the tutorials really seem to lean to the "user friendly" side.

I'll check out Futile, thanks! Using FixedUpdate and make one big game loop is obviously the way I want to go, if I understand this correctly - is there any turorial for that? Like, I don't want to drag any objects to the screen, I want to write a big game function that branches down into everything ~





   JLJac on February 14, 2014, 11:48:33 AM:

So basically you get that stuff for free, because it's in the gpu and the gpu is made to run like, Crysis? Fair enough Smiley And this is the case even if I have hundreds of hundreds of sprites?

The bottleneck with CPU (in lower end systems, mostly, but very relevant to mobile) is in the number of drawcalls. That's why you need a manager. Once the geometry is sent, you are right that it's very efficient.
What is a drawcall and a manager?





   JLJac on February 15, 2014, 09:51:20 AM:

Thank you all for your super useful advice!

So, a few hours of unity tutorial later, I feel like unity isn't my thing. If I made a game from scratch, perhaps, but now I'm porting and restructuring a current game, and everything that makes unity user friendly seems like it will get in my way big time. For example, the built in physics engine (basically a checkbox "yes I want physics on this object") will most definitely collide with my game. Also I don't want to drag scripts to objects etc, I want to build a proper inheritance tree with classes (this is what I've been missing in Lingo, and I'd like to try it because I think it'll save me the hassle of writing the same thing over and over).

My question is this: Is it possible to strip unity of every bit of pre-defined animation handling etc, and only use it for:
* Rendering sprites
* Handling input
* Audio
* Debugging
Basically I want to create all game behaviors myself, and only use pre-defined stuff for the stuff that isn't Rain World specific, such as interacting with the OS etc.

@Gimym JIMBERT
I see your point, and I won't make that mistake. Right now though, it's a question of what platform I should choose, and if I make the wrong choice I won't be able to go back, which means that I have to look some distance down the road despite it being premature. If I pick the wrong platform and it turns out the optimization I want to do can't be done when it's time to do it - trouble.

Last optimization question for unity: From how I understand it Unity has a lot of cool optimization and handles some functionality on the GPU, which is from what you guys have said basically free extra performance?

That's one hand - Unity does cool technical optimization stuff automatically that I wouldn't be able to do myself.

The other hand - Unity does a lot of things I won't use. Light, physics, cameras that can rotate and zoom, etc etc etc. I feel like I've just scratched the surface. All of those things take time, right? Even if I don't use them, I'm afraid they'll eat away milliseconds unnecessarily. My game is mostly just 1-bit graphics being stretched and re-colored, and it might be a bad bargain to also have all of them be lit and zoomed etc every frame, without it even being visible. Also some of this stuff might really get in the way, eg can I even rotate a sprite without it being anti-aliased?

Which of those two hands weight the heaviest? Does the fact that Unity does cool optimized GPU stuff make up for the fact that it also does a lot of cool optimized GPU stuff that won't even be visible? Or will the net be slower than if I just stripped away everything and wrote my own, clumsier, solutions?

Or even simpler put: Which is slower? 10000 super professionally optimized functions of which I only use 4, or 4 super clumsily written functions but nothing else?





   JLJac on February 15, 2014, 10:44:09 AM:

I'll take your two cents! GPU power it is, why miss out on free performance?

I'm still hesitant to unity though, because I don't want their pre-defined definitions of what's an object, what's an animation, etc. I want to create my object instances myself, and move my sprites around myself with code. I've been told that this can be done, but I need a tutorial to get started. Can anyone direct me to something as weird as a unity tutorial that doesnt use unity tools, just pure code?





   JLJac on February 18, 2014, 01:09:43 AM:

Thanks again guys Grin Futile + Unity seems really good so far!

Wooooooooooow. The performance of this thing. I just had it draw 15 000 bouncing little balls with randomized alpha and color. Fifteen Thousand. Framerate doesn't even seem bothered by it Crazy If I try 20k some parameters seem to touch bottom and it won't start, but the limiting factor surely isn't performance.

Compare that to macromedia director, where I might maybe be able to have 150 semi transparent sprites moving around before things got slow. That's a hundredfold increase. I figure this is the renowned Power of the GPU.

Now on to stress testing the processor! I'm gonna mock up some Rain World like physics (trigonometry heavy) and see how that works out. Fun times!





   JLJac on February 18, 2014, 03:45:00 AM:

Yeah, and thanks for the help! I'm super excited to have gotten started!

Ok, so now I see that the CPU is definitely the bottle neck here. 15 000 sprites moving around was no problem, but when I started doing some square root based distance checks between them I suddenly couldn't have much more than 200. If I did some optimizing (avoiding sqrt unless necessary) I could get up to 1000 or so, except in special scenarios (all the balls packed together so that they do a lot of distance checks between each other) when the framerate would drop.

This shouldn't be a problem though, as the standard Rain World scenario doesn't have 200 objects all checking distances against each other. It's nice to know that as long as I don't bring too much CPU heavy stuff like physics etc into the equation I can have basically unlimited moving sprites on the screen. Makes me think quite a lot about different exciting possibilities...

Then again I've only tried this with extremely light-weight graphics. There could very well be an exponential increase in performance demand as I use bigger graphics with more color depth - so I should definitely try that before I celebrate too much.

Currently I'm contemplating whether to continue to play with this current setup and try to create more game-like mechanics to feel what that feels like, or if it's time to move on to MonoGame. Much of the stuff I need to try/learn is C# and not Futile or MonoGame specific, and as I'm having fun with this I figure I could just hang around for a bit and learn more about inheritance etc.





   JLJac on February 18, 2014, 08:36:03 AM:

Oh, so unity already has a thing for distances between vectors!? And also for normalizing! And a bunch of other stuff! So cool Smiley

The Unity built in Distance function wasn't much faster than my home made pythagoras theorem function though, in the end I guess they do the same thing. Concerning optimization, I don't think space partitioning would really be a good bargain in Rain World - mostly there are relatively few collidable objects at a time (10-50 rather than 100-500), and keeping track of which zone they're in might even be more of a hassle to them than just checking against each other.

Each RW creature consists of several parts. In the old engine I optimize by doing a rough check where I use something I call a "distanceWithin" function, essentially pythagoras theorem but by having a defined compare radius (I'm not interested in what the distance is specifically, just if it's smaller or greater than this radius) I can avoid doing the square root. So I check from one of the body parts in one creature to one of the body parts in the other creature, and only if that distance is smaller than say 8 tiles I actually check all the body parts against each other. This worked OK, so I could do something similar here. But, as Gimym JIMBERT says, I probably shouldn't get stuck in premature optimization. It's better to make the game run, and look into optimization when you actually need it.

dot products, cross products
? ? ?
Keep talking!





   JLJac on February 18, 2014, 09:26:42 AM:

Thanks! I like it too, so far!

Hm... On the subject of draw calls. I noticed that unity has a little thingie in the top left where you can see the number of draw calls. I decided to check that out, and made it so that my moving sprites got their textures from two different atlases, assigned randomly.

Instead of 2 draw calls, I got some random number in between 1 and the number of sprites I use, which made me think that it goes through them one by one and every time one of them uses a different texture from the last one, it unloads the old texture and loads the new texture, creating an new draw call. Surprisingly this didn't seem to affect performance at all, but my sprites are pretty light weight.

Is my theory correct? In that case, is there some way to manage the draw calls, so that you put all the sprites using one specific atlas in an uninterrupted queue before moving to the next one, getting only one draw call per atlas? Do I need to care, it seems to run just fine?

Another question that's more relevant to my game making stuff rather than optimization - how do you sort sprites? I'll give you a super simple example just so you know what I'm after:

Say that you have bouncing balls, and each ball have a shadow (2 separate sprites). You don't care about the internal order of the ball sprites or the shadow sprites, but you want every ball to be above every shadow. When you create a new ball its shadow should be in the "shadow layer" behind all the other balls.

Unity has some kind of layer functionality, right? Can I tap into that from Futile? Can I nest layers within each other?





   JLJac on February 18, 2014, 11:58:52 PM:

@Juan, ah I see... Uh, I was kind of happy to move to Unity because there was so much documentation, and here I am again hehe. But most of the problems I encounter likely won't be Futile-specific, so I think it's not a major problem Smiley

@dancing_dead, thanks! Checking it out! When it comes to the draw order, I understand that what gets drawn later ends up on top of what gets drawn early - problem is that I've found no way to control this in Futile - they just seem to do the classic where they go by the order the instances of the sprite object was created. This does give me the possibility to do a hack where I start up like, 1000 sprites right at the start and have them idle outside the screen, then I'd be able to manage them through some kind of function from which objects could request "the highest possible sprite" or "the sprite that's closest to 870" or things like that. But that seems like a really slow and limited way to do it. I'll do more Futile research!

@Bandreus, thanks! This is weird... I think that what I see might just be Unity's dev tools being confused by Futile. If I use only one atlas, I get only 1 draw call, and a framerate of 60fps with 15 000 sprites. If I use two atlases, I get a couple of thousand draw calls, and the framerate drops to 20fps. I don't really see what logic is behind that relationship... It's not like 60/4037 is 20.

Oh, keep in mind texture swap (switching to another atlas) is not the only thing triggering a new draw call. The draw state is going to be change (and the whole pipeline will need to be re-initialized) whenever you alter alpha-blending, rotation and similar parameters as well.
I do alpha blending, rotation, color tweaking etc in my stress test, and still only get 1 draw call if I use only 1 atlas, so I don't know... Once again, could just be Unity being confused.

Yet again, just keep it reasonable at the beginning (don't put graphics for each entity in its own atlas!) and only focus on optimizing when it's actually needed.
Word!





   JLJac on February 19, 2014, 12:50:07 AM:

Thanks! So yeah, it's as we suspected then. I'll just try to keep everything in the same atlas, and there shouldn't be a problem Smiley

Also, I found out how to do "layers" in Futile, they're called "containers" and seem really great! From how I understand it they resemble movieClips in flash, in that they're basically a sprite that has other sprites drawn inside it, and if you move or rotate the container every sprite in the container moves and rotates with it. Hopefully you can do other fun stuff too, such as color tweaking an entire container or the like. I assume that you can nest containers as well - if that's the case I have a truly awesome tool for keeping everything sorted and tidy and in the right z-order, without even having to use sortZ Grin





   JLJac on February 19, 2014, 01:26:56 AM:

Cool! Actually the game only has a megabyte or two worth of graphics, because it's almost only low-res 1-bit stuff, and the majority of the animation is done by code rather than by having huge sprite sheets. The largest animation image data wise is probably the player legs' running animation which would fit in, like, a 150*40 pixels sprite sheet. Where all the content is is in the levels, and they are loaded from external files. I think texture packer is accessible from code, so ideally I could use that and end up with one atlas for the level, and one for everything else. So no problem there :D

A problem that might be more pressing - in Rain World, I use two things that I haven't been able to find in Futile - Bézier curves and "quads" as they're called in Director. A "quad" is a sprite that's transformed to fit in a shape defined by 4 arbitrary positions, one for each corner. The "quad" I think there's hope for, with Unity being 3D at its core and all, but Bézier looks worse from what I've been able to research. I'm super terrible at reddit though, so what do I know :S

In the end I guess it can't be impossible to get Bézier curves into Futile, or use some type of extra plugin. Worst case scenario someone could perhaps be hired to do it (Actually having money is such a surreal feeling).





   JLJac on February 19, 2014, 02:54:44 AM:

Other, less Futile-specific question: Does anyone know of a good tutorial for making games in c#?

I'm able to fiddle around and make things do stuff by myself. But I worry that I will drift into weird self-taught unconventional territory with my solutions, which could be bad for optimizing and would be bad if I want to have someone else work with the code later. Remember that I have no formal programming education, everything I've learnt is basically trial and error, and I don't know much about the traditions and customs of professional programmers.

So if someone knows of an article or something that just outlines the standard go-abouts for making a game loop, using inheritance, having objects interact etc in a C# game, that would be gold! I imagine that this is a pretty separate issue from the decision of what I'll be using for drawing sprites etc.





   JLJac on February 20, 2014, 12:47:02 AM:


This is amazing! So much useful stuff! Interestingly it seems I have already been using some of these methods, but without knowing the name for them. So maybe I don't need to worry too much about my intuition taking me bad places. But much of the stuff he's talking about is obviously more refined than my own home-brewn solutions, and I feel like I'm really learning a lot reading this. I'll make a list of the things I find particularly interesting and see if I can find implementations for them in C# specifically, some of the stuff I've encountered here I suspect might be C++ specific. Do you know of any more resources such as this? It's a good read Smiley

Remember you already implemented Rain World, though in another engine. So it's just a matter of porting stuff over and having it to work in a new environment, rather than 100% rebuilding it from the ground up.

That's assuming rebuilding the game from scratch is not what you're looking forward to.
No, I'm not going to re-create the game from scratch, and it will probably be a lot faster the second time around because instead of going through this process:
  Decide on what I want to create
  Figure out a solution on how to implement that
  Implement the solution
  Iterate, iterate, iterate, iterate
I'll be cutting that down to just
  Figure out how this will work in C# (mostly the same)
  Implement

However I will do some restructuring, because the old engine didn't use inheritance and thus had a lot of redundant code. That's mostly because I didn't have overview of what I wanted in the game, I just added things one by one, giving each its own solutions to basically the same problems. In hindsight I understand, for example, that the players' forepaws shares a lot of behavior with the lizards' legs, and because I know that both of those entities will be in the game already, I can plan around that.





   jamesprimate on February 21, 2014, 05:20:39 AM:

Found a nice post-KS interview with James
http://thebitpulse.com/2014/02/project-rain-world-qa-james-primate-on-the-weight-of-expectation/

@Joar/James - Will you be doing a postmortem on the campaign?
Thanks for the link, it was a great read!
A postmortem would be awesome!

Thanks! Reading through it, Im actually surprised how lucid it was considering I wrote it up at 5am after being awake for like 2 days haha.

Hadn't considered a postmortem. I'm usually pretty skeptical of them because success/failure all depends on sooooo many factors, trying to point to this or that reason you think caused something just seems like a guessing game to me. Then you'll have other people planning kickstarters reading it and using those arbitrary opinions in their own kickstarters because "it worked for Rain World". That's bad because even if the self-analysis were accurate, there is no reason the same things would work under different circumstances, or that other things wouldn't work better. We're all just leaves in the wind.

But that said, if anyone has any specific questions I'd be more than happy to offer some opinions based on my (admittedly limited) experience Toast Left





   jamesprimate on February 21, 2014, 09:07:48 AM:

Ok, I'll do my best!

Since Juan is actively engaged in a Kickstarter right now (good luck!), I'll focus on his first:

One thing that I can't deny is that Rain World benefited a hugely from media exposure. And while this may have been exaggerated to a degree by the relative lack of other games on kickstarter at the time (AND as stated, the fact that many were already familiar with the game), a great deal of it was cultivated through simple hard work of media outreach.

For the launch and major updates we sent out about 350 (short, courteous, content-focused) emails to every game-related site/magazine/journalist/blogger we could find, then kept in contact with them throughout the campaign. Further, we made sure that everything we sent out was "worthy of coverage", with new videos showing off major aspects of gameplay, screenshots, gifs, and in-depth discussion about content and things like that; AKA 'things that people would actually be interested in', rather than something like "hey we're 50% to our goal" or "we've added these stretch goals", etc.

I don't have anything to compare it to, but as of right now our video numbers are:
45,000-ish on the kickstarter page and... actually about the same on youtube too, 45,000. For the youtube numbers, a HUGE factor in that was being posted on major sites like RPS, Kotaku, Joystiq and The Verge. I remember being pretty stressed after a big update went out and for two days the youtube plays for it was at like <200. Then RPS posted and in a matter of hours it was at 4,000.

I don't know how much of this will be helpful, but please feel free to ask away, I'm be happy to help!





   JLJac on February 23, 2014, 01:15:09 PM:

Hi everyone!
Has anyone else had this problem:
If I need to put to Unity's debug logger every frame, it runs smoothly for about a second or two, then it freezes for 0.5-1 second, then it runs a second or two again, etc.
I'm supposed to be able to put a value to the console once per frame, right? It makes it really hard to do stuff, because putting to the console is the only way I know of to keep track of a value.

Is it just my computer that's slow? Weird that the frame rate isn't consistently low then...?





   JLJac on February 23, 2014, 01:42:03 PM:

Yeah? That's not right?
However I found out that just putting the number on the screen with a Futile "label" (text thingie) doesn't cause the same problem, so now I've got something that works Smiley





   JLJac on February 24, 2014, 06:07:34 AM:

Ok, changed it to fixedUpdate! What's the difference, even?

Other, more important question - how do I delete an instance?

And remove it from the list it's in, of course. The best solution would obviously be to have some kind of destroyMe function to call, where the object would find itself in the update list and remove it self. Problem is, we're currently looping through the update list, so there's a risk it'll skip an item.





   JLJac on February 24, 2014, 06:25:46 AM:

Thanks a bunch Smiley
I prefer to have objects own instances of sprites rather than inherit sprite behavior (that way one object can have many sprites), so I have some sprites to delete as well for each object. But I guess that can be done simply enough by running a custom destroy function in the object, where the sprites are killed and a destroy bool is set to true, and then run your solution. Thank you thank you!

Is this true for every instance ever? I never have to actually kill an object, because if I just kill the reference to it it will be taken care of?





   JLJac on February 24, 2014, 06:48:42 AM:

Wonderful! Seems too good to be true!
The sprites actually stay on screen - inactive - if I remove the object. The way it works in futile, from how I understand it, is that you create an "atlas" which is a big texture, and then all the sprites can draw their little part of that texture, minimizing draw calls.

My guess here is that the futile framework keeps track of its sprites itself, and that's why they still hang around on the screen. I'll just have to find some kind of keyword for Futile sprite removal, but Futile's entire documentation is this one reddit page haha XD And I'm the worst at reddit, I don't even know how to make a localized search happen. Good times!





   JLJac on February 24, 2014, 09:11:45 AM (Last Edit: February 24, 2014, 09:32:35 AM):

Hm, wow... Is that an issue to the degree where it might be worth it to in some cases (thinking particle system) save instances of objects in some kind of vacancy list and bring them in later, rather than deleting/respawning them?

Gentlemen, here's a programming question for you:

If I have to sort an unknown amount of some object by some property, how is that done?
Say that I have a projectile travelling through the air. I've made a line from the object's last position to its current position, and checked that line towards the objects in my game. It shows that the line intersects objects A, B and C.

What I want to do now, is to sort the objects by their distance to the projectile's last position. The object that's closest to where the projectile was last frame was hit first, and it's to this position I want to move the projectile, and it's this object I want to be affected by it.

In lingo, I'd do it like this:

Code:
distanceList = []

distanceList.add( [distance(projectile.lastPos, A.pos), object reference to A] )
distanceList.add( [distance(projectile.lastPos, B.pos), object reference to B] )
distanceList.add( [distance(projectile.lastPos, C.pos), object reference to C] )

distanceList.sort()

myHitObject = distanceList[1][2]
hitObjectDist = distanceList[1][1]

Basically a 2D array, and when asked to sort it would sort by the first position in the sub-array.

In C# though, I have to define what data type the slots in an array is, and making a 2D array seems much more bothersome. Does anyone have any good tips on how to do this? I'd be super happy for some kind of general solution, where you can sort anything by anything. Like, "which player out of these 4 have the most points" etc.

Thank you Grin

Edit: Oh yeah, maybe I should be clearer - I know there is an "orderBy" keyword, which I will definitely look in to, but in this case I want to keep the property I'm sorting by. When doing orderBy it seems the property you order by dissapears after the sorting is done, and also it seems you have to calculate it again, you can't throw in a value you already have. This means that in the above case, if I use OrderBy, I'll have to calculate distance no less than three times - first when repeating through the objects and checking if I want to add the object to the list, then again when sorting, and then a third time when I actually retrieve the closest object and start doing stuff to it. In my Lingo solution, I could calculate it just once, throw it in the list, sort the list by it, and then grab it again after sorting.

Edit edit: I could create a custom class, that has only an object reference and a value to sort by, and fill the list with those. But that seems garbage collection heavy, right?





   jamesprimate on February 25, 2014, 01:53:10 AM:


ah thats awesome!!! i wish they would have used a higher res video though, geez that was like 480p youtube nonsense at best Tongue





   JLJac on February 25, 2014, 10:21:08 PM:

@Rabbit, I'm glad someone except me is also getting something out of this!

@dancing dead, that's the method I ended up using! My problem was that I didn't understand that I could declare a variable without assigning it an instance ("closestObject"), but then I learnt about "null" :D And now I see that in your example, you don't assign the variable at all! Wow, I'm learning soooo much!

@Juan, thank you! Alright, fixedUpdate it is. Note though that I use a "buffer" or "time stacker" or whatever you'd call it in order to make my frames happen at consistent intervals (similar to the last method described here http://gameprogrammingpatterns.com/game-loop.html) so the difference might not be that significant - it's not like the game runs faster if there are fewer objects on the screen. But I will check out what it's like if I split the updates into one game object update cycle and one that's only for graphics - I like to move the sprites towards an extraploation of the object's position in order to get a super smooth look on computers that can handle that.

Random questions of the day:

You guys mentioned that I could make Unity display stuff without anti aliasing, "pixel" style. If I have an image imported into Unity I think I know where to change this, but Futile runs its own thing with atlases, and I wonder if anyone knows how to change that setting in there?

Casting, guys. Right now I have a variable called "objectType" for the like for all objects, and whenever I want to grab an object out of a list and do some type-specific stuff to it, I just switch case on objectType and then I cast that mofo as whatever class I know it to be. This basically circumvents the limitation that you have to specify the class of things as you pass them around. I've started to learn though, that the annoying limitations are there for my own good (for example I've finally actually understood why globals are bad). So my question is - what's the catch? Why shouldn't I just cast everything according to an "objectType" variable?

Global functions can't be any harm if they don't access anything outside the parameters they're fed, right? If I want to make a custom function for something very general like converting degrees to a normalized vector or something, that's not a problem, right?

If I want to set the position of an object, I can do either this:
pos.x = 400f;
pos.y = 200f;
Or this:
pos = new Vector2(400f, 200f);
How come that for the latter one, I have to wastefully create a new instance? What happens to the old instance of "Vector2", it's left for garbage collection, right? Is there any alternative that keeps the line count down while at the same time doesn't waste memory and time by creating a new instance and replacing an old one?





   JLJac on February 26, 2014, 06:23:39 AM:

@dancing dead, that's actually exactly how I do it! The problem has been when I want to do something like collision. I use inheritance in my little "learning c#" thingie, and I have some objects inherit from a "physicalObject" cast. (I'm very interested in this "interfaces" thing you mention though, will check that out!) When two objects collide, both of them gets a collision function called, where the object they collide with is passed as a PhysicalObject. Problem was, if they for example was a bullet I wanted to do bullet-specific stuff with them on collision, and that's where my casting mess came into play. Now I'm dying to implement "is" and "as" instead though! At this pace, my brain won't fit in my scull tomorrow evening!

@Juan, cool! I'll try to find the atlas from inside the code... Maybe there is some kind of unity command to return the current assets in the project or somthing like that, and I can use that to find it. GetType won't really do anything I can't use the "is" keyword for right now, except it might work better for switch cases? Important question, what's the data type of the return on the GetType function? Is it a string called "PlayerClass" or is it some kind of separate data type that's made to hold the ID's of classes?

@Sebioff, that seems really cool - thanks a bunch! For now I think globals will be enough, but when I want to make things even leaner I'll remember the extension methods :D

@8-Bit Ape, thank you very much!





   JLJac on February 26, 2014, 06:44:24 AM:

Hehe Juan I just need to be clear about this, don't feel obliged to help me every time I ask for it, you'll end up doing nothing else Tongue I'm suuuuper thankful though :D

If I wanna do a switch case on class type for an instance, do you recommend converting it to string first? Or maybe to... enum?

On the tutorial, I did that one, and those specific settings aren't in there. Isn't there any text file with just all the functions of futile stuff anywhere? Like, if you can write "Futile.atlasManager.LoadAtlas" what else can you put after "Futile.atlasManager. ..."? If I just had a list of those commands I could experiment and try to figure things out, but now I feel like I'm a bit too much in the dark Sad

Edit: Like, here https://github.com/robert-wallis/GameJamKit/blob/master/Assets/UI/UISetup.cs it suddenly shows that you can call something called "GetFontWithName" on AtlasManager... So there are obviously more things you can do with it. There has to be a full list of all those commands somewhere, right?





   JLJac on February 26, 2014, 07:38:58 AM:

Actually it does! And there are some functions there - and it didn't help me very much Sad Nothing like "atlasAsTexture" or anything like what I had been hoping for ... I guess I'll have to try reddit.





   JLJac on February 26, 2014, 07:49:24 AM:

The thing I want to set seems to be "filterMode" - the Unity documentation puts it like this:

renderer.material.mainTexture.filterMode = FilterMode.Trilinear;

This doesn't work for Futile though, because the Futile game object doesn't have a renderer, it says. But it has to have one, right? Or a material? I'll keep experimenting...





   JLJac on February 26, 2014, 08:12:58 AM:

Thank you!!!

The problem is that I don't have any by-unity-recognized textures to apply filterMode on. I did search in the Futile atlasmanager file, and in LoadAtlas (which is what I'm using) he clearly defines a 2d texture:

Quote
   public FAtlas LoadAtlas(string atlasPath)
   {
      if(DoesContainAtlas(atlasPath)) return GetAtlasWithName(atlasPath); //we already have it, don't load it again
      
      string filePath = atlasPath+Futile.resourceSuffix+"_png";
      
      TextAsset imageBytes = Resources.Load (filePath, typeof(TextAsset)) as TextAsset;
      
      if(imageBytes != null) //do we have png bytes?
      {
         Texture2D texture = new Texture2D(0,0,TextureFormat.ARGB32,false);

         texture.LoadImage(imageBytes.bytes);
         
         Resources.UnloadAsset(imageBytes);

         //texture.filterMode = FilterMode.Point;
         
         return LoadAtlasFromTexture(atlasPath,atlasPath+Futile.resourceSuffix, texture);
      }
      else //load it as a normal Unity image asset
      {
         return ActuallyLoadAtlasOrImage(atlasPath, atlasPath+Futile.resourceSuffix, atlasPath+Futile.resourceSuffix);
      }
   }

That "  //texture.filterMode = FilterMode.Point;" is my attempt to change the filter mode, but it did nothing Sad

I tried moving it around, still, nothing. The problem is that I don't understand the code here, so I don't know what I'm doing. I suspect that this texture is just some throw away variable used for loading, and the one used when the actual application runs is somewhere else. Searching the Futile script files for the word "texture" hasn't done much good though...

Gah, programming is hard! I'll check if there is some kind of Unity command that just returns a list of the currently loaded textures, that would be a decent hack if I can't find where the texture is actually created.





   JLJac on February 26, 2014, 08:29:41 AM:

Hehe this is super embarrassing, but I actually found the solution:

After reading this:
http://www.reddit.com/r/futile/comments/y2q5p/futile_tips/
I tried navigating to the atlas .png file in the Unity editor, select it and change the filter mode there. It worked.
 -_______________________-

I was so focused on finding a way to do it with code that I didn't try the simplest possible way - just doing it through Unity's interface.

Thank you all for having patience with me.





   JLJac on March 01, 2014, 09:50:37 AM:

dancing dead, I'll try your approach and let you know if it worked!

Juan, thanks! Sorry!

Weird C# problems that I can't understand:

I wanted to do a thing where one thing was affected by another thing more the closer it was to it. I tried to solve it like this:

Code:
float frc = (150f - Vector2.Distance(obj1pos, obj2pos))/150f;
frc = Mathf.Clamp(frc, 0f, 1f);

Easy enough, no? frc decreases linearly with distance, at distance > 150 frc is zero. But no! For some reason this returned small values slightly above zero, never a clean zero. Even if the distance is greater than 150 (which would mean that the value I try to Clamp becomes negative, and therefor should be set to 0.0, in my opinion). I even tried removing the Clamp and doing an old school if statement, with the same weird output. If I tell it to log just the first line in my example, I get a reasonable number such as -72.423. But after trying to restrict it, it's never a clean zero. What's going on here!?

Other problem: I wanted to generate a color at random, but I only wanted fully saturated colors and never white or black. My solution was to have one of the rgb values be full, one empty, and one a random from 0.0 to 1.0. My attempt at a solution was something like this:

Code:
colorsL = new List<float>();
colorsL.Add(0f);
colorsL.Add(1f);
colorsL.Add(Random.value);

playerColor = new Color(0f, 0f, 0f);

int getPos = Random.Range(0,2);
playerColor.r = colorsL[getPos];
colorsL.removeAt(getPos);

getPos = Random.Range(0,1);
playerColor.g = colorsL[getPos];
colorsL.removeAt(getPos);

playerColor.b = colorsL[0];

So basically I create a list which holds three values, Zero, One and Random. Then I pick one of these at random, assign it to the red parameter, delete it. Pick one of the remaining two, assign it to the green parameter, delete it. The one that's left goes into the blue parameter.

For some reason this would never give the entire spectrum of colors, blue was always full if I remember correctly. I changed it for a switch case on a random number, and wrote 6 cases manually, but that seems like a super hacky solution. What was I doing wrong?

Edit: Bonus question! In the original tutorial I did, all the parameters in classes where declared as public. I continued doing this by default. Is this practice good/bad? I noticed that you can simply not write "public" and it will still run just fine. From my understanding "public" makes the variable changeable from outside the class, and it seems more self-contained and object oriented to keep that to a minimum, perhaps?





   JLJac on March 01, 2014, 10:18:57 AM:

Hehe sorry, clumsy of me! Now it works just fine Smiley
When looking at the code, does the solution look conventional or like the alien makings of a self-taught weirdo? I worry about this a bit, because I don't want to drift into weird territory if I'm to bring another programmer on later on...





   JLJac on March 01, 2014, 02:02:09 PM:

Thank you very much for the help and the reassurance :D

Embarrassingly I'm unable to repeat the bug... Sorry Sad Probably it was just a screw up on my side...

Here's a more interesting issue:

Futile has something called "containers", basically the same as movieClips in flash - they're sprites that can have other sprites in them, and they can be nested in each other. I'll be using those for layering my graphics, and also I might use the nesting because that would make it possible to do cool stuff like fade out the entire HUD with just one line of code.

When adding sprites, I need to reference what container to add it to. So I use a "global" array that's a property of the main game instance in order to keep track of them. An object can say, for example, "add this sprite to container 3". It looks like this in my code:
Code:
tpGame.SpriteLayers[2].AddChild(spr); 

Here's the fun part: Ideally, I don't want a linear array of layers, but a tree-like array, reflecting the nested containers.
Code:
                      |Game Graphics -----  ForeGround        |Explosions
Main Container -------                     |                  |
                      |HUD  ---| HUD1      | Game Layer ------ Players
                               | HUD2      |
                                           | Background --- Bkg Image
                                                           |Bkg Sprites

It seems like a solution like this would make more sense than having a document by the side where you have a note that says "item 6 in the list is the Background sprites layer" - that's not very elegant.

In the best scenario possible, I'd want to be able to write something like:
Code:
tpGame.SpriteLayers.GameGraphics.Background.BkgSprites.AddChild(spr);
And I know that this can be accomplished by defining a class for each and every intersection in the tree, but if elegance is what I'm after, that doesn't seem like the way to go XD

Is there any way to create a tree-like structure like this? Note that all the branches can be different lengths.





   JLJac on March 02, 2014, 01:34:22 AM (Last Edit: March 02, 2014, 01:53:01 AM):

Thanks guys! Wow, dictionaries and hashtables seem awesome, though I still haven't been able to figure out the exact difference between them...

Juan, your solution seems pretty amazing! It would enable me to name, remember and access every sprite, right? I'm not sure I understand it 100% hehe ... I just worry about the memory it would take to store names for hundreds of sprites D:

So, for my problem, maybe the simplest and most "elegant" solution would be to add all my containers to an old school array, and then use a dictionary to store their indexes? That way I could access something like this:
Code:
tpGame.SpriteLayers[sprLrsIndxDict["Background"]].AddChild(someSprite);

The question that comes to mind in that case is why not to use an enum? Then the auto complete would help me remember what I named all my layers.
Code:
tpGame.SpriteLayers[(int)SpriteLayerIndexer.Background].AddChild(someSprite);

Or, even better, maybe you could create an enum where the data type is a futile container?
Code:
FContainer  bkg = new FContainer ();
FContainer  fg = new FContainer ();
enum SpriteLayers : FContainer {Background = bkg, Foreground = fg};
SpriteLayers.Background.AddChild(someSprite);

That would be totally awesome, because it would be a neat way to clump together related data, and name it according to its function and have the autocomplete help me remember the names!

Then I could use that for a loooot of things! For example, if I want to store the some parameters for the playable level area, I could go like:

Code:
enum LevelParams : float {LeftPadding = 10f, RightPadding = 10f, RoundCornernsRad = 5f};
And then just access that easy as pie, without having to create a cumbersome class that would only be created in one single instance either way. I'm gonna try this out right now! The only thing that could make me happier would be the same thing but able to store mixed data types, and I think I read something like that in the Dictionary documentation page... To the hackmobile!


Edit: It turns out the enum structure is very particular about what data types it takes Sad Only int, byte, long and a few others are valid. Perhaps a dictionary is the best way to create a list where you access stuff by a name rather than by an index number, then? 





   JLJac on March 02, 2014, 02:11:59 AM:

Hahaha yeah the hackmobile didn't even leave the garage this time XD

In Lingo, there was something called a property list. It was basically a little class that was declared on the fly. A declaration could be like this:

Code:
LevelParams = [#CornerRadius : 120, #BottomPadding : 40, #LevelName : "Magma Mayhem", #TerrainData : gigantic2Darray]

Then I could just grab anything out of that thing, like this:
Code:
levelTitle.text = LevelParams.LevelName

This was cool because it enabled me to group my data together by context. I didn't need to create a new property in the player class for every little parameter that was related to movement, I could just create a
Code:
MoveParams = [#Runspeed : 4.2, #JumpHeight : 2.1, #DefaultMode : "Running"]
and everything became a lot less cluttered.

Also, talking about tree-like structures, these things could be nested indefinitely. So I could group things, and then access them like
Code:
jmp = MoveParams.JumpParams.DoubleJump.Strength
I don't expect to be able to do this in C#, but if I was able to just group and label the data at all, even if everything in the same container needs to be the same data type, that would be awesome.

Dictionaries feel wrong, because they feel like they're used for searching gigantic databases rather than just grouping three variables together because they're related. I could create classes for all of those things, but it feels super cumbersome to have a million classes where the majority is just a container that holds two or three properties.

Is there some way to accomplish something like this, or is my approach just wrong from a purist programming point of view?





   JLJac on March 02, 2014, 02:32:05 AM:

This seems like the thing for me! Is it similar to this? Why is it hacky?  Who, Me?

I feel a bit confused, to be honest. You can create two classes inside of one class? Where does the code actually go? In the same text file, but where? What is a "namespace"? What is a "dedicated field"?





   JLJac on March 04, 2014, 01:26:32 PM:

I ended up using the dictionary approach. Just want to once again confirm how incredibly thankful I am to have you guys help me :D

The sprite stuff now looks like this - I create an array of sprite containers, and I also have a dictionary where I've named each of the positions in that array. In order to not have to fetch both of those variables from the main game class each time, I've created a little function that looks as such:
Code:
public FContainer returnFContainer(string index){
   return SpriteLayers[ spriteLayerIndex[index]];
}
Where SpriteLayers is the list of FContainers and spriteLayerIndex is the dictionary. Then I can, from the objects, super easily add a sprite to whatever layer I want like this:
Code:
tpGame.returnFContainer("BkgLayer").AddChild(spr);
It works like a charm Smiley Best thing is that if I want to add a layer in the middle of the stack, I just have to change the dictionary in one place, rather than index numbers in all the objects. As long as the strings are the same, they'll find their layers!

I should probably start a workshop thread... But now I feel like I'm ready to start working on real rain world stuff soon, this learning phase should be more or less over.

I'm doing a tiny little learning project, not because I want to waste time not working on rain world, but because I felt that it was better for me to start rain world porting with some tools in the box and some basic knowledge, so I wouldn't immediately clutter rain world with a bunch of stuff I'd implement just to learn this new environment. Now the test project is done, and the last thing I want to implement is a menu, so there's somewhere to press "restart" and I can share it with you guys for fun Smiley

This also brings me to another thing I'd like to learn - someone mentioned creating a little mini class inside a bigger class.

My main menu will have four items. All of these have a lot in common, they each hold an FLabel (futile's text sprites), they should all be selectable, they should all change color when selected, etc. A lot of behavior in common, simply.

This calls for a "MenuItem" class. But the "MenuItem" class should only be instanciated and manipulated from inside the "Menu" class. Also it's a very small class which only holds a few variables and hardly executes any code, so it feels weird to roll out the red carpet and give it an entire text file of its own. Ideally, I'd wanna create some kind of mini class that's only available from inside the "Menu" class.

After searching for "c# nested classes" I think this might be the thing, but I just wanted to check with you guys if this practice is considered halal, and if you have some tips or tricks to be considered?





   JLJac on March 05, 2014, 01:04:47 AM:

Thank you sir  Gentleman

Mini class works super well  Smiley Hand Thumbs Up Right

Stupid question #4224:

Now both the players and the menu need to take input, so I want to create a FetchInput function where you pass a player number and get the current state of axes + button for that player's input.

Now, the problem is that I want to return both a Vector2 for axes, and a bool for the fire button. Do I have to create a separate text file with an InputData class only to be able to return these two variables in one go? That feels super cumbersome. Also I know that I could bake them together into a Vector3, but that's a hacky solution that I'm not learning anything from - I want to be able to solve this problem no matter what the data types happen to be.

Is there some equivalent of
Code:
public Vector2, bool fetchInput(int playerNum){
return new Vector2(0f, 0f), false;
}
that I could use? One of my searches suggests returning a KeyValuePair, but that seems like a hack IMO...  Huh?





   JLJac on March 06, 2014, 02:13:40 AM (Last Edit: March 06, 2014, 09:44:16 AM):

I used out paramaters - they're awesome! I'm learning so much these days my brain almost can't take it  Droop Why oh why didn't I start with C# earlier?

Here's the test project I've made this last week!

The game has quite a bit of Rain World-like stuff going on in it when it comes to the physics, because I wanted to try that out. What it lacks is levels, loading and saving files, sound, and much more, so I still have stuff to learn  Shocked But those things I can probably solve as I go - the reason why I made Space Worms was that I needed something simpler to just see if I could get stuff to move on the screen before diving into the depths or RW code. Also I didn't want to have a lot of junk in there from when I didn't know very basic stuff, and I did dodge a few of those bullets - for example I wrote myVector[0] instead of myVector.x for a while, and similar stupid things. Not to say that I'm not still doing stupid things that I'll pull my hair over in a few months, but at least a few of them are out of the way.

I think I'm ready to start the porting, actually!  Hand Thumbs Up Left Epileptic Hand Thumbs Up Right

I still worry about a few things.



MonoDevelop is slow on my computer, and comes up with stupid autosuggestions once in a while. The Unity console is s**t - it's not in any way a stranger to just skip logging stuff whenever it feels like it. That could probably be circumvented by creating a custom logger that logs to a text file, maybe?

In director I could "watch" an instance and see all of its properties change in real time as the game played. Whenever the game froze because of an error, it would go to where the error occurred in the code, and show what every variable was at the time. If I had for example an array of object instances, I could expand each of them and see what its properties where at. I had a console in which I could write snippets of code and execute them, if the game was running or not. This new environment is clearly inferior when it comes to those debugging assets.

Vector graphics and bezier curves, I can do without them but it would be cool to have them. At least simple shapes like square/circle.

I haven't tried sound.

I haven't tried importing graphics (this might be a problem because Futile only takes its weird texture thingies)

I don't know if I can retrieve the color of a pixel into my code with perfect accuracy. (I save level data in the level image file encoded as colors)

Futile doesn't perfectly respect the pixels. An edge that is 2 pixels wide might end up 1 pixel wide in the game (look at the lives bar in the HUD of space worms). This isn't a super big problem for Rain World which isn't very pixel art-centric, you won't see if a perfectly white silhouette is one pixel off. But it's still very annoying, and might become a real problem with for example the level graphics.

If a graphic is shrunk substantially, it will invent edge smoothing colors despite the texture being set to "point". You can see this on the very small rocks in Space Worms. This can be avoided in all Rain World scenarios I can think of, but is still a very annoying flaw.

The game becomes HUUUGE! The code and the graphics of space worms are together less than 200 kb, still the published game occupies 147MB before compression and 15MB after compression. Whaaaat?



Maybe I should try to make Space Worms work in Monogame as well - just to see if some of the above problems are absent there? Maybe someone can cue me in on that right away?

Thanks again for helping me!





   JLJac on March 06, 2014, 01:00:21 PM:

Thank you Juan and Jonbro for sorting out some of my concerns. Perhaps I'm a little too harsh at this point considering that I've far from explored all the options.

did you, by any chance, have massive white, empty spaces in the tilesets/spritesheets/whatever?
This could very well be it. I've located the weight to a file called "resources.assets", which points towards this explanation. Why does it bake everything together in an "assets" file that's much bigger than the original image file when it could obviously load a normal png just fine before publishing? Also, there is a way to load image files on the fly right, that's going to be super crucial for Rain World level loading.

You can take a look at Hotline Miami to see how that looks, their sprites rotate and maintain the same "pixelishness" at any rotation.
Hahaha this is literally the worst in my opinion  Tongue

Vector graphics/Bezier curves is a tricky challenge, you might need to roll your own custom vector renderer thing with a limited vector graphics subset or something (I hope you don't need, like, full Illustrator graphics specs support?), but with dedication and time, programming can yield the most wondrous results. Sorry, all I have on offer here is a motivational speech, which might be somewhat demotivating Sad
This can be done? Maybe with a shader?

What is a shader, btw? Is it all in the GPU? Can I write one myself?





   JLJac on March 06, 2014, 01:35:42 PM:

Hehe I "can" also climb mount everest, but the question is, can I?





   JLJac on March 12, 2014, 01:26:50 PM:

Thanks so much again guys  Beer!

Update 218
Let's get back to some devlogging haha!

Made two maps for how Rain World c# is looking in my head at the moment. I made them both to clarify my own thoughts, and so that you guys could give me an opinion on it Smiley

First up are the classes:



Those are the most basic classes I know I'll need. Later a lot of new ones will definitely pop up, such as "level loader" etc etc, but this is just what's needed to run a basic game session.

What do you guys think? Am I using inheritance the right way?

Then, what I call the "instance tree" or "update tree":



This is the structure through which the "update" command is forwarded each frame. The general idea is this - objects own each other, and objects further down the hierarchy are dependent on their "masters". Masters are autonomous.

So for example, a lizard has four limbs. It creates them on startup and saves them in an array. The "Room" (which is the class that does most of the game engine stuff) is not aware of these limbs, it just has a reference to the lizard. Every frame, the Main Loop tells the Room to update, the Room tells the Lizard to update, and the Lizard tells each of its Limbs to update. The Room doesn't need to bother about the Limbs.

One thing that might need a special mention is the BodyChunk class. This is basically a physics object, the one that will do collision checking etc. Note that contrary to how many games would do it, the creatures are not physical objects, they have them. This is because of the exact thing that gives Rain World its animation style - that each creature has many segments which makes them soft and bendable.

This means that the creature classes (lizard, player, etc) are just coordinators of other instances, and "communication hubs" those instances can use to talk to each other. For example, a lizard will own an instance of LizardAI, and when LizardAI wants to know where the body of that lizard is, it'll go by the Lizard instance. From inside LizardAI I imagine it might look something like this:
Code:
Vector2 myPosition = parent.bodyChunks[2].pos;
where parent is a reference to the Lizard instance, bodyChunks is an array of the BodyChunk instances that Lizard has, and pos is the position of a specific BodyChunk.

Similarly I imagine the Room will be a communication hub where difference creatures and objects can find each other. Say that a LizardAI wants to loop through all the items in a room to see if one of them is a spear. Then it could look something like this:
Code:
Spear spear = null;
for (i=0; i < parent.currentRoom.objects.Count; i++)
{
   if (parent.currentRoom.objects[i] is Spear){
      spear = (parent.currentRoom.objects[i] as Spear);
      break;
   }
}
Where parent is the Lizard that owns the LizardAI we're currently in, currentRoom is a reference to the Room that Lizard is currently in, and object is an array in the Room used to keep track of all the objects.

The idea here is that when two things some way out in the branches (LizardAI and Spear) want to communicate, they have to trace their way back to the last common branch (LizardAi -> Lizard -> Room). This is my interpretation of an un-messy way to do things without using globals, and I just wanted to check if you think it looks OK.

It just struck me that in the Classes map, creatures, items and effect sprites should probably all inherit from an "updateable object" class that the rooms could hold in arrays and dish out update commands to. Please consider that changed Wink

So, what do you guys think? Does it look reasonable? Any critique super welcome  Grin





   JLJac on March 13, 2014, 06:57:45 AM:

@eigenboom: Yeah, that's a good point - object oriented programming is a tool, not an orthodox religion. For the items it might very well be better to use an in-class solution rather than messing around with a bazillion text files and classes. The limbs have very different behaviors though, the only thing they have in common is basically a "position" parameter and a "owner" parameter, so there the inheritance seems like a good fit. A quick question on that note: The limbs will all have Owners, but some of them will have Owners that are slugcats, some lizards, etc. This makes it difficult for me to decide what to declare the Owner parameter as - if I declare it as a Creature I'll have to go "(owner as Lizard)" for every single line in the lizard arm, for example, which seems unnecessary as I know that a lizard arm will only be owned by a Lizard. Any ideas for this? Should I declare the Owner variable in the child classes rather than in BodyPart? That seems weird as all of them will have an Owner.

For the items, maybe a clean solution would be state classes? Has anyone played with those in c#? I get the general idea, but I have a hard time translating the examples to c# syntax. How do you make this thing work? Do you create an instance of each state class at startup, and have a currentState variable that points to the one that's currently active? In that case, what would you declare currentState as, as all the states have different classes? If anyone has some more on this design pattern in c# I'd be happy, as I plan to use it for the different "animations" for the creatures as well Smiley

@Juan: Thanks! Looked up interfaces, and made a (somewhat messy, but working) implementation in Space Worms. It's very useful!

Other question: In the old code, the game held a lot of lists of objects by type in order to be able to easily access them. So for example, I'd have a CreaturesL, a LizardsL, a PlayersL, a SlugcatsL, a PupsL, etc. A player, for example, would appear both in PlayersL and in SlugcatsL, where the latter would also have references to all the pups. This was very useful (sometimes I wanted to check something against players only, and would then repeat through PlayersL, sometimes I wanted to check something against pups and players, and would then use SlugcatsL) but I have a hunch it might be considered impure programming-wise. Is that hunch correct, or can I go ahead with my many not-mutually-exclusive lists?

Other other question: For the Game, Hunt, ShortcutHandler instances, should I use singletons? Those seem to be very taboo?





   JLJac on March 15, 2014, 03:04:14 AM:

Thanks!

The reason I used those lists wasn't mainly optimization, but to make the code cleaner. Instead of looping through all the objects and clutter the loop with conditions, I could just ask for whatever category of object I wanted.

But maybe with inheritance I could make the same thing work with only one single if statement? Say that I have Player and Pup classes, and they both inherit from the Slugcat class. Players and Pups are in a huge ObjectL list with all object of all different classes, only sharing an interface. I want to get Players and Pups, but nothing else. Could I use the IS keyword and check for Slugcat?

Code:
for (int i = 0; i < ObjectsL.Count; i++){
  if (ObjectsL[i] is Slugcat){
    //do stuff
  }
}

If that would work it's a solution that's clean enough Smiley

Update 219

I've been researching the state pattern a bit, as I think I will use this a lot in rain world. In the old code I use switch cases on strings, and I use it for everything. AI states, animations, etc etc. This time around I want to do it properly, using the state pattern, which I feel I really like but haven't quite pinned down yet.

I've mocked up a little powerup system in Space Worms using the state pattern, and it seems to work well Smiley

There are a few things I feel weird about though. For example I've declared the state classes inside the Player class, as I think of it as a sub-system of the Player. Is this the way most people roll, or do they have an external text file for that stuff? The Player class is becoming rather big.

An other thing is that in an example I found, the guy created one instance of each state on start up, and had a currentState variable pointing to which one was active. I have chosen to instead create a new instance of the state when I change it, as it feels weird to have a couple of inactive states hanging around.

My idea is this, tell me if it's wrong: If I change state very often, like, every frame, it might be nice to have one instance of each state hanging around and just point to the active one. Because creating and deleting the state instances every frame would generate garbage. On the other hand, if you change state very seldom (say, once in 30 seconds for space worms powerups) you might as well kill and spawn the state instances, for cleanliness' sake.

For Rain World I don't quite know which approach I'll be going with yet. For AI I think it would be really cool to have an instance for each state hang around and be inactive, because then the creature could pick up its behavior where it left off once it goes back to it! Say that a Lizard is doing something, like searching through some tiles, and then it is interrupted by some other behavior, like snapping after annoying flies. With the state pattern and consistent instances, I could go back to the search behavior, and the list of tiles searched would be intact - the lizard could just pick up where it left off, like it had a memory! Totally cool!

Could maybe combine that with pushdown automata...





   JLJac on March 17, 2014, 09:57:48 AM:

I'll check out this LINQ thing :D

@eigenbom, that makes sense, I'll use static instances then!

Update 220
Copied the Space Worms unity project, re-named a few files, delete quite a few. Gave it a new name: RainWorld. Set up a game class and a main loop. Here we go Grin

Then I talked to my friend, who gave me a few general programming tips, and boy am I happy I made Space Worms to filter out the absolute worst of the worst. I'v been doing so many things wrong! Now I have quite a few things to study, and I will really try to keep calm and not get ahead of myself with RW development. Slow and steady takes the day. Most likely I'm still not through my beginner phase (this morning I thought I knew everything there was to know about C#, but then I had that talk with my friend...) so it's pretty likely that none of the lines I write will still be around in a month or two. But it's a start!

 Hand Shake Left Smiley





   JLJac on March 20, 2014, 08:13:54 AM:

Update 221

Hi there! I won't share all of my code hehe, but here's a sample I've written of my Room class so far. If any of you guys feel like looking at it and be my ground control so I'm not floating away into crazyness right from the start, it would be greatly appreciated. Anything I'm doing a weird or peculiar way, let me know! Smiley

I'm especially interested in if I got the overloading right (GetTile functions). The code executes, but I'd just want to know if I'm using it correctly and as intended.

Also, having Tile as a mini class inside Room, good or bad?

Code:
using UnityEngine;
using System.Collections;
using RWCustom;

public class Room
{
//Setting up properties for width and height of the room, and functions to get height and width as tiles or pixels
private int Width;
private int Height;

public int TileWidth{ get { return Width; } }

public int TileHeight{ get { return Height; } }

public float PixelWidth{ get { return (float)Width * 20f; } }

public float PixelHeight{ get { return (float)Height * 20f; } }

//2D array that holds the tiles
private Tile[,] Tiles;
//DefaultTile is the template tile that occupies any position outside of the room (used when indexes are outside the Tiles array)
private Tile DefaultTile;

public Room ()
{
Height = 40;
Width = 52;

//Creating Tiles array and filling it with Tile instances
Tiles = new Tile[Width, Height];
for (int x = 0; x < Width; x++) {
for (int y = 0; y < Height; y++) {
Tiles [x, y] = new Tile (x, y, Tile.TerrainType.Air);
}
}
//Defining DefaultTile
DefaultTile = new Tile (-1, -1, Tile.TerrainType.Air);
}

public void Update ()
{
}

// Returns the tile which is occupied by position given as a 2D vector
public Tile GetTile(Vector2 pos)
{
return GetTile ((int)(pos.x / 20f), (int)(pos.y / 20f));
}

//Returns a tile from Tiles
public Tile GetTile (int x, int y)
{
if (x > -1 && y > -1 && x < Tiles.GetLength (0) && y < Tiles.GetLength (1)) {
return Tiles [x, y];
} else {
return DefaultTile;
}
}

public class Tile
{
//Defining enum for terrain types and creating property to hold it
public enum TerrainType
{
Air,
Solid
}
public TerrainType Terrain{ get; private set; }

//The location of this current tile in in Tiles array
public int X{ get; private set; }

public int Y{ get; private set; }

public Tile (int x, int y, TerrainType tType)
{
X = x;
Y = y;
Terrain = tType;
}
}



}


//Example command: Debug.Log (Rooms [0].GetTile (new Vector2 (234f, 101.6f)).Terrain);
//Output: Air
//It seems to work!


So much fun to have gotten started!





   JLJac on March 20, 2014, 09:06:51 AM:

Cool! So, what's the deal with properties? I've been told to use them, but I'm still not 100% on why they're so useful - I can use them to make the get public but the set private, which is cool I guess, but I never really had any problems with accidentally changing numbers from outside, so I don't think it's that crucial. And then I can also, in the future, add weird little behaviors whenever a certain property is accessed, (playing a sound when score is increased or something I guess) but I'm not entirely sure I see the usefulness in that either... Like, I don't want to play the pling EVERY time I change the score, for example it should be quiet if I just restart a game session. So then I might as well play the sound manually when I also add the score, right? 

Oh, and when I have you here, what's the deal with naming conventions? The c# documentation seems to be saying different things. At one point they say "no underscores, Pascal capitalization" another time they write in one of their examples something like

Code:
private int _score;
public Score{get{return _score;} set{_score = value;}}

And leave me super confused. They say that I should name properties with Capital Letters, but then I can't use the same name for a class and an instance, right
Code:
Public Room Room = new Room();
that doesn't work, does it? Then I should call it MyRoom or something, and that seems strange. Can I rely on the case sensitivity and do things like
Quote
Room room = new Room();
or is that considered unsafe?

Tell me how you name stuff Smiley





   JLJac on March 20, 2014, 10:50:58 AM:

Thanks guys! Ok, so I think I'm most comfortable with PascalCase for classes and methods, and camelCase for variables. That way an object can have a method Stun() and a variable int stun, for example.

If the only downside to Properties is performance, and they're preferred over fields for everything else, I'll go by the "No premature optimization" commandment and use properties until something starts to annoy me by being too slow. It's not like the game is going to be slower than the lingo version either way haha!





   jamesprimate on March 20, 2014, 08:23:32 PM:

you guys are so rad   Hand Thumbs Up Left Hand Thumbs Up Left Hand Thumbs Up Left





   JLJac on March 22, 2014, 01:38:16 AM:

The real reason I don't like to use getters/setters is code bloat and the fact those are one easy step into overengineering of classes/engine architecture.

I never seriously coded anything in C#, but the performance-impact should be similar to what it is in most OO languages. I.e. barely noticeable at all (again, unless in performance critical code, where squeezing out every additional millisecond could actually matter).

So don't overthink these sort of things too much, just roll with whatever you feel most comfortable with and get a feel for whatever you're using while you've your hands right into it  Hand Thumbs Up Left

Thanks! I will Smiley
Actually I have found something that seems pretty annoying with getters/setters, almost to the point where I'm considering not using them. It seems that for a compound variable or whatever you want to call it, such as a vector, you can't set the sub-varaibles individually. For example I can't do this:
Code:
bodyChunk.position.x = 5.5f;
because it will give me an error message. Instead I have to do this:
Code:
bodyChunk.position = new Vector2(5.5f, bodyChunk.position.y);
which is longer, harder to read, generally clunkier and totally rubs me the wrong way with my "it feels like I'm declaring new Vector2's everywhere, that can't be good"-complex.

One great real world use for properties, is to use them to (for instance) only up a speed variable if it is less than a maximum, otherwise set it to the maximum
This seems totally valid though! In theory I could use a Mathf.Clamp every time I set the value to achieve the same result, but if I want to change the max or min of that clamp, I'll be happy if I used a property :S

Update 222
Quite a lot has happened! A basic "creature" (two dots) is in the game. I have the very basics of how a rain world creature works up and running, and this time around I have a much more general and slick framework for it. Basically a creature (or physical object, at the very top of the inheritance tree) consists of a number of BodyChunks, and a number of BodyChunkConnections. The former is the standard unit that builds bodies and moves about with classic newtonian physics, colliding with walls and each other. The latter is the internal bonds that hold the BodyChunks of a specific creature together, so they don't drift apart.

Basic terrain collision is in, but I'm not sure how well it works at this point because I haven't yet set up tools to test it properly. It's able to keep an object that moves around with random forces applied within the level boundries, so that's something. At this point it's a straight port from the old rain world code, but I think I'll go over it an re-think parts of it that are a bit whacky. It's certainly a huge help to have a template to look at when coding though. I don't have to invent the wheel, merely make it roll.

What I'm most proud of though, is my camera system. In previous games, I've always had a fairly standard approach to how I do rendering. When an object is created, it asks some kind of sprite engine for a couple of sprites. Then it stores them in a list, and each frame move them around. When deleted, it returns them to the sprite engine or deletes them.

Not this time around! My starting point was this - objects shouldn't be responsible for being visible, they should just exist, and instead there should be a camera viewing them. Instead of having objects take care of their individual sprites, they should just take care of their behaviours, and the sprites should be handled by a self contained camera object. They shouldn't even know they're being watched.

Why do I want this? Because in the old game, the level you were viewing was the only one that existed. I tried to fake a bit of off-screen movement, but it wasn't the real deal. This time I want to make everything completely independent on whether it's being watched. The world should just exist, and the camera should be a ghost moving around watching it. The other big thing is that if I get Futile to work with unity's split screen, I could have two cameras viewing the same game world.

So this is the way I do this: Objects sign up to an IDrawable interface which contains an initiate method and a draw method. The Room has a DrawableObjects list, which contains all objects signed up to that interface. The Camera is assigned to watching a specific Room.

Inside the Camera, there's a sub-class (is that the term? A class defined within another class) called SpriteLeaser. My english wasn't really sufficient to come up with a good name for this thing, but basically it lends sprites to an object. It consists of only an array of sprites, a reference to an object and a "remove me" flag.

Say that the Camera changes rooms. Now it goes through all the drawables of the new room, and for each of them it creates a SpriteLeaser. The SpriteLeaser calls the object's initiate method, passes itself as a parameter, and says "Hi, I'm a SpriteLeaser at your service!" The object is like "Cool, I'm a Slugcat so I'm gonna need 12 sprites, this sprite should have this graphic, this sprite should have that graphic..." etc.

The next frame, the Camera will get its Update method called. Then it will go through all of its SpriteLeasers, and tell each of them to contact their respective objects through the Draw method, once again with themselves passed as a parameter. The object will rearrange the sprites according to its new position, and if it's slated for removal or in another room than the camera, it will also tell the SpriteLeaser to slate itself for removal.

The thing here is that the objects are passive. They don't take care of sprites, the just passively respond to the initiate and draw commands. If the camera moves to another room, the object won't even notice. It doesn't have to do anything, it just stops recieving the Draw commands, which are completely separate from all other code.

This was the best solution I could come up with for a self-contained camera and a world that goes about its behaviours with or without being watched. I know I'm probably re-inveting the wheel, but it was really fun doing it! Smiley





   JLJac on March 23, 2014, 12:03:37 AM:

The finite state machine for player animation is becoming humongous... And the player should have two of these, one for "body modes" as well. They're going to be like, a thousand lines each o.0 Should I separate it into a PlayerAnimation class?

It feels weird to have a separate class that's 100% dependent on another class, and that only exists as one instance per owner. There is no motivation at all to have it as a separate class except from trying to make the text files a bit shorter.

What would you guys do?





   JLJac on March 23, 2014, 12:40:52 PM (Last Edit: March 23, 2014, 12:59:13 PM):

That's totally true! I've been contemplating quite a lot on this stuff, and I really would like to have some kind of general system, because as you say, players and pups share a lot of behaviours.

Update 223
But, hehe, listen to this... So I created this really cool (IMO) finite state machine. It consists of a base class for PlayerAnimations, which has an initiate and an update method, and a lot of derived classes such as PlayerAnimationStandUp etc. It also had an enum with all the animations.
And an array PlayerAnimation[] animations. The array holds an instance of each animation derived class (as eigenbom suggested, they're all alive simultaneously) and the enum is used to map to the array positions, so it's possible to change the state using a name rather than a weird number.

Code:

//Array which holds an instance of each state class
public PlayerAnimation[] animations;

//Enum for all the animation states
public enum AnimationIndex
{
None,
CrawlTurn,
StandUp,
DownOnFours,
LedgeCrawl,
HangFromBeam,
GetUpOnBeam,
StandOnBeam,
ClimbOnBeam,
BeamTip,
Dead
}
public AnimationIndex animation{ get; private set; }

        //Changes the Animation
public void ChangeAnimation (AnimationIndex anIndx)
{
animation = anIndx;
animations [(int)anIndx].Initiate ();
        }

public void Update ()
{
animations [(int)animation].Update ();
}
Like this, see? When setting the animations I could use the AnimationIndex enum, and get the names through auto complete, by just mapping the enum to an integer and making sure that a given enum leads to the right animation instance in the array.

Super cool!

But.

Thing #1. No inheritance. I did think long and hard about how I could create inheritance so I could have a general FSM class to inherit from everywhere I needed this behaviour, but what would that class contain? Not the enum, that has to be declared specifically for each implementation. Not the array of states, same goes for that. Basically the only thing I could inherit would be some sort of base class for the states. Almost everything in this solution has to be written again each time I applied this solution.

And Thing #2. This whole elaborate solution does nothing that a switch case doesn't do. Except occupy more memory, being clunkier, and involving more properties. And being unable to access the privates of the owner object because it's its own class. The only thing it has on the switch case would be being able to run initiate methods for each state, but I don't have any functionality like that, and if I needed to I could just run a generic init method with its own switch statement in it.

Conclusion: The coolest and most elaborate solution might not be the best. Here I really tried for an elegant solution, and ended up creating the opposite. Instead, I've found the partial keyword, which allows me to split a class over several text files. So I'm going to go ahead and scrap that fancy FSM, and just create a big, fat switch statement insrtead Smiley





   JLJac on March 24, 2014, 08:51:10 AM:

Haha! Ok, so FSM is mostly useful when you have exponential stuff like transition states between all the other states and the like?

Update 224
Converting code! Moved a fat chunk of the player behaviour from the old game to the new one today. Still not entirely there, but it's looking more like it. Tomorrow I'll be able to run around and jump on platforms, I think!

Some of this code is so horrible to look at you wouldn't even believe it. Almost all of it is old enough to have moss and fungi growing all over it, for most chunks I have to think long and hard about what they're actually supposed to do. All of it is just one giant, multi-headed beast of nested if statements. Some pieces sit around doing nothing at all, seemingly, I leave a note at those.

Some code looks weird and useless, and but when I run without it there is some bug, and if I introduce it, the bug goes away. In one spot I've even left a comment "I don't remember how this code works, but it prevents this and that problem. So let it be!" Thankfully that's an exception though, otherwise I've been able to figure out what the code is doing after a little bit of tinkering.

In either case, I'm always thankful when I stumble upon some strange looking solution and implement it, and it immediately works. It's so long ago I don't really remember it, but I can imagine I spent several days in frustration trying to find those solutions, and now I'm really happy to get them for free!





   JLJac on March 26, 2014, 11:09:26 PM:

Update 225
Trudging along... Don't get me wrong, I'm having a wonderful time, but my ambition to divide the work into manageable chunks is down the drain. My idea was to first convert the player - but in order to work on the player's movement behaviors I need to be able to save and load a level, and in order for that to happen I need to understand how to handle XML and text files, etc etc etc.



The biggest convertion push for the player is done though, ie basic terrain interaction. Still have all the behaviors involving poles, and a few other special cases left.


Throwing a few questions out there:

Currently I'm researching on saving and loading a level from a text file, any general tips on that?

Right now my tiles (all the little things that populate the 2d array of a room) are classes. Should I go with structs instead?

If I fetch one property of a struct, and it has other, big, properties, does it pass its heavy value-based self through all the methods used to fetch it?
Example:
Code:
public struct MyStruct()
{
public bool verySmallProp;
public int[,,,,,,] SUPERBIGPROP;
}

if (object.anotherObject.thirdObject.fetchMyStruct().verySmallProp){//...}
Is the data of SUPERBIGPROP unnecessarily passed as well, slowing everything down? In that case, would a class be quicker? (Which is, to my understanding, reference based and thus not passed at all)
I'm asking because every object is asking the surrounding tiles about their status many many times per frame, so I want that to run as smoothly as possible.

A tile can have several things on it, such as poles vertically and horizontally, fly hives, etc etc etc. How would you guys store that information? A lot of bools, or a list with tags?





   JLJac on March 27, 2014, 12:52:48 AM:

Wow, that looks high tech  Shocked
I just solved it actually, using IFormatter and FileStream - I got the solution from the c# documentation. And yeah, the levels are totally small! With this solution you just have to mark the classes involved in the serialization as [Serializable] and then it just magically takes care of everything :D It packages the instances(in my case of the Tile class) somehow and stores them in the file, and then it unpacks them into living instances just as easily. And yeah, the file size is super small!

But I'm pretty sure it would be even smaller if I did it your way... Well, this wasn't what I was supposed to be doing anyway - I was supposed to tweak the wall gliding, and was fed up with having to rebuild a wall to glide against each time I changed something haha!





   JLJac on March 29, 2014, 02:58:21 PM:

Thanks everyone!

Collision is all home brewn code, like everything else in the game except sprite handling, where I use the excellent Futile framework. It's strictly tile based for terrain and radius/trigonometry based for creatures, simple as that.

Yeah, I know I need to watch out for backwards conmability... Ran into that issue a few times with the old level editor. This time around I don't think it'll be as big of a problem though, as the game will not evolve as much during the process since it's already designed.





   jamesprimate on April 09, 2014, 01:59:46 PM:

Somehow I feel a kind of brotherhood with Rain World now... (I'm making the other debut Adult Swim game at PAX, Oblitus).

I was super excited when they told me they were publishing Rain World--I've been following this devlog for quite a while before then :D

oh definitely a brotherhood!  I'm good friends with roger hicks, and you guys do so much stuff together that I almost feel like I know you by proxy haha. when Steve mentioned you and oblitus in PAX conversation I was totally stoked :D

and thank all you guys for the kind words! Joar will be doing a bigger write up once his jet-lag wears off





   JLJac on April 10, 2014, 06:54:33 AM:

Hi there!

Just wanted say that I've flown over to Boston, and we're going to be at PAX tomorrow! Also we have big news: we're going to be published by adult swim games! :D
We're going to appear in their booth during the convention, so feel free to come by and have a chat with us.

Preparing for this stuff has been the reason it's been quiet here for a while, we didn't want to announce anything before we knew for sure. But now everything is settled, I'm trying to get my sleep cycle aligned to the american daylight cycle, and James is telling me epic tales of PAXes past. This is going to be a lot of fun! See you tomorrow Smiley





   jamesprimate on April 10, 2014, 09:02:23 AM:

nope! just a hacked together widescreen version of the lingo build. AKA still pretty alpha and rough. BUT, still a lot of tun :D





   jamesprimate on April 10, 2014, 09:54:31 AM:

yes! thanks for reminding me actually





   jamesprimate on April 11, 2014, 03:45:12 PM:

James, I loved you in Grandmas Boy.






   jamesprimate on April 11, 2014, 04:31:56 PM:

How long were you guys streaming? I checked in at 3:30 and then it ended like 10 minutes later. Did see some of the gameplay, looking great as usual

Do you have plans to do more backer Twitch streams after PAX? 

thanks for the kind words guys!

to be honest i have no idea how long we were streaming. the whole thing was crazy rushed and we were dead tired, so it could have been 10 minutes or an hour we probably wouldnt have noticed the difference. "Man" from MANvsGAME (the interviewer) was super nice though! but those headphones were like medieval torture devices

I think we'd totally be into doing some more streams, but like... once we actually have cool stuff to show from the new build. give us a few months!





   jamesprimate on April 16, 2014, 07:42:35 AM:

Thanks for posting the vids Christian! There are a few more out there in internet land, but i think those were the best.

Joar is off to NYC to explore for the next few days, so I figure its good time for a POST PAX EAST FLUFF POST!

Quick PAX post-mort:

It was a fun, exhausting, chaotic experience, but a very very good one. Even though we were showing an early alpha build, the reception was fantastic and we really couldn't have hoped for better. There were people that would come back every day to play for a few hours(!), and once we set up the 4 player "party mode", there was a constant crowd and it was a lot of fun.

Not to say it went off without a hitch though. Since we were still showing the Lingo build, there were a LOT of "duct-tape solutions" and hacked together last minute fixes. The expected PCs didnt arrive, and so Thursday night was spent frantically re-coding bits and pieces to get the aspect ratio to fit the screens of the replacements. There were some very strange framerate slowdowns that seemed to be related to the number of USB controllers attached, but then when the USB hub was attached for 4 player it magically went away, so who knows!

The enthusiasm for the multiplayer really gave us some things to consider. Recently we had just been thinking of it as a freebie game mode to add on top of the "real game" narrative/campaign part (in hindsight, probably just because we were bored of it), but new players were all excited for a samurai gunn / super smash brothers-esque party game, so we have talked a lot about it and will definitely be exploring ways we can enhance that aspect as well, perhaps even having the story mode feed into it some how (i hesitate to call the campaign "single player mode" because we really want co-op as well) Anyway, you get the idea.


If you are interested in seeing some pics from Our Big PAX Adventure (if not, plz ignore the facebook slideshow nature of this post, we will return to regularly scheduled programming shortly)


Rain World on the big screen




the very first 4 player Rain World match ever! sooooo fun! a fan played 2 player the first day )the PC at the booth only had 2 USBs), then went home and brought back a multi USB hub so we could set up 4player for the rest of the weekend :O now thats dedication! (Thanks Carson!!!)


stickers for players who could survive longer than 40 seconds


twitch stream with MANvsGAME


with jonathan from destructoid


Joar hanging out with Luis from Jazzpunk




on the BIIIIIG screen. not going to lie, that was a little scary. 7 second match obviously hahaha





   JLJac on April 22, 2014, 10:55:04 PM:

Update 226
And so I'm finally back at it! Started working on the engine for short cuts. This is a core element of the game, the thing that enables a creature to crawl into a hole and then pop out of another hole, somewhere else on the level or on another level. Essentially it's going to be the same, except that this time around the game will not recognize a creature inside a short cut as being in any specific room. The creature will exist, but as floating in some kind of limbo between rooms, to be assigned a new room as the short cut spits it out.

This is meant to further de-emphasize the rooms as cardinal containers for events. If you can move between rooms as effortlessly, and with the same code, as you move within them, I hope that'll increase the impression of an interconnected world. Also, de-attaching a creature from any room while it's in a shortcut prohibits it from weird interactions with other objects while it's in shortcut mode.





   JLJac on April 23, 2014, 04:04:47 AM:

Quick question to you wizards out there: can I do parallax scrolling as a shader? That is, can I feed a shader some parameters (camera position) on every draw command? Can I use shaders to apply different palettes to the same sprite, do color cycling etc?

Or has I completely misunderstood what a shader does? Tongue

Oh, if someone had some kind of beginners guide to the stuff, that would be awesome too!





   JLJac on April 24, 2014, 01:14:38 AM:

Thanks guys! This looks really promising! Anyone have a good starting point when it comes to the actual code syntax?

Update 227
We have working short cuts! A creature can go into a hole in one place and pop out in another. When in the shortcut, the creature is completely detached from all rooms, which means that no camera is viewing it and its sprites will be discarded. I don't quite know yet if this is a good idea. It doesn't feel like the best possible optimization to delete all sprites of a creature and then recreate them just because that creature isn't visible for 2 seconds... But I'll handle that problem when it becomes a problem. Trying hard with the premature optimization avoidance here, it's so tempting to try to make everything perfect now that I have the chance to recode the entire thing!





   jamesprimate on April 24, 2014, 10:06:24 AM:

you the man Gimym!





   JLJac on April 25, 2014, 04:23:00 AM:

Thank you soooo much!  Grin

Update 228
I realize that as I'm converting the game to c#, the devlog might be less than exciting for long time readers, as most of the stuff will be old news so to speak. But I'll just go ahead and type down what's going on, regardless of the entertainment value Tongue This is a record of the development process rather than anything else, and perhaps the goal of it is to be helpful rather than entertaining. Also it's a good resource for James and I, to have our progress logged somewhere. This time though, I'll spice it up with being even more technical  Evil

Multiple rooms are in! It went surprisingly easily, as happens once in a looong while when programming. I had laid some ground work, but it was still smoother than expected. Rooms are instances of a room class, and on creation they're passed a name. They'll go look for a text file with the same name in a "Levels" folder, and get their data from there. I've written a little thing that can translate level architecture into text and back.

Then we have a tile property which is an "exit", which can be hooked up to a shortcut. The game has a world map, which is essentially an array of level names and what other levels they connect to. If a creature pops into a shortcut and encounters an "exit" tile, the world map is asked about to which other room this exit leads, and the shortcut continues transporting the creature in the new room. Then the little in-shortcut representation of the creature reaches the shortcut opening, and the actual physical creature is spawned.

As of now, all levels are loaded simultaneously. In the future, I want to create some kind of "lazy loading" system, which loads levels as you enter them, and unloads them a while after you've left them. That way non player creatures will be able to move about a bit on off-screen levels as well. We'll see exactly what this system will look like later on - either it could be a simple cap (max 5 levels loaded at a time, if more, unload the one that has been off-screen the longest) or something more complex (unload levels where creatures are dormant/dead earlier than levels where creatures are engaged in activities).

Lots of exciting stuff to do now! Almost can't decide what to start with!  Hand Thumbs Up Right Hand Thumbs Up Right Hand Thumbs Up Right





   JLJac on April 26, 2014, 09:32:18 PM:

I'm using Unity, but the game logic itself is just c#, so it's still not impossible to detach it from unity if we wanted to. As of now, it doesn't look like there would be any reason to though Smiley

Maybe the programming heavy stuff speaks to another (narrower) demographic - in either case our policy with this devlog has always been to just blurt out whatever is happening here, from graphic design on the logo to intricate technical issues, and that seems to have been working so far. As of now though, the game is largely designed already, and it's just a question of making it run in this new engine. So, for those of you who're interested in technical stuff, this is your time Smiley The rest will just have to bear with us for a moment. Soon I'll get into shaders, and then we'll have some posts of wizardry so profound that when we return to the ordinary coding stuff it'll look like a first grade reading assignment, if that's any comfort o.0





   JLJac on April 29, 2014, 06:55:51 AM:

Update 229
 Epileptic

HAHAHAHAHA shaaaaaaders!

After 3 hours I managed to output a flat color. Great success!

Poking around in this code feels like being an epileptic hippo trying to build a card house in a china shop. I download a little sample and insert it. It doesn't work. I try to adapt it. It doesn't work. Three hours later I manage to make it do anything that's not just an error message.

Then I try to change something - that's the way I prefer to learn. I switch a number for something else, try to bypass the code and output a plain color, something like that. This is where the china shop hippo comes in - everything I change always make the thing spit out error messages and fail.

Contrary to everything I know about code, you can make it crash without changing logic, but just by changing numbers. What'll happen if I go through this loop a couple more times? It'll crash! What will happen if I just add 4 to this value? It'll crash! In one of the few applicable examples of a 2d pixel shader I painstakingly found, there's a for-loop that executes three times.

Code:
    float remaining=1.0f;
    float coef=1.0;
    float fI=0;
    for (int j = 0; j < 3; j++) {
    fI++;
    coef*=0.32;
      texcol += tex2D(_MainTex, float2(i.uv.x, i.uv.y - fI * _BlurAmount)) * coef;
    texcol += tex2D(_MainTex, float2(i.uv.x - fI * _BlurAmount, i.uv.y)) * coef;
    texcol += tex2D(_MainTex, float2(i.uv.x + fI * _BlurAmount, i.uv.y)) * coef;
    texcol += tex2D(_MainTex, float2(i.uv.x, i.uv.y + fI * _BlurAmount)) * coef;
    //texcol += tex2D(_MainTex, float2(i.uv.x, i.uv.y)) * coef;

    remaining-=4*coef;
    }

It throws error messages and won't execute. If you change it to execute 2 times, it'll run. You see that line that's commented out? If you run that one istead of the one above it, the shader will run. Both those solutions are working! And both of them are super random!

I haven't felt this clueless in a long time. There doesn't really seem to be any complete documentation either haha.

I'll take a look at Gimym JIMBERT's tutorials next, maybe I just need to soak up an hour or two more of video before I'm ready!





   JLJac on April 30, 2014, 07:21:44 AM:

Thanks guys! Yeah, it's cg!

Hehe I don't know about the loop in the shader, it was there when I downloaded it.

It makes sense how numbers can crash it I guess, given how extremely slimmed for performance these programs are made to be... They execute like... millions of times per frame, it's gotta be o.0 Craaaazy!

Update 130
When I got a shader "working" (i.e. I was able to at least output pixel colors, and get pixel colors from texture coordinates) my next step was to import a Rain World level in order to start writing a prototype for my level background shader. In order to do that, I needed to tweak the level editor some. In order to do that, I needed to make the level editor's png-output work on my new computer. And this is Director we're talking here, so I have spent literally half of today diving in 10 year old internet forums searching for something that would put me at square one - where I believed I was when I woke up this morning.  Tired Found a solution though!

And, we have a historical milestone here - today for the first time ever, the unity build loaded a level saved by the director level editor!



Yes, it's super unpolished, yes it lacks slopes. Yes, the player's graphics is two space worms asteroids ... But still! This is the embryo of the actual game! It works! Levels can be saved, loaded, the player can move between them!

Tomorrow, I'll try to import a texture into Unity - stay tuned!





   jamesprimate on May 01, 2014, 03:43:05 AM:

And, we have a historical milestone here - today for the first time ever, the unity build loaded a level saved by the director level editor!



hey i know that level, its garbage worms! with space worms asteroid? space worms/rain world crossover confirmed.  Hand Any Key





   JLJac on May 01, 2014, 08:57:16 AM:

Hahaha OK I'll work faster!

Yep, that's the garbage worm level, it was at the top of the list  Wink

Update 131
Managed to import a texture and display it as a Futile sprite, so that's cool! It's not super cool yet, the texture is super small for some unknown reason, and obviously I haven't written any cool shader or anything yet, so it just sits there at the side of the level. But I've managed to work with the basic logistic of getting the thing into the game, so that's cool!

For all of you out there who are fumbling in the dark for advice on how to do stuff in Futile, here's my (probably temporary) solution:

Code:
//Roomtexture is just a string that's the name of the file we last loaded as a terrain graphic.
//If we have a graphic loaded, we unload it
if (roomTexture != "")
Futile.atlasManager.UnloadImage (roomTexture);

//The graphics are located in ..\Assets\Futile\Resources\Levels, and Futile starts looking for
//imports in Resources, so we start our path there. Futile doesn't want file extensions for some reason.
roomTexture = "Levels/" + newRoom.name;

//Load it, simple enough
Futile.atlasManager.LoadImage (roomTexture);

//Seems like futile creates an atlas element which is in fact the entire atlas, because
//you can assign a sprite the element like this and it displays the entire image
backgroundSprite.element = Futile.atlasManager.GetElementWithName(roomTexture);

Next up is trying to get this level graphic to display in a reasonable manner... And some shader stuff, perhaps. Wish me luck.





   JLJac on May 02, 2014, 04:56:27 AM:

Gasp, Unity limits texture sizes to 8000px. I have to do some serious re-thinking here. A thousand things going on in my head, including writing a custom compression format for 3D voxel textures...





   JLJac on May 02, 2014, 05:56:06 AM (Last Edit: May 02, 2014, 06:01:26 AM):

Hm, ok, so here's what I'm trying to do:

A standard room is about 1040*800 pixels big. I want to be able to have a level that't at least three times that size as well, or variable room size isn't really worth it.

If I'm having variable room size, I need to have a movable camera, obviously. If I'm having a movable camera, I want parallax scrolling.

Each room consists of 30 bitmap layers (with very few colors) that has previously, in the static camera build, been baked together as one image at level generation. My dream was to in this new version have all those 30 layers move about as parallax scrolling layers when the camera moved. It didn't seem so impossible - if crysis can be crysis I can have 30 pretty big 2D sprites move around, right?

Because I wanted the dynamic shadows as well, I wanted all layers to be in one texture. That way I'd be able to check in say layer 28 if it's being shaded by say layer 27 by simply asking different coordinates in the same texture for whether or not they're transparent.

So I went ahead and stacked all the layers on top of each other in a texture, and 800*30 = 24 000, so that's considerably bigger than the limit.

And now I think I have to figure out some other way to do this haha  Cheesy Maybe I'll have to drop the parallax scrolling after all, and go with some pre-baked solution - can can still save a depth map for the room graphic and use that to do the dynamic shadows, so all is not lost!

Edit: Oh, and yeah, I can save each layer as its own texture, but that would make each room a 32 file, 2 megabyte monster, so I'd prefer not to. My talk about a custom file format is because most pixels actually don't change from layer to layer, so if I wrote my own compression algorithm that worked on the z-coordinate I could probably get the filesize down some, but I'd still need to unpack it for unity, so it wouldn't really solve anything.





   JLJac on May 02, 2014, 06:20:44 AM:

Hm, not really, it's an either-or situation, because the graphics consist of the 30 layers, and if I'm unable to displace them in the game I need to do it in the level editor, and I can't have two conflicting displacements or every line in the z-dimension would look jagged :/

Maybe I can make it happen through some sort of bump mapping-like shader...





   JLJac on May 02, 2014, 06:34:50 AM:

It seems like a not very elegant solution, is all... Looking at this steep parallax mapping, it looks to me like it's a fragment shader which basically does a per-pixel raytrace both from the camera to the surface and then from the surface to the light source. Maybe something like that could be done here as well? If they have the time to step back and forth like that on each pixel, what I want to do shouldn't be impossible either, right?

http://graphics.cs.brown.edu/games/SteepParallax/index.html






   JLJac on May 02, 2014, 08:26:49 AM:

Well, it's not really a question of large sprites moving about as much as one unified terrain that's just going to be slightly displaced according to the perspective of the camera - so if we wanted it to be done properly parallax scrolling would be the solution, but I think it could very well be solved using some kind of depth map and a shader as well. I.e it's more about objects being viewed from slightly different angles rather than being moved around.

But maybe the dynamic shadows will be enough to give a sense of depth to the scenes, maybe scrolling environments aren't necessary. I'll have to go over this in my head a few times before I settle on a decision.





   JLJac on May 02, 2014, 09:19:50 AM:

You should draw the 30 layers one by one in a screen sized render target. Each layer can have multiple textures, just render them as quads (this way your levels can be as big as you want). Then draw the layers again with a custom "depth color" instead of rgb in a low-bit-per-pixel screen sized render target. Now you can do some depth effects with the information from the "depth texture" and the "color texture".

If you run short of memory maybe you can use one texture for multiple textures by using each color channel for one texture.
This sounds super nice! And I don't quite understand what you mean - how does rendering as quads solve the problem with the texture being too big?

Dancing dead - Yeah I totally know how you traditionally do parallax scrolling, and that was my original plan! But when I ran into this hurdle I started thinking about the ray tracing shaders such as parallax mapping as another way to solve it, without actually storing all that data, but rather working from something like just a texture and a depth map. The parallax scrolling here isn't really distinct objects with large distances between them, but rather one single box might consist of 10 layers very close to each other, making it more of a voxel solution. So I though maybe I could fake that effect without doing parallax proper. Like, just bending the edges of stuff a little to fake some shift in angle, like this:






   JLJac on May 02, 2014, 09:34:16 AM:

This is already how I do it! I just bake it together to a single image. All the rain world level art is 30 bitmap layers, each of them slightly smaller than the next, that together form semi-threedimensional objects. What I want to do now is the exact same thing, just at run time - so if I manage to do it it'll supposedly look the same, just moving.

Each layer texture has only a few colors, to indicate what color to grab from a palette. Maybe 6 colors all in all, including white which is treated as transparent. What's a tilemap? Can it help me?





   JLJac on May 02, 2014, 11:25:02 AM:

  Cheesy hahaha ok you guys are right, I've gone a bit overboard with this. I had a very particular vision, and an idea of how to make that happen, and when it didnt work I got a bit obsessed with making it work. I'll just look into other options, such as pre-rendering a few screen positions and switching between them with hard cuts. Don't worry, I've not become crazy obsessed with shaders and I won't mess up the game hehe Tongue





   JLJac on May 03, 2014, 02:30:02 AM:

Ok, so I actually managed to mock up the thing I want - it looks a little something like this:



30 layers parallax scrolling voxel like 3D space renderer!

Even with the smallest level size and no shadows it still eats away at the frame rate pretty badly. I think I'll try to figure out some other solution.

Maybe the past two days make a little bit more sense now?
My original idea was to have all the layers in the same texture, and do a per-pixel raytrace layer for layer in the texture until I hit something. When loading a big texture proved impossible that original approach fell flat, and I've been trying to find another solution since. Now I'm pretty tired of all this though, and am contemplating to just have fixed screen positions. It would be nice to show the depth of the rooms like this, but you can't have it all. I still have high hopes for dynamic shadows falling across the geometry though - that could be done with just depth map and a pre-baked image.





   JLJac on May 05, 2014, 08:49:56 AM:

Thanks guys! That's certainly an option, but the thing is that I already have this 30 bitmaps thing set up - that's how the level editor works already, except it bakes them together. Making it proper 3D would be an entirely different animal all together. I still have issues accepting that 30 sprites with somewhat high-res textures can be an actual issue when Crysis can do entire islands with a bazillion polygons of rain forest and stuff, but I'll take your word for it.

Update 132
So I had a talk with James, and we decided that before I got manically obsessed with making this tiny little parallax effect work, I could probably follow through on a fixed-screen approach. Especially as we'd most reasonably want both solutions in the game anyway even if I managed to make the parallax work, so we could fix the screen in performance heavy rooms and save the parallax for cinematic set pieces.

So, I'll abandon parallax scrolling for a while in favor of importing 2D backgrounds. In the final spasms of my parallax obsession, I gave the pixel-raytracing some time, and for a wile it looked bright because a 30 iteration for-loop in the fragment shader actually didn't murder the framerate as badly as I feared. But then some stupid stuff came in the way, namely that in Unity the CG compiler always unrolls all loops (stupid, but necessary on older cards if I got it right) and then if I do some operation in the for loop it assigns new temporary variables for each iteration (STUPID, NO EXCUSE) which maxes out the shader's tiny little working memory and keeps it from compiling.

So there I was, at a road fork, where one option was to learn the thing that graphical C compiles to (looks like this:
Code:
add r8.xy, t0, c0
add r7.xy, t0, c2
add r5.xy, t0, c3
add r2.xy, t0, c4
mov r0.y, c1.w
mov r0.x, c1.z
add r9.xy, t0, r0
mov r0.y, c2.w
mov r0.x, c2.z
add r6.xy, t0, r0
mov r0.y, c0.w
mov r0.x, c0.y
add r4.xy, t0, r0
mov r0.y, c3.w
mov r0.x, c3.z
seems to be polish notation and similar horrors)  and the other was to decide that f*ck it, for now at least. So I'm trying to convince myself that #2 is the way to go.

I'll probably still get some good opportunity to pull my hair over shaders, if I'm going to do the coloration and the light stuff as a shader.

Before we leave the parallax issue, for now, I'll give you the the most current version of the "30 files, 30 sprites"-solution, to give you an idea of what could've been and might actually be if I get back to it later.






   jamesprimate on May 05, 2014, 04:10:40 PM:


If you want to know more about virtual texture, there is amplify on unity, they explain the basic and provide a tool. http://amplify.pt/unity/amplify-texture/

wow this looks like just the ticket





   JLJac on May 06, 2014, 11:07:24 AM:

Thanks guys! Hope we can make this dream come true Smiley
And as always Jimbert, thanks super much! That might actually be a viable solution to some of our problems. I'll give the trial a test run eventually, when I get back to this parallax thing.

Hahaha Ulillillia is wonderful! I've never seen anyone care as little about the actual interactive layer in a 2D game  Cheesy

Update 133
Ok, so despite encouragement and tips I've still managed to keep out of the parallax hole. Now I'm starting to set up the infra structure for the 2D level graphics instead.

My current idea is this - encode as much visual information as possible into a texture, and then unpack it with a pixel shader. If you guys want to tell me that's a horrible inefficient way of going about it, now is the time.

So, I started by setting up a list of the stuff I need to know for each pixel:

its color [0-3] (transparent, shadowed, standard, high light)

its depth [0-29] (Needed to give it the correct fog shade, and later to do the cool dynamic shadows I'm hyped about)

if it's lit [bool] (I'll still pre-bake the light, and save whether or not each pixel is actually lit. If it's not lit, we can save time in the shader by not doing shadow calculations on it.)

if it's a rainbow pixel [bool] (If you check the screenshots you might notice a little oily effect around the edges of stuff - that)

Whether or not it has an effect color [0-3] (No effect color, effect color1, effect color2, white. You know how some plants and stuff tend to be pink or cyan? That's this. White is used for the flies' hives.)

How much of that effect color [0-255] (probably unnecessary resolution here, if I make it 0-50 the gradients would probably still look smooth, given how they're always on small surfaces)

Then I started messing around, and realized that all of this information can be stored in a 24bit rgb pixel! With quite a fat margin, I could store a lot more if I wanted to!

So this is my plan:

Red channel:
0-transparent

1-30 = depths 0-29, color shaded, not lit
31-60 = depths 0-29, color mid, not lit
61-90 = depths 0-29, color highlight, not lit

91-120 = depths 0-29, color shaded, lit
121-150 = depths 0-29, color mid, lit
151-180 = depths 0-29, color highlight, lit


Green channel:
0 = no effect, not a rainbow pixel
1 = level effect color1, not a rainbow pixel
2 = level effect color2, not a rainbow pixel
3 = white color, not a rainbow pixel

4 = no effect, rainbow pixel
5 = level effect color1, rainbow pixel
6 = level effect color2, rainbow pixel
7 = white color, rainbow pixel


Blue channel:
0-255 amount of effect color


My hope and dream is that the level editor will be able to encode each pixel with this information, save it as a .png, and then a fragment shader in unity will be able to decipher it and color the level dynamically. Tune in tomorrow to see it shattered.

Unity wizards (like Jimbert!) can you give me a quick heads up on one thing - if I want to feed a shader a palette of something like 12 colors, what's more efficient? Feeding it as params, or feeding it a tiny little secondary texture where it can pick the colors?






   JLJac on May 06, 2014, 11:21:47 AM:

All the more reason to fight to keep the pixels pure then haha! I'm a bit more worried that I've heard you shouldn't use if statements in shaders, and the decoding of this system is obviously going to be a huge knot of ifs and modulus operations...





   jamesprimate on May 07, 2014, 01:55:50 AM:

In this GDC 2014 talk by David Rosen, a dev working on Wolfire's Overgrowth, he's discussing procedural animations in indie games and talks about Rain World around the 20 minute mark. The whole talk is really interesting though

ah yes! thanks for the link. David contacted us a while back to ask questions and if we'd be cool with him using RW as an example. which is awesome because that was a fantastic presentation, I learned a lot. Not as much as from Gimym's links though Grin





   JLJac on May 07, 2014, 02:27:52 AM (Last Edit: May 07, 2014, 03:51:22 AM):

Awesome! Thank you, Jimbert Grin My implementation is actually very similar to those gradient maps, except my input is ... what would it be, 7 dimensional, and the output is a coordinate on a 2D palette texture rather than an 1-dimensional gradient.

I've had pretty good luck today, and got quite far with my deciphering algorithm! Then I ran into a weird error. I hit my instruction limit, which was kind of due to happen because the basic settings only allow for 64 instructions.

No biggie, let's just upgrade to shader model 3.0, right? That's like, 2003 graphic cards or something, people's PC's will be able to handle that.

No can do. For some reason Unity says "no subshaders can run at this graphics card" if I target the shader at anything higher than 2.0. Unity refuses to believe anything else than that my graphics card is from 2002.

I've searched Unity's settings for the "dude I bought my computer 2 months ago it's not ten years old"-checkbox, but can't seem to find it. There's an option to emulate for 3.0, in order to try the compability with older machines, but since Unity is adamant that my machine is even older than those older machines, no luck.

Any tips?

Found a command SystemInfo.graphicsShaderLevel in Unity, and this claims that I have 3.0, which is worrying for every reason. First, if I have 3.0 it should work, right? Second, I don't have 3.0, I'm supposed to have 5.0! Fun times!





   JLJac on May 07, 2014, 04:35:29 AM:

James solved it.... Hahahahahaha! 

I was looking for high tech solutions all over, and the answer was this: Go to the "We now feature directx 11" page on unity.com - acquire the information that in order for complex shaders to work, you need to tick the "use directx 11" box in the unity editor. Tick the "use directx 11" box.
Cheesy Facepalm Tired Tears of Joy Cry Epileptic





   JLJac on May 07, 2014, 08:55:23 AM:

I'll write a fallback shader, so no worries Smiley





   JLJac on May 07, 2014, 11:40:50 AM:

Update 134
A very good day!

I got a good chunk of my shader done - there is still work (dynamic palettes, effect colors, the rainbow effect, etc etc) but now I know that the basics work.

The level editor encodes an image looking as such:



This in turn is deciphered by the shader, which can tell things such as depth, whether or not the pixel is lit, and all that stuff I mentioned in the last post.



The shader is also fed another texture, a palette texture which is very small. In the future I think it might be cool to be able to interpolate between different palettes, to do cool effects such as darkening as the rain comes, lightning and the such.



This one has a little bit of random static in it - that will not likely stay, I'm just having fun.

And, finally, I got my dynamic shadows to work!



Woooho!

I have it working with the normal color scheme as well, just used this wacky palette so you'd see clearer. The principle is super simple: each pixel has a depth value (red in the mockup). If it's lit, it looks at a certain pixel to check if it's occupied by a sprite. Which pixel it looks at is determined by stepping backwards in the light direction.

So say that I'm a lit pixel that's at a depth of 5. Then I step, for simplicity's sake, 5 pixels to the left and upwards, and ask that pixel if it has something rendered on it. If true, I become shadowed. If I'm at a greater depth, I go more steps up and to the left.

It's unpolished - for example it doesn't take notice of perspective yet. If the shadows are cast straight backwards, you'd want them to stretch towards the center of the screen according to perspective, right, and that's not factored in yet. But I'm getting there!

Super exciting to see that it works!





   jamesprimate on May 07, 2014, 04:41:11 PM:

 
Update 134
A very good day!

 Tears of Joy





   JLJac on May 07, 2014, 10:42:12 PM:

No, I'm actually not raymarching, as I don't do any step-by-step checking of different depths. Instead the procedure has only two steps:

1. Check the pixel and get its info, which is color info but also depth (already encoded by the level editor).

2. Use the depth to check for where in the grab texture to look for objects that shadow this pixel. The greater the depth, the more up/left we check.

Effect: If you are in front of a wall, there will be a shadow on the wall. The further back the wall is, the further down/right the shadow will appear.

Your pseudo code is super helpful, by reading it I see a lot of things I can optimize in my shader! It's impressive that you manage to keep away from if-statements like that!

My texture looks like this:



So that's the same basic idea, right?





   JLJac on May 08, 2014, 12:50:01 AM:

Thanks  Smiley

Ugh, can someone clue me in on the quirks of the CG compiler? Is there a list somewhere? It certainly does not execute the the code linearly in the way that I'd expect, that's for sure!

Example:

Code:

if (light){
  setColor = half4(0, 1, 0, 1);
}else{
  setColor = half4(1, 0, 1, 1);
}

This code makes the lit areas green and the other areas purple, as expected. This though:

Code:

if (light){
  setColor = tex2D(_PalTex, float2(red/30.0, 1.0-((paletteColor + 3)/7.0)));
}else{
  setColor = tex2D(_PalTex, float2(red/30.0, 1.0-(paletteColor/7.0)));
}

doesn't work, it executes the "else" always, never the "if" Crazy No other changes!

This:

Code:

 if (light)
   paletteColor += 3;

 setColor = tex2D(_PalTex, float2(red/30.0, 1.0-(paletteColor/7.0)));

works, and according to my logic that is the exact same thing as the one above it. Confused  Crazy

I've been told that shaders work more in parallel an less linearly, and I guess this is that, but I just can't wrap my head around how it works. To me it seems to just be random. What's going on?





   JLJac on May 08, 2014, 09:30:36 AM:

Thanks guys! Yeap, those solutions are actually how I solved it! But the reason why I wanted to do it with proper if statements was that I didn't want to check for shadowing objects if I already knew the pixel was in shadow. I didn't want it to run that code unless necessary.

Speaking of which, how expensive is tex2D? I do it quite a lot, heh -





   JLJac on May 08, 2014, 11:09:09 AM:

Super relevant info, guys! What would I even do without you!?





   JLJac on May 08, 2014, 11:31:39 AM:

 Cheesy probably not, no! I'd still be beating my head against Macromedia Director!





   JLJac on May 09, 2014, 03:30:19 AM:

The shader is written in CG, nvidias shader syntax, and has its own set of fun little functions of which lerp is one!

So... you guys are telling me that doing one extra tex2D and a lerp is still cheaper than an if-statement?

Edit: oh wait, actually you're telling me that an if statement doesn't do much good at all because it's still likely to execute both branches, right? Did a little reading in your links...





   JLJac on May 09, 2014, 03:57:29 AM:

Can you multiply with bools? C# generally get mad at me when I try...

Update 135
Just wasting endless amounts of time on this custom shader haha! Right now I'm a little shader crazy, so there are probably more effects going on than in the final product. But I'm certainly learning and having fun!

Little taste of my light engine as of today:



Can you imagine how I went through all that trouble to make that weak little color shift happen? Crazy. Still I think it brings a lot of "location feeling" - the shadow helps you understand what you're looking at as a volume, which enhances the illusion of being in a space.

As you can see the shader is now also able to vary the palette, among other things. It can also fade the light up and down, the rainbow effect and effect colors are in, etc etc. I've played with a little distortion to make it look wet, but maybe it's more distracting than cool. I could potentially keep it but dial it down a bit. So many possibilities!

I think that when I'll want more effects, such as a rain effect, a fade between palettes and so on, I won't incorporate them all in one shader. Rather I'll write a shader for each effect, and just switch. That way I won't be able to have all of them at the same time, but they will all be more concise and therefor faster and compatible with older machines.






   jamesprimate on May 09, 2014, 04:41:25 AM:

Can you multiply with bools? C# generally get mad at me when I try...

Update 135
Just wasting endless amounts of time on this custom shader haha! Right now I'm a little shader crazy, so there are probably more effects going on than in the final product. But I'm certainly learning and having fun!

Little taste of my light engine as of today:



Can you imagine how I went through all that trouble to make that weak little color shift happen? Crazy. Still I think it brings a lot of "location feeling" - the shadow helps you understand what you're looking at as a volume, which enhances the illusion of being in a space.

As you can see the shader is now also able to vary the palette, among other things. It can also fade the light up and down, the rainbow effect and effect colors are in, etc etc. I've played with a little distortion to make it look wet, but maybe it's more distracting than cool. I could potentially keep it but dial it down a bit. So many possibilities!

I think that when I'll want more effects, such as a rain effect, a fade between palettes and so on, I won't incorporate them all in one shader. Rather I'll write a shader for each effect, and just switch. That way I won't be able to have all of them at the same time, but they will all be more concise and therefor faster and compatible with older machines.



Tears of Joy

seriously this is amazing progress to see





   JLJac on May 09, 2014, 01:09:23 PM:

can't multiply with bools, C# has very strict type safety, no mixing like that.
just use shorthand or smth, e.g.,

Code:
bool b = true;
int i = 5;
var c = i + 2 * (b ? 1 : 0);
// if b true, c = 7, if b false, c = 5
This is so cool! I'll overuse this like crazy now!


Has anyone else encountered this problem: when building the unity project (not playing it in the editor but creating the standalone) the default textures for my shaders detach. In my case that means everything turns white, as the shader is no longer hooked up to the palette texture. Hardcoded colors work.

I'd set the textures through code, but the only way to access shader properties is through the material, and I just can't find the material(s?) of my Futile object(s?)... You can go Futile.instance.renderer.material, but then it just says "this object has no renderer attached to it". Unity says that 13 materials exist, but applying the setting to all of them doesn't seem to work.





   JLJac on May 11, 2014, 10:11:19 PM:

Thanks! Yeah, in a resources subfolder, but that's working fine with the levels, so I don't see why it should be trouble with the palette.

Hm, is that a syntax you've tried yourself? It says it's invalid syntax at my end...

In either case we've asked Matt Rix himself on reddit, and he's on it! He seems super helpful and approachable Smiley





   JLJac on May 12, 2014, 10:52:24 AM:

...pixel-art games with modern graphical tricks thrown in...
Yeah, that's exactly what I'm going for - something that looks like pixel art, but has more to it... Wish me luck!

The graphics of this game are impressive. I'm very interested in both game art and traditional animation, while I do of course also enjoy well executed 3D graphics.

What I find, though, is that an illusion that has much work put into it, whether it is the usage of parallax layers versus 3D rendering, photo-referenced colors or a hand-picked pallette, it's that the illusions that people put time, effort and love into, are the one that live and breathe the most to me.

Say, comparing Porco Rosso to Pacific Rim (I am so sorry), despite pacific rim using a system to set up the visual illusion that is far more like our real world, with an actual 3D space where things are taking place, the movie that helps my suspension of disbelief that most is still the hand-animated one, where 3D space is completely abstracted, calculated either by numbers or intuition by someone drawing on a flat paper.

What I'm getting at here is that this 'lovingly crafted illusion' thing that really gets me going, is something that the visuals of Rain World also brings me. I think this game is absolutely precious. Even if I never play it, just looking at gifs from it has already given me something on a 'spiritual level' that I can bring with me into life and into my art.

Wow, this is such a nice thing to say  Shocked I really hope I can live up to it. If I can't, I hope you'll be able to hold on to that first impression of yours!

Update 136
Started porting the player's animation, which has a few quirks to it. There's a lot of manual work such as logging where the rotational pivot point is for each sprite etc. But I also have some bigger questions to think about.

One solution I've been contemplating is to have a "cosmetic module" for each creature, which holds things that don't really affect gameplay such as tails and paws. Then I could just drop that module when the creature is off-screen, and save some CPU on off-screen creatures. Also it might be a nice structure to have in an object, all the stuff that actually matters in one place and all the fluff in another.

Problem is that then I'd need to have a players' cosmetic module, a lizards' cosmetic module, etc, and then I'd have an entire separate but perfectly parallel inheritance tree for those, which feels like a weird an un-pure solution.

Also, this feels like it could be a massive case of premature optimation, heh. Maybe I should do it the proper way, and implement what's easiest, run the profiler, and then optimize where it actually matters.  Huh?





   JLJac on May 13, 2014, 12:15:29 PM (Last Edit: May 13, 2014, 12:56:53 PM):

Update 137
Ughhhh a bad day. There will be a few of those too. The good news is that I have the framework for a separate graphics module up, and that I've started implementing a tail. The bad news is that I've spend the whole long day trying to keep the nodes of the tail out of the level geometry, and still haven't gotten it to work.

For the cosmetic body parts, I don't want the physics to be too good - if I do it like I do the physics for actual objects, they won't ever be able to pass through geometry and you might end up with part of your tail on the other side of a wall. Instead I want them to just be pushed out of geometry in a somewhat reasonable direction, without jumping around like crazy and without entering geometry unnecessarily. That's harder than it sounds. If the geometry was all circles it would be super easy - I have a go-to solution which is just pushing the nodes apart according to their radii. But the level geometry is compromised of squares, and I can't translate the algorithm in any reasonable way.

The only comfort to be found in this is that when I solve it, I'll be able to use that solution for all body part - slugcat hands, lizard tails, fly wings, etc. Stay tuned!

Edit: Wooho I solved it! Never underestimate the power of going online and whining to strangers, it obviously helped this time. Tomorrow: less hopeless news!





   JLJac on May 15, 2014, 08:33:03 AM:

Hi! Thanks  Grin

Btw, how much control do you have over custom shaders in Futile? Can you customize how it does the setup of vertex buffers and other parameters sent to the GPU?
I don't know yet, as I haven't encountered those problems so far. What I have had some problems with is that Unity's way of reaching a shader (for setting parameters) is through the material which the shader is connected to, and I haven't been able to reach the material used by Futile's sprites. Instead I've had to use global shader params, but I'll have to actually solve that sooner or later.

Update 138
Slugcat animation is coming along! I was stalled a bit because I didn't know how to approach the tail now that I don't have beizer curves. Like always when I'm stuck it was James who helped me get moving again. We checked out the vector graphic options in Unity's app store, and after a bit of research it was clear that they all just used countless triangles to draw the vector lines.

So, then we decided that if that was the case, I could as well move around triangles myself. So today I made a triangle mesh object, where you can define a number of triangles, and some vertices. The triangles are just references to three different vertices, meaning that sharing vertices between triangles is super easy. If I want to make a four-sided polygon for example, a quad, I can just go:
Quote
TriangleMesh.Triangle[] tris = new TriangleMesh.Triangle[2] {
        new TriangleMesh.Triangle (0, 1, 2),
        new TriangleMesh.Triangle (1, 2, 3)
};

TriangleMesh mesh = new TriangleMesh ("Futile_White", tris);

And then when I move around vertices 1 and 2, which are shared by both triangles, both triangles will change accordingly.

The test run of this structure is the slugcat tail, for which I programmed the physics the other day as you might remember. Behold - 4 little balls of physics and 13 triangles drawing a shape on top of them:



Looks pretty smooth right? Smiley

Next up, probably a head or something.





   JLJac on May 15, 2014, 10:36:02 AM:

Thaaanks!  Grin

Actually the physics are all home brewn, and they're pretty non-optimal in a lot of ways. It's just round little balls, and it relies on their spacing being smaller than a tile for them not to end up on the opposite side of walls. But, it's just cosmetics, so whatever works. The physics for actual objects is a bit more reliable.

James pointed out that the new tail was a lot limper than the old one, which looked a bit stiffer and had more body to it. So I made a few adjustments - basically a stiffness that declines over the segments. The base is the stiffest, and the very tip is still slimy.



Small detail, but it's that kind of stuff I love to do haha! This looks more like it, James? The stiffness and the stiffness decline are just hard coded variables, so they can be adjusted whatever way.





   jamesprimate on May 15, 2014, 11:04:30 AM:




Small detail, but it's that kind of stuff I love to do haha! This looks more like it, James? The stiffness and the stiffness decline are just hard coded variables, so they can be adjusted whatever way.

YES! seems to have a little more internal structure, which gives it a sort of realness. you know, for a slugcat. still flows so well compared to the old one. looks almost joyous when springing about! great stuffffff i cant wait to see the full new model, its going to be so nice





   JLJac on May 16, 2014, 11:11:52 AM:

Yeah, now when the tail is all code that could definitely be done!

Update 139



Piece by piece! Now we have a head, and the legs are about halfway implemented. Normal running is in as you can see, but the special cases for jumping, wall climbing, crawling etc need to be done.





   JLJac on May 16, 2014, 11:56:04 PM:

Hehe yeah, it's just the rendering order - now it's drawn before the terrain which means it shows up in the grab texture. I'll just move it so it's drawn afterwards, and it'll appear on top of the scene rather than in it.





   JLJac on May 20, 2014, 12:07:45 PM:

Update 140

Hahaha, one thing that I never would have thought would be a time sink was having the legs aim in on climbable diagonals when in the corridor mode, but when I opened the old code for that stuff I was greeted by some pretty high tech stuff! And because of inverted y-axis and other stuff, I had to re-create all that, which took pretty much a day :S In better news, the legs have some other animations more refined now, such as running up and down slopes, jumping, and the like.



Just a little bit more leg work to go now, then it's arms, then the face, and then we're more or less back at square 1 with the slugcat in Unity! Smiley





   jamesprimate on May 20, 2014, 03:27:47 PM:

Update 140

Hahaha, one thing that I never would have thought would be a time sink was having the legs aim in on climbable diagonals when in the corridor mode, but when I opened the old code for that stuff I was greeted by some pretty high tech stuff! And because of inverted y-axis and other stuff, I had to re-create all that, which took pretty much a day :S In better news, the legs have some other animations more refined now, such as running up and down slopes, jumping, and the like.



Just a little bit more leg work to go now, then it's arms, then the face, and then we're more or less back at square 1 with the slugcat in Unity! Smiley

hey, its good you took the time. cuz you know friends dont let friends skip leg day





   JLJac on May 21, 2014, 12:09:32 PM:

Hehe!   Cheesy

Update 141
I thought today was going to be arm day, but instead I ended up doing a million little leg and body touch ups that I didn't really remember were in there to begin with, but are much needed to make things look cool. Now we have legs displaying different sprites if you're climbing, crawling, wall sliding etc, and also different body positions for a bunch of stuff, such as climbing a pole, sliding on a wall and more. There is a lot of hooking up the upper body's x-position to a 3 pixel wide sinus curve over movement and such, which maybe isn't very exciting. But the animation is what many people like about this game, and that consists entirely of those little quirks, so I feel happy about going over them again. Even more so now that I have a template to look at, and don't have to spend 30 minutes deciding if that sinus wave should have an amplitude of 2, 3.5 or 4.

This is what the animation system of rain world essentially is - it's actually not as procedural as you might think, because it's not just a magic formula that makes everything look cool. Instead it's heaps and heaps of special cases, hand crafted "animations" that are made more or less frame by frame, but not by drawing sprite sheets but by deciding what force should affect what body part at what time. The cool thing about it certainly isn't that it saves a lot of time, but that combinations of animations and smooth transitions between them can exist. If one body part is for example animated to do something, those motions might be defined in relation to the overall alignment of the body, which will make it look a little bit different each time depending on what else is going on.





   jamesprimate on May 22, 2014, 08:16:59 AM:

Fanart incoming!



Still not done yet, but it's getting there.

awwwww, looks nice!  Toast Left





   JLJac on May 23, 2014, 06:08:07 AM:

Woooooow, that's so awesome! I love the font! And the colors!  Grin Grin Grin That fly is staring into my soul!

I've been a little bit out of it for a few days, might be a little virus or some other weirdness. So, I've started at the arms, but things have been moving slow and I don't really have anything to show you guys yet Sad Keep tuned though, once I pick up some pace again it's gonna move fast!





   JLJac on May 26, 2014, 03:26:48 AM:

Ohhhhh.... Rætikon is sooo beautiful o.0
Actually I don't think I could give up control of the art under gunpoint, but thanks for the offer! I'm certainly open to tips and tutoring though, especially when it comes to readability etc. At the moment I'm in full Unity catch up mode though, so it might be a while before I return to art stuff  Sad Oh, and it's mostly James who checks that email, if you guys want to actually talk to me I recommend my email which is linked from my profile here.

Update 142
Ported some of the "using the arms to balance"-code, and found myself laughing at this. If you view it as a dramatic gesture



Ta-Taa!

Also note how the tail is used for balance, and there's a bit of a tilt to the body. Most of that tilt is actually not reflected in the physics, it's just the graphics module doing some decoration work. I feel like I want the actual physics engine to be solid, and not have too much weird flickery random numbers and sine curves in it or it might become unpredictable.

We'll see if this still looks funny when the actual arm graphics are in, if so I might have to do something about the maths behind it.





   JLJac on May 27, 2014, 11:39:50 AM:

Update 143
Here we are!



The player animation is now up and running in Unity! Huge milestone!

The dynamic "look for somewhere to grab" engine used to be only for lizards, but now when I'm making stuff more general it's accessible to players too. So for example, instead of balancing awkwardly, the player will prefer to just grab something and chill out if possible:



For the climbing, little hand sprites are rendered on top of the level graphic. Those are not in the grab texture, so they don't have a shadow, but you would totally not have noticed that if I didn't tell you Tongue



There's still some stuff to do, for example the player being able to look at things and not only stare blankly into a z-dimension where nothing really exists. But looking at stuff requires ... stuff. So that has to go in first. Also there's a lot of little details that need more polish, as always.

Another cool thing happened - I actually managed to port the build! The problem where the shader's attached textures wouldn't stay bound after building was averted by making the palette and the noise map global textures instead. A hack, yes, but it'll do for now.

Then another problem came along, which was THE WOOOOOORST. The palette loaded but everything was a mess. After debugging by doing different palettes colored in different ways to see where the shader actually picked its colors, I got it. Buckle up, because this is horrible:

THE SHADER ROUNDS DIFFERENTLY IN THE PREVIEW FROM IN THE ACTUAL BUILD.

 Mock Anger Mock Anger Mock Anger Mock Anger Mock Anger Mock Anger  WTF

Say that I wanted to fetch the sky color of the current palette, which would be pixel number 7 from the bottom. I used to sample at 7/theHeightOfThePaletteTexture which worked fine. Of course this actually samples on the edge between two pixels, but in the editor I got the 7th pixels color, so I was happy. In the build though, I got the other color. Easy enough to fix, I just made sure to sample at 6.5/theHeightOfThePaletteTexture. But I shouldn't have to deal with this! If Unity keeps the level of inconsistency between editor and build that I've seen so far, it's real trouble. Like, you need to have the testing environment be somewhat the same as the real deal right? Otherwise it's like building a car on the moon and having to look at it crumble under gravity every time you try to drive it for real. Hm.

Anyways, mostly a good productive day!





   jamesprimate on May 27, 2014, 12:19:56 PM:

Update 143
Here we are!



The player animation is now up and running in Unity! Huge milestone!

The dynamic "look for somewhere to grab" engine used to be only for lizards, but now when I'm making stuff more general it's accessible to players too. So for example, instead of balancing awkwardly, the player will prefer to just grab something and chill out if possible:



For the climbing, little hand sprites are rendered on top of the level graphic. Those are not in the grab texture, so they don't have a shadow, but you would totally not have noticed that if I didn't tell you Tongue




ahhhhhh so fluid and nice! thats a lot of work for one day, wow.

yes yes, proportions will be looked at, but cmon people, we've got to get them working in the build first! adjusting the size is trivial comparatively.  Hand Thumbs Up Right





   jamesprimate on May 27, 2014, 12:52:50 PM:

hey im just excited the slugcat finally looks like a slugcat again  Tears of Joy Toast Right





   JLJac on May 27, 2014, 10:21:24 PM:

Yeah, I'll definitely be more suspicious of the editor from now on! The vita thing is really cool actually, would be fun to see the game on a handheld Smiley Thanks for the heads up - now that you mention it we should probably try the game on a mac and a linux machine every now and then as well. I guess I had a little too much blind confidence in Unity to just export and have everything work - and to Unity's credit that might actually be the case if you use it as supposed to. But I do some weird stuff with Unity I guess, such as 2D and custom shaders, so it's somewhat natural that it's a bit more shaky I suppose.

What's up with the arms haha? They are actually the exact graphic from the old game, so nothing have changed there, that I know of at least! Anyways, note that they're not supposed to be cute fluffy paws, but rather skinny and slightly uncannily human like arms, as you've probably seen in the concept art. That said I'm also not too happy about all of the arm stuff, especially how big the hands become when grabbing a pole, so there's going to be some polish there for sure!






   jamesprimate on May 27, 2014, 11:40:02 PM:

now that we have a FULLY FUNCTIONAL SLUGCAT, I did a little kickstarter update. Mostly things you all have seen, except for an actual video of rain world running in unity and looking good (!!!):



i was talking about this with Joar, but i think we've actually reached the point where the gifs don't do the game justice anymore. the unity build is running at like 120FPS looking suuuuuuuper crisp and vivid, with way better physics, but still using the cool old assets. its pretty incredible really!

(i can say these things because i didnt do the coding, right? anyway, its magic)





   JLJac on May 28, 2014, 04:46:48 AM:

Thanks! Actually I think it looks pretty identical to the old one, but now I've set you guys up by having you stare at some boxes for a couple of weeks, so compared to that it looks like a million dollars I suppose  Cheesy



In other news, I applied the rainbow effect to all surfaces for debugging and ended up in a slugcat acid trip  Shocked





   JLJac on May 28, 2014, 10:25:45 PM:

Yeah, hopefully we can find a use for it!

Update 144
Now I've been doing fun visual stuff and spoiled you with gifs for a while, so today I returned to behind the scenery to do some tidying up. When trying to achieve something I generally tend to just write whatever works, and then I later need to go by it and clean the code. Also I've been horrible at commenting for the last week or so, so that could use some work as well.

In behind-the-scenes news, I managed to have the application load the levels from outside the resources folder, and it was less of a nightmare than expected. I'm using Unity's WWW class, which is actually used for downloading files from the web, but can be used locally on the disk as well. It's a dissynchronized load method, and I haven't really decided if that is cool or not yet. Worst case I can always just have the game wait and not do anything until the loading is done, and voila, I'll have a synchronized loading method.

Apart from that I've started making little essential parts of the engine tick, that has been neglected till now. For example, movable camera:



Looks fairly good even without the parallax, no? Of course I don't want the camera to behave like this in the actual game, I'm leaning more and more towards the fixed screens as an artistic decision, but in order to have for example a screen shake effect this basic functionality needs to be in.





   JLJac on May 29, 2014, 08:23:29 AM:

Update 145
I slipped away from the boring tasks and did something useless but fun instead... Arm behavior in mid-air:



The weird jerky movement where the tail becomes square is when I do a hard reset of the player's position to the center of the screen, and of course there won't be anything like it in the actual game.

I tried to make the arms look a little bit like they tried to balance the body in the air, at the same time as they're ready to protect against impact with terrain. They also have a little bit of terrain awareness - every frame they look for terrain in a somewhat randomized position that's in front of the body. If it has terrain in it the arm will gravitate that way, hopefully looking like something along the lines of either trying to soften the impact of an incoming floor or clawing for a grip at a wall.





   jamesprimate on May 29, 2014, 09:51:26 AM:

Shocking!!!

its a huge change. but after looking it for a while, its undoubtedly the right direction. in fact, now the old leap looks strange by comparison (yes, where *were* the arms?)

It does interrupt the graceful comet-like arc of the old leap though, which i found really appealing. Perhaps just fine-tuning the circumstances (length of time / distance it takes for the limbs to come out) so that not every jump winds up as a pile of wiggling limbs, might give us best of both worlds. This is obviously just my initial impression from one gif where you are specifically TRYING to show the limbs, so perhaps this is already somewhat implemented.

I'm guessing there will be separate set of classes for limbs holding objects (like tucked in, close to the chest) or something?





   JLJac on May 29, 2014, 01:02:37 PM:

Hahaha OK let me calm you down by letting you know that in the gif the behavior was very exaggerated in order to show the functionality. Like James mentioned, the "meteor jump" is very signature to the slugcat, and I wouldn't want to give that up for some flailing.

The way it works is like this - every frame you're airborne, a value is incremented by the magnitude of your velocity vector. When you hit ground that value is reset. If that value is larger than a specific amount, this arm behavior starts to show. So, the longer you've been in the air, and the faster you've been moving during that time, the sooner the flailing will start. But the number is balanced so that a normal jump will never generate the flailing.

Here's an example of the normal lunge jump on ground, which is the same as always, compared to the lunge jump from a height, which will display a little arm movement:



Also note that in normal speed much of this is too quick to even see, which kind of makes me question why I've spent an entire afternoon on it hehe!





   jamesprimate on May 29, 2014, 01:18:08 PM:

i love this so much





   jamesprimate on May 29, 2014, 01:49:21 PM:

so obviously i spent the last half hour watching slow motion cat jumping videos for comparison (paired with maniacs of noise soundtrack for MAX STYLE): http://youtubedoubler.com/cy1S

id say the little bits of flail are pretty realistic!





   jamesprimate on May 29, 2014, 08:21:27 PM (Last Edit: May 29, 2014, 09:51:21 PM):

i think the warping effect is a shader to show a kind of misty, drippy pre-rain atmosphere. but you are seeing it without the physical drips, etc. i think it will make a lot more sense in context. now it just looks like, well, 'Small Dose of LSD World'. which is not necessarily a bad thing!





   JLJac on May 30, 2014, 08:49:23 AM:

Yeah... For all the abuse I've been putting on Director, I've gotta say that it has amazing consistency between the editor and the actual app, and between different machines.

Update 146
I have this policy on the devlog, that I should never write about what I will do, but only about what I have already done. This is because otherwise I end up in this weird situation where I "owe" work to you guys, and the next day when I've actually done that work I have nothing new to say, so instead I write about what I'm going to do tomorrow, and on it goes. Soon you'd be reading my dreams and wishes rather than actual progress reports haha!

Because of this I don't have much to say today, as I'm in the middle of a large boring technical task that won't get done in one sitting: making room sizes variable. The horror of this task is that the level editor is still Lingo, and a royal mess at that. The only good thing is that I've given up on the code to a degree where I don't even care any more, so I just put in whatever solution works no matter how ugly or cluttered it is. The level editor is just going to spit out images either way, so if it's unoptimized is not really a concern. Also, if it looks like s**t is not really a concern. As long as it works!

The problem here is that I was so very confident that no level would be any other size than 52*40 tiles that I hardcoded those numbers in probably like a hundred places in the code. Today I've been going over that (ctrl+f, ctrl+f, ctrl+f) and replacing it with a global variable for level size.

I'm still nowhere near done, which is why I won't write a long story about what I have in mind for different sized levels (policy, remember), but I got as far as to make the level editor resize a level, save it, load it, mess with its settings and geometry and actually render it without the application crashing. The last words are key here, without crashing. Nothing behaves as supposed to, the cursor is seven miles away from where it's actually placing tiles, everything looks like a jumbled mess, it's completely unusable, etc etc. But it didn't crash!

Sit tight for more variable room size news! Tomorrow I'll probably spend a bit of time under the sun, but sunday or monday I'll get another chunk of this done, and by next week we'll hopefully be able to return to more exciting, less super technical stuff. Have a nice weekend!





   JLJac on June 02, 2014, 09:01:10 AM:

Update 147
Big fat technical task continues... Now I have the level editor interface working for variable level size - you can load a level that didn't have the settings and it's converted, you can change the size of a level and all the data will be updated accordingly, the geometry editor and tile editor allow scrolling around over a larger-than-screen level using the num pad and tile placement etc works as supposed to.

I have cosmetic tiles now, that can be assigned as a border around a level. They're treated as normal tiles with graphics etc by the level editor, but will be excluded when the level is saved and won't be recognized by the game. This is cool because then if you have a level that for example is just a flat floor at the top, and then just air from there upwards, you can crop the level geometry there but still have graphics above it. This will make levels lighter on RAM, and will allow pathfinding creatures etc to not store a whole lot of unnecessary tiles in their memory.

I've also started to port the level rendering to this new condition, and it's coming along quite nicely. It's already able to render levels of varying size, though it is still a little bit confused about it.

When I got tired of boring level editor stuff I decided to mess around with a particle system for a little while, so now rain world has support for a cosmetic sprite object. The idea is that objects that inherit from the cosmetic sprite class should be strictly cosmetic, meaning that they have no effect on actual gameplay objects and can safely be discarded as soon as the camera leaves the room.



This effect isn't going in the game, just me trying the sprite class out. I'm glad to notice though that an entire room filled with about twice this density of sprites runs smoothly on my computer.





   jamesprimate on June 02, 2014, 09:15:07 AM:

nice! well it certainly LOOKS like something that could go in the game.

re: cosmetic tiles, is this something that would improve ram usage in existing levels as well, say "Colosseum" which has an open top, or is it just for levels larger than 1 screen?





   JLJac on June 03, 2014, 11:58:03 AM:

Yeah, excatly! Like, when a level has geometry that just goes on the same in one direction or another, those tiles needn't be stored -

Hahaha, it seems I've dropped a hundred updates somehow. We're actually at

Update 248
Operation level editor overhaul is progressing. The sub editor for placing cameras is working now, with saving and loading etc. Also the rendering saves one image for each camera, so that seems to be up and running as planned. Somewhere in the process I've broken the light renderer though, so that needs some touching up. Then I'll just need to store some new info in the level text file, and I'll be able to leave the level editor and get back to the actual game. When we get to that point I'll give a slightly more in depth report on what I've actually been trying to accomplish here Smiley





   JLJac on June 04, 2014, 05:16:42 AM:

Update 249
Boring week continues. Today I made the light editor work with the new variable level sizes, and also the light rendering, unless I'm missing something. However I managed to break the loading/saving of light bitmaps I've been attaching to level editor projects in order to be able to paint where each level should have light and shadow. I'm debugging that now.

I'm sorry about this continuous all time low excitement-wise, but the variable level size thing is a big fat chunk of work that is absolutely crucial to making this game work - it has to be done, so I might as well just power through it. I hope to have something to actually show you soon, so hang tight.





   JLJac on June 05, 2014, 12:08:40 PM:

Update 250
Some slick functionality is finally settling into place! This is the state of things: A room can be however big or small it wants to, it's not capped by the screen size. Instead, if a room is larger than the screen, you can place several cameras (all of which together should cover the entire level) and the level editor will render a texture for each such view. The game will then switch between them as you move through the room, making sure you're always visible.

To me this is "one room can have many cameras" but I think that to someone that isn't as engrossed in the technical details as I am it would be "now you can move between rooms by walking out the edge of the screen as well, not only through short cuts".

This whole system is coming together pretty well! I managed to make a 4-screen tower, and climb it with the game switching between the camera positions automatically in a way where I could always see myself on the screen. Because the loading of level textures is unsynchronized there's no hickup what so ever (on my computer) when passing from one screen to another, and you can actually jump on one screen and grab a pole on another without your timing being messed up by the screen change. You will become a little disoriented though, so I'm going to have to make the placement of the screens clever - for example not have them change in the middle of a jump, heh.

I did come up with one little disorientation reducing mechanic I'm very happy with though. When you get close to where the camera will snap to the next position, the camera shifts slightly towards that edge (the textures are slightly larger than the screen, so there is room for a few pixels of camera movement and camera shaking). This means that you're always warned ahead when the game is going to change the screen position, you're never just trotting along and getting completely shocked by a hard cut to another scene. Also, you are given a hint as to what direction the shift is going to be in, which will help you find your character after the scene shift.

When the game senses that you are getting close to an edge of the screen that is open to another screen, it will actually start to pre-load the texture of that next camera position. This needs a little work, for example it doesn't offload the texture when you change your mind and walk in the other direction, and I'm unsure of how healthy it is for the RAM to have the texture hanging out in the background as the game is running. Also the preloading should apply when moving through shortcuts, which I haven't gotten around to yet.

Screens can also overlap, which is in a way a bit more confusing because it defies the age-old game logic of exiting one screen to the right and entering the next from the left. But it also provides more sense of space as you're able to see a few of the objects in the room from both vantage points, making you able to piece the room together as a whole in your mind. The use of this will certainly need to be balanced.

When playing in wide screen, the camera positions will work exactly the same, the only difference being that you get to see some extra pixels on each side of the screen. This means that in wide screen the overlap between screens will be even bigger. I need to do some fiddling with the shader before I get wide screen to work, but once there I'll be able to get a feel for how this whole system works with different screen sizes, and hopefully balance everything accordingly.





   JLJac on June 05, 2014, 12:30:08 PM:

Wish I could, but it's full screen stuff so it's not very convenient for gifs. I think the best description of what's going on is "you can exit a room by walking out the edge of it, and then you'll enter the next room from the opposite edge" - what's confusing is that the way this is achieved technically is that both the rooms are actually one big room, with two different camera positions between which the camera can switch.

Gah, a full long day of coding really doesn't do wonders for your communication skills. Maybe James will drop by and explain what's going on using human words Smiley





   jamesprimate on June 05, 2014, 12:55:12 PM:

yeah basically! a large room or space can now be comprised of several screens which seamlessly transition. we want to preserve the rain world "bunch of connected rooms" feeling, but not be limited by it.

previously, it was a bit hard to show much of world geography or scale, as you'd just pop from one single-screen-room to another single-screen-room, NES zelda style. we wanted a better way to show distance and preserve a sense of the shape of the large objects (rooms, buildings, whatever) you are exploring, but without resorting to the platformer style scrolling screen, which was not an option for a number of reasons.

so this works as a happy medium. it vastly expands whats possible for level design (and the mood we can convey with it), but also preserves the rain world vibe. we'll have to keep an eye out to making sure we don't start doing too many platformery things just because we can though, so call us out for that if you see it. we want it as a tool, not "a genre", if that makes sense.





   jamesprimate on June 05, 2014, 01:59:10 PM:

whoa thats a really good question, and its something we're probably going to be exploring the next half a year or so. this devlog generally tends to be more about the technical side, letting the more artsy / conceptual aspects sort of speak for themselves, but answering this requires a bit of a journey into that bog. (which im more than happy to oblige, as this bog is my home these days!)

from my perspective, rain world is sort of an elaboration on a few themes: ecosystems / scarcity / exploration / loneliness / choices / decay. the experience is interesting because joar has been able to stay very true to this kind of unique, brutal and impersonal world-view in what you've seen so far. i think the underlying idea is that its more intended as a diorama or terrarium ecosystem than as "a game", (yet is still hopefully playable and fun as a game!)

so the challenge is in taking it from the snapshots of this central concept (as suggested by the alpha) and into a full game that is cohesive, with a sense of progression, fully realized world, etc., and not resorting to "bad guy lizard stole your girl/boyfriend, go get them back" sort of thing which wouldn't be true to the central concept.

So to steer this around to answering your question, its almost as if we have to build the world first before designing an area. how much of that world is actually shown is debatable, but the intention is to have the narrative/experience be a result of the game world, and thus the game mechanics. so ideally its sort of like this:

central concept -> game mechanics implied by concept -> world implied by concept/mechanics -> areas and creatures implied by world / mechanics -> situations and scenarios implied by creatures/areas/world/mechanics

if that makes any sense. but obviously we've been discussing, debating and internalizing these concepts for years as RW has developed, so its not like we consult a flow chart or anything. Anyway, I hope that wasn't too much of a diversion and answered some of your question!





   jamesprimate on June 05, 2014, 03:48:50 PM:

I almost hope the hunger meter and other game-y UI elements are scrapped so that organic atmosphere is preserved.

oh i totally agree and those specifically have been discussed a few times. with this rebuild we have the opportunity to completely revisit the UI stuff without the lingo limitations, so heres hoping we can find cool solutions.

one improvement that im really looking forward to is the planned elimination of the "rain meter", which used to show up at the bottom of the screen as a countdown when rain was imminent. now the idea is that were going to have the rain gradually build up from an innocuous light sprinkling to dark skies, to obviously screen-shakingly deadly. that solution comes with its own host of problems too, but hey it sounds damn awesome.





   JLJac on June 06, 2014, 06:56:10 AM:

I'll check that video thing to see if I can upload something!

Update 251
The boring stuff isn't done, but it's functional enough to leave it be a while. I had a little talk with James about where to go from here, and it's probably AI - that's pretty much the main mechanic in Rain World, and the thing that would make this whole thing come alive again.

So, now when boring week is over, we'll briefly stick our heads above the surface before diving back into boring month(s). Those lizard AIs were a horror the last time, and this time around I have less knowledge of the platform I'm programming in (making debugging harder, and oh god is there going to be debugging) so we'll just have to hope for the best hah!

Before that though, some throwables!



And some sprites apparently, I forgot to disable them and stopped seeing them after a while...

The basic physics are already in by default which is why inheritance is the best thing ever, so I've just messed around with the actual interactions.

I have some fun things in mind. Rather than the super simple system we had in the old build, this one has a more generalized system for grabbing stuff that will allow for more interactions. Each creature has a number of grasps - the slugcat has 2 hands, the lizard has a mouth, etc. Grasps can be used to grab objects, and they have their own little mini class which keeps track of the grabber and the grabbee, which grasp is used, which body part is grabbed, etc. Also every object keeps track of what creatures are currently grabbing it. I think a lot of fun interactions can come out of this - such as a tug of war over an item between two creatures, maybe grabbing on to other creatures and "wrestle" them, etc. We'll see where it goes.





   jamesprimate on June 06, 2014, 10:19:32 AM:

so here is a video of the multi-camera thing ROUGHLY implemented, just slapped on to current levels to experiment with:



there are two different ideas being tested in this, :06 is basically two connected rooms and the screen camera just swaps when you exit (with a little overlap) and :40 has the cameras set in more drastically different places, which might be worth considering for future level design.

also at 1:00 there is a test level seeing how multi-room platforming might be (answer: hard.) shows off some of the new limb animations!

(worth noting: this is probably not at all how it will be implemented, just early testing of the functionality.)





   jamesprimate on June 08, 2014, 04:31:40 AM:

Joar will probably chime in with a more specific explanation when he gets back, but as I understand it this camera swap setup is a workaround of some limitations we've run into with unity vs. director/lingo. basically, unity has a much more strict limitation of image size than director/lingo does, meaning that we cant build multiple-screen levels in the way that we want to (ie. as one big ass PNG). our options are that we either have to scrap the current level editor, most current level assets and with it a good chunk of the "style", or we settle for a slightly awkward camera limitation.

it's not ideal, but as rain world was pretty much built around the single-room/screen idea, it probably makes sense to keep that mostly intact anyway, with perhaps some multi-screen levels here and there as set pieces or to show scale, etc etc. so that's kind of what's being shown here. I think once it's being seen implemented on multi-screen levels that were made with this mechanic in mind it'll probably make a lot more sense in context.. but I guess we'll find out that pretty soon!





   JLJac on June 08, 2014, 07:34:22 AM:

Hi guys! OK, so let me give some more context to all of this.

Do you remember the parallax thing I wrestled with a few weeks back? That was my attempt to create the very same solution as you guys are suggesting now. In explanation - the camera should snap to certain positions (in order to give the environments some attention and gravity, rather than just having them be something that's rushing by sonic the hedgehog-style) but it would move smoothly between those positions, and be able to leave them for free movement if necessary.

Enter the Unity limitations.

A rain world level is, despite it not being very evident, 30 layers of bitmap graphics, each displayed on top of each other in order to create a slight 3D effect. You might not notice this much, but it's a huge part of what makes the levels "look good", and you'd certainly notice if it was swapped out for just a regular flat 2D image.

My first idea was to store all 30 layers in one single .png, all on top of each other, and have a shader do a raycast through them all. But Unity limits texture height to 4000 (or 8000 if you want to stretch it) pixels, meaning the largest level size would be 4000/30 ~ 130px, and that won't do. Also the file size would be humongous. Maybe it's as well I didn't manage to do it, a million pixels times 30 cycles might very well have blown my computer up, leaving most of Stockholm a smoking crater.

My workaround, the one with which I achieved that parallax .gif, was to save all the layers in its own .png. This means every level would be 30 files big, a logistic nightmare. Also, the file size, and the fact that all of that data would have to hang out in RAM, made it feel unrealistic as a solution. On top of all this, I was very unsure about how to make the shadows work in such a solution - I would probably have to have each layer draw to some kind of render texture, and that would be 30 full screen copypixels every frame... You see my point here.

Then I started contemplating different bump mapping-like shader ideas, and the notion to write my own file format for compressed 3D textures... The complexity of those solutions were kind of getting out of hand.

So this is when I decided that screw it, I'm going to have the dynamic shadows, but I'll have to pre-bake the levels. The reason why pre-baked levels means fixed camera is that the perspective effect is baked into the 2D image rather than rendered on the fly as in the parallax solution - if the camera moves the lines won't converge at the horizon as supposed to, and it will become very evident that it's a 2D image rather than anything else, ruining the illusion of depth.

About now I started to remember my thinking when working under the pretty bad technical limitations of Director. Back then I was also thinking about a moving camera, but I decided against it. It would eat away at the framerate way too much, forcing me to compromise other parts of the game. I decided that a lot of games had moving cameras, but few had procedural animation and complex AI, so I decided to put my processor cycles and work hours there instead.

Why would I make a different prioritization now, I thought? If I have this one solution that's much harsher on the processor, will take me much longer to implement, will make the size of the game much larger, will force me to compromise other parts of the game etc, what would it take for it to be worth it? In the end I think that the features that are actually unique to Rain World, mostly animation and AI, are the ones that deserve all of those resources.

I know of several platformers that only have fixed screens with hard cuts between them that work perfectly well in my opinion, or have even found a way to stylistically benefit from it. An Untitled Story is one of my old indie favorites that works like that. Maybe if we study those examples, we'll be able to make this solution feel as natural and work as well as they did? Obviously it will take some trial and error, and obviously most of the awkward experiments I threw together in this build won't cut it. But I think that if we put the work in to make it work, it will be preferable compared to the free-floating camera which would look soooo cool, but which in the end isn't really worth it...  Huh?





   JLJac on June 08, 2014, 10:51:42 PM:

Having watched the video, I think your most jarring transitions are the ones where the two screens have some overlap.  For example, 0:10 transition and especially the 0:43 transition. The most comfortable are the ones where the character goes to the full edge of the screen, and then teleports to the opposite edge of a completely new screen.  For example at 0:30.  This is the traditional "flip screen" behavior that many games have had and that gamers are fairly familiar with.

Probably what makes the first type bad is that it is unexpected.  With the second type, as I approach the edge of the screen as a player I know something has got to happen, since before long I will be off the screen entirely.  The player can anticipate the event.  And the player knows where to look to find their avatar on the new screen, since there is a consistent behavior.

Watching the tower ascent starting at 1:00, it actually works pretty well.  The rule of predictability is maintained, and the small overlap between the screens (usually it's a horizontal bar that is visible on both) seems to work well. (Though, the small camera movement right before each camera switch seems unnecessary and weird.)

However, in my own game I started with flip screen and later added a sliding transition, similar to what one sees in zelda.  I feel this is actually superior since the player is able to watch their character the whole time, and there is a short time period where the player input is disabled (during the transition) and this allows players to let go of the controls, or get ready to start moving, after they have already seen the new room briefly.

Your choice on the last point though, as many good games have used flip screen and players can easily cope with it, as long as it is done in a consistent way.

Very good points all of these, and they generally line up with my experience as I've been trying these systems out. I think the best would be to have it switch when you reach the edge of the screen horizontally, because then you expect it to switch. The main problem here is that we're supposed to support both wide-screen and non-widescreen formats...  Who, Me?

4000 (4096 in fact) isn't unity limitation, it's the physical limit of gpu's shaders, also might not work on all card who don't accept such large texture. You should look into things like virtual texture techniques to know how to handle arbitrary large texture (amplify use something like that).

There is certainly way to do it since there is many unity 2d game that does the heavy large large levels. Maybe rendering everything in a single shader is not the best solution? Try to post about it in unity3D forums!

http://forum.unity3d.com

Set a thread in showcase too, maybe unity themselves will propose to help, it happens.
I was having a problem with an extremely large texture myself once. I was using a big sprite sheet (2080*1280) with 160px*160px pre-rendered 3d sprites, and I bound the whole thing to a single texture using OpenGL, but it wouldn't work on older computers. So yeah, it's a GPU thing. The solution was to cut it up into individual textures after loading. Perhaps you should do something similar? 512x512 chunks drawn in a grid?

Yeah, I could just cut it up in smaller chunks. That wouldn't help with the enormous files size and RAM usage though. Plus the dynamic shadow issue, etc. The situation isn't really that I can't make it work (you've seen the gif, I did make it work already  Wink) as much as that I don't think it will be worth it. On the one side we have a cool transition, on the other we have a huge work load on the processor, on the gpu, on me, a huge increase in file size and RAM usage, a terrible logistic situation with 30 files per level (or more, if I cut them up), the possibility that the already implemented dynamic shadows would have to go, etc.

The dynamic shadows are visible all the time - the smooth camera movement would only be visible during very short intervals. It would still chew framerate all the time, though.

That said, 30 layers? H-How? Do you have a single background element, like a chain, on each layer? If so couldn't you save such things as a sprite and set their position and depth through a map script on load? Or is it more like 10*(texture map+depth map+normal map)?
Think of it more like a voxel matrix, or a 3D texture, and it makes more sense. Then each screen would be 1400*800*30 pixels. I guess that to most people the game looks very 2D, but if you look closely at some screenshots you'll notice that on the left side, you can see the inside of the wall, and on the right side too. That's the perspective in action. So the game is slightly 2.5D, perhaps.

If I were to make everything separate sprites, the main problem wouldn't be chains and plants etc (though even those alone wouldn't really amount to 30, they'd rather be in the hundreds) but the fact that a standard tile is 10 sprites on top of each other. A standard level will have something like 7000 tiles in it, so that'd be 70 000 sprites, chains not counted  Epileptic

Gah, you guys make me want to go back and try to solve this again! I'll talk to James though, maybe it will get a re-visiting but I should probably make some actual game mechanics before I dive too deep into the cosmetic stuff. In either case this latest big update has brought dynamic level sizes with it, and that will always be a necessary feature, no matter how we chose to display it  Smiley



A quick question to you programming people out there - is there a rule of thumb to what is best, saving data or calculating on the fly?

Currently I'm working with an AI map, a class that's attached to a level and which can be asked by AI entities for necessary information concerning specific tiles. Such information could be if the tile is a floor(on top of a solid tile), or if it has any special paths (don't know what to call them, a special path would be for example "if a creature drops down from this specific climbable tile, it will land on this specific floor tile"). In short, these queries will require asking neighboring tiles for their properties.

Now I have two options - either I save all this information to the tile map on loading the level, or I calculate it every time I'm asked for it.

I understand that this basically is a decision between burdening the processor or the RAM, but maybe the burdens would be drastically disproportionate in favor of one solution?





   jamesprimate on June 09, 2014, 11:32:51 AM (Last Edit: June 09, 2014, 11:41:58 AM):

hahah, but this is all "re-do literally everything about the game to make this one camera mechanic smoother"

im pretty confident that once this solution is seen in the proper context it will look just fine. we'll see!





   JLJac on June 09, 2014, 11:46:38 AM:

Thanks guys! I will go harder on the RAM than the CPU when all else equal from now on, then.

On the parallax thing - yeah, that gif Zaphos posted. You can kind of see how you can't really bake that together into just 4 layers or something like that - it's not the classical "some mountains at different distances," rather it's a voxel-like solution compromised of parallax layers. Rendering each tile by itself wouldn't really be feasible even if the 70 000 sprites were to work - the effects such as erosion are applied to the image as a whole, not to the individual tiles. In fact the effects are there for just that reason, to make the tiles melt together into a whole.

Making the game actual 3D is theoretically possible, but I want to use the same level editor and assets as I already have. I really like the look of it, more perhaps than actual 3D. And as James says, that would be like making another entire game from start again, pretty much, this time with a technique I'm totally new to.

So...

In honor of my habit of jumping between different task like a 4 year old, we now give the parallax some rest in favor of AI!

Update 252
I now have a class for mapping the shortcuts of a level, and for doing the AI map. This is a good healthy step forward, as the AI map is the foundation of the path finding the next thing I can start with (after setting up a lizard entity, which is a pretty small task) is actual path finding code. From there on everything will become inferno, but let's not live tomorrow's sorrows.



This AI map has most of the paths the lizards will use, though not the pup-specific paths such as horizontal jumping, though that's easily added later. The tiles are color coded according to a hierarchy, floor(green), vertical corridor(yellow), pole climbing(pink), wall climbing(blue), and ceiling climbing(red). The beauty of this hierarchy is that it's a linear increase of difficulty of terrain, any creature that can be in a pink tile for example, can also be in a yellow or green one. Ceilings and walls are reserved for the sticky toed breeds of lizards.

The little dots represent paths that can be taken by different creatures. The little red ones pointing downwards for example symbolize that from here you can drop down and land on a floor. Pink downwards dot means that from here you can drop down and grab hold of a pole mid-air, if you're a creature with that kind of agility.

As you see, this map limits the areas the path finder has to handle - there are few big open chunks of tiles where the path finder would chew away more slowly.

Oh, and the mapper classes. What's cool about those are that they are asynchronized. In this version we're playing with the idea of split screen coop, and that means that as one player moves from one room to another, the show still has to go on for the other. We don't have the luxury of pausing everything and wait for it to load.

Instead, when you start to enter a room these mapping classes will fire, and work in the background. As soon as they're finished they serve their room the product of their work, and the reference to them is nulled so they can be disposed by garbage collection. There will still be a small pause for the player moving from one room to another (unless I come up with a clever preloading system) but the other player can keep playing.





   jamesprimate on June 09, 2014, 01:19:43 PM:

seems like people are getting a bit wrapped up in the mechanics of the 3d implementation rather than what it would bring to the game (this game, rain world). ie. not much.

im sure everyone would agree that one of the most recognizable elements of rain world is the very unique art style, which is in some degree a direct result of the tools and methods being discussed right here. so changing all that, plus all the current tools assets and work, simply because there are other possible solutions to one very minor problem doesn't seem remotely reasonable. totally throwing the baby out with the bathwater. it would literally be making a completely other game.

has anyone ever said "this game sure is great, specifically because of those half-second transitions between screens"? i suppose its possible, but i certainly haven't said it.

anyway, i hope that doesn't sound too defensive. obviously all this feedback is super important (and please continue to do so!!), i just want to keep Joar from getting too bogged down defending technical choices made years ago that are now fundamental aspects of the game. cuz he's got a looooot of other work to do!  Screamy





   JLJac on June 09, 2014, 11:08:03 PM:

I will go harder on the RAM than the CPU when all else equal from now on, then.
Just want to re-emphasize that this is oversimplified advice ...

Accessing your RAM can cost on the order of ~100-300 clock cycles if it's not already in your L1 or L2 cache.  You likely have >1GB of ram to work with but maybe only ~256kb of L2 cache per core.  If you precompute a lot, you need to consider how you access what you've precomputed, as that determines how often you'll get cache misses when accessing it.
Tell me more! Do I even have that kind of control in c#?

@Lee, given that Futile uses polygons to display the sprites, what would be the big difference between my current setup and "2D texture planes"? In Zaphos gif you see 30 2D texture planes, essentially. If you're talking about having pixel art textures and make actual 3D models I'm pretty confident I don't want to do that, both because of the mentioned reasons and because actual 3D models would change the art style. I think the current art style goes better with the characters, and wouldn't want to change it for 3D.

When it comes to tile based approaches, I'm not too keen on those either, as the very point of this visual experience is that everything should be molten to a mess. If you guys can see potential to cut it up into tiles, that means it's not eroded enough!  Wink

The main point here is that the 30 layers are here to stay. I could perhaps cut them up into smaller pieces or something, but the basic issue that the file sizes would be huge and the implementation nightmarish remains.

I know for a fact that it would be considerably heavier performance wise, if I do it as separate sprites, as a shader, or whatever solution I come up with. And I also know that I would prefer to put those extra processor cycles towards AI and actual gameplay aspects rather than a very superficial cosmetic. With stuff like parallax scrolling people tend to go "ohh, cool" the first time they see it, but it wears out pretty quickly. Being able to create a greater diversity of gameplay scenarios (15 lizards in a pit or something) seems more worthwhile. So while I'd like a moving camera, I kind of don't see how it would be worth it, especially as I think a static camera could be made to work.

That said, I might very well try to implement it some time along... Especially if we do split screen, the cameras will have to scroll either way, and then it might become worth it to really go that extra mile to make it look good. As you've probably noticed I'm not very focused in my work, I jump back and forth and return to stuff every now and then. Because I'm the only developer I think I should use the luxury to be able to work like that - and also it might make the devlog a little more entertaining. So if I get a sudden idea, or if someone presents the perfect solution, I could jump back to the parallax any day.

Oh, and don't censor yourself, the idea of the thread is to talk to people with ideas and opinions!





   JLJac on June 10, 2014, 05:00:09 AM:

Maybe for the path finding it would be fun to try? The A* is a bunch of lists of countless very small, possibly value-type data structures, so it might be fitting? I have to admit though, I'm still not entirely sure how to identify a bad implementation from a good one, and I have no idea how to test if I've succeeded, so I'd basically be working in the blind. Is there are profiler that can count cache misses in specific parts o the code?

Ok, so let me give you my idea on how I think this works and you guys can tell me if I've gotten it right.

Let's say each tile in my pathfinder has three values, int generation, int value and bool reachable.

Instead of the OOP approach, where I'd create a struct
Code:
public struct PathingTile
{
  public int generation;
  public int value;
  public bool reachable;
  public PathingTile(int g, int v, bool r)
  {
    generation = g;//by the way, is there anyway I can assign those right away to the  construct params rather than having to have those useless little intermediate variables?
    value = v;
    reachable = r;
  }
}

and then do an array populated by those

Code:
public PathingTile[,] aiMatrix = new PathingTile[50, 42];

and repeat over it for operations

Code:
for (int i = 0; i < width; i ++)
   for (int a = 0; a < height; a ++)
      DoThing(aiMatrix[i, a]);

I'd do it differently. Maybe something like this:

Code:
public class PathFinder
{
   public int width = 50;
   public int height = 42;

   public int[,] generations;
   public int[,] values;
   public bool[,] reachables;

   public PathFinder()
   {
       generations = new int[50,42];
       values= new int[50,42];
       reachables= new bool[50,42];
   }

   public void Update()
   {
      for (int i = 0; i < width; i++)
         for (int a = 0; a < height; a++)
            doGenerationThing(i, a, generations[i, a]);

      for (int i = 0; i < width; i++)
         for (int a = 0; a < height; a++)
            doValueThing(i, a, values[i, a]);

      for (int i = 0; i < width; i++)
         for (int a = 0; a < height; a++)
            doReachableThing(i, a, reachables[i, a]);
   }
}

Do I get it?





   JLJac on June 10, 2014, 09:34:55 AM:

Update 253
A reasonably good day! Got a placeholder path finding class down, called "quick pathfinder". This one doesn't really have all the cool stuff as the final AI pathfinders will, but it has allowed me to test the concept.

The actual AI is going to use a persistent map and overlay path searches on top of each other continuously (more on this when we get around to it) while this class is just given a start position and a goal position on spawn, and then works with trying to find a path between those. For the real AI my sense of tidiness would never allow spawning an object like this each time I want a path just to throw it away later, and it isn't good at doing dynamic path finding with both the goal and start positions moving as it works. Rather I plan to have the game use this object to analyze if it's possible to get from one point of the map to another, which will come in handy for some things I have in mind for later.


(trying a new image service here, hopefully the pic will stay up)

As you can see, this object too works over the course of several frames. The only thing it has accessible to other objects is a status integer, which can be 0(working), 1(path found) or -1(finished, didn't find a path) and a function that if applicable retrieves the path as an array of tile positions.

It can also work within a single frame, then it's just a matter of looping until the status isn't 0 any more. The next step is to be able to feed it a list of accessibility info ("I can't climb on walls, please give me a path that doesn't require that").

Oh, and those jumpy things are the lizards! Albeit under construction... Intimidating though, aren't they!? Who, Me?






   JLJac on June 10, 2014, 12:41:59 PM:

Ah, of course, I should've figured! Because it's basically an array of arrays, right? And now I load an entire row just to get one column tile, and that's not very efficient...

But if I use a singleton I won't be able to spawn a bunch of these babies and have them work in the background during runtime, am I right? Then it would all have to happen withing a frame, and if the level is big and mazelike that frame might take a while!





   JLJac on June 10, 2014, 11:03:24 PM:

Does this have to do with multithreading? o_0 Talking of which, should I perhaps use multithreading for something? Like mapping the levels, or pathing? It seems like a waste to have all these processors just sitting there... But I figure the compability between different hardwares would take a hit.

Thanks for the AWESOME a* link! For my game I need super control of the pathfinding, as the AI taps into it quite a lot it can't be as encapsulated, so I won't use this code as is. That said, reading the code is extremely interesting. It seems the implementation is in fact very similar to mine, which maybe isn't that big of a surprise seeing how A* is pretty tried and true. But he does some things that are pretty awesome - for example he doesn't use a multidimensional array, instead he uses a linear one and fetches the right position like this

Quote
arrayIndex = thisX + (thisY + thisZ * worldTotalY) * worldTotalX

which I guess would be because of the cache optimization thing you guys mentioned earlier?

Oh, and he doesn't store the open nodes as a sorted list, but as a heap. There's something here I'm not getting, as he doesn't seem to keep track of the already evaluated nodes, instead he just have the linkage mechanic of the heap structure organically flow over into creating a linked path somehow... Soooo cool.





   JLJac on June 10, 2014, 11:38:43 PM:

Pathfinders! Hand Shake Left Cheesy Hand Shake Right

Yeah, I deciphered the heap now. Damn, this thing is elegant. It's OK for me to use some of his methods, right?





   JLJac on June 11, 2014, 02:10:51 AM:

I can draw from this, but because of some rain world specific stuff I'll have to do a hybrid solution that's not quite as lean as this is. For example I'll have to use an integer array rather than one of bools, and a few other tweaks to accommodate for slightly more complex stuff going on than just tile-by-tile, equally weighted, pathfinding. I'll get into more detail when I do a proper update.

It was a super good source of inspiration. Especially the idea with the heap, which I wouldn't have come up with in a million years. Thanks  Smiley





   JLJac on June 11, 2014, 06:09:52 AM:

@dancing_dead, do you have the email of the guy? I think I found a bug.





   JLJac on June 11, 2014, 11:16:12 AM:

Yup, sent him an email!

Sorry people, no proper update today. I spent all day fighting with an A* implementation, and finally found the bug, so that's good. The pathing algorithm can now be fed different preferences, such as ability or disability to climb walls and the like, and find paths according to those. This was substantially harder to implement than I thought it'd be, mostly because of the little bug that gave some weird unpredictable results and took quite a while to identify. More exciting stuff tomorrow!





   JLJac on June 11, 2014, 11:35:15 PM:



Surf's up!





   JLJac on June 12, 2014, 08:27:06 AM:

Thanks! Smiley

Update 254
Pathfinding continues! It's a bit frustrating, because it's very hard to write about my progress when it comes to pathing. Like, half a day might be "it seems to prefer using a ledge drop here, even though I told it to use a climbing connection. Is this because the heuristic is wrong, the sorting algorithm, or because it disregards the sorted order all together?"

Excitement!

Today though, I have made some pretty cool progress. I now have a class called "Creature Template", which holds a few data points about a specific breed of creature and which is accessible from anywhere in the game. The creatures defined right now are Slugcat and Lizard, and at this point it only holds some pathing preference info on them.

Still, this has some potential. An example - today I made one implementation of what I call a "connectivity mapper". It's a thing applied to a room - it goes by every entrance to the room times every other entrance to the room, and pretends to be each of the creatures drawing their data from the creature templates. Then it paths between the entrances using that creature's pathing stats (can I climb on walls or not? Do I prefer climbing to running?) and decides if that path is traversable, and saves its cost to an array.

The result - for any room any creature can know if it's able to pass through it just by doing a quick lookup. My idea is to use this in particular for abstracted creatures moving in offloaded areas, but more on that when I get to it.

This isn't the only thing the creature templates can be used for though. Anything that might need to be known of another creature that's common to its entire breed can be accessed through this generalized system. For example I could hook each creature template up with a list of "prey creatures" and "predator creatures". Then when a creature encounters another I wouldn't have to make a hardcoded event for their interaction, I could just have the creature ask "does this species eat my species" and if so it can initiate a fleeing behavior.

I hope for it to be a huge asset when working with AI, as in decision making AI, not just path finding. In an encounter a creature could easily check if, for example, another creature is able to fly or not, and make decisions based on that.

Creatures could be assigned tags such as "poisonous" etc.

The main difference here is that instead of everyone just having their individual stats, the species themselves are entities.

So that's cool! Now back to path finding!





   JLJac on June 13, 2014, 09:34:41 AM:

Decision making AI and pathfinding AI have probably been the two most demanding task technically, though I doubt they'd be overshadowed by the staggering amount of hours that has been soaked into everything else combined... Why?





   JLJac on June 13, 2014, 11:06:58 AM:

Yeah, they probably took more time than any other identifiable "things", though that still wouldn't be enough to make them the majority of the time spent as there are in fact many many more "things" than you'd expect. Making the menu work, saving and loading levels correctly, making UI for the level editor etc etc etc are all tasks that have taken a lot of time as well!

Update 255
Speaking of which, we're in the middle of one of those kind of tasks right now! What I'm currently doing is setting up the very framework for the rain world - a bunch of levels that are interconnected. Today I managed to load a world structure from a text file. This I hope will make it easier for me to do changes, and also helps me separate data and functionality in a way I wouldn't be able to if I just built the world by having a bunch of commands and hard coded level names in the actual code.

So basically there is a World class, which has an AbstractRoom object for each room that exists on the map. This is a very simple little object that basically only knows what other rooms it's connected to and what its level name is - the level that will be loaded if the player enters this room.

What's the purpose of this? It's that now the entire world "exists", though in an extremely abstracted form, even if it's not currently loaded. Rooms that are off screen can be asked for basic properties, such as what other rooms they're connected to. Also, each of this AbstractRooms have a reference to an actual loaded active room, though most of them will just be referencing null most of the time. When you exit the room you're currently in an enter the next one, the game will fire up a new room object according to your new world coordinate, and place you in it. Eventually I'll want to unload rooms after you exit them as well, but I'll get to that when I see how much of a memory concern it actually becomes. I think it would be kind of cool to have the rooms live a little while after you've exited them if there are creatures in there, so you can go back and see that events have been happening.

Soooo... weren't I supposed to make pathfinding AI? Yeah! I'm just preparing everything for when I get into some serious A* implementations. Without breaking the policy of not telling in advance too much I can at least say that I want the creatures to be able to take other rooms than the ones they're currently in into consideration in their AI - that's why I need to create the world they're to move through before I get down to actually making them run around.

Today the first step has been taken to putting the World in Rain World, so that's a pretty huge improvement even if the game looks and behaves exactly the same as yesterday. That's the kind of thing you learn to appreciate as a programmer, I guess Smiley





   JLJac on June 16, 2014, 12:21:09 PM:

Update 256
This week there's some family stuff going on, so I'm in a house with other people  Crazy. This situation doesn't really lend itself to the super deep concentration I need for path finding stuff, so instead I think I'm going to do some art.

Today I did some experimentation with Rain World "plant life", or whatever you want to call it. Not at all sure if all of them will go in the game, but it's a lot of fun to play with different shapes and ideas.














   jamesprimate on June 16, 2014, 01:45:13 PM:

ohhhh i love all these. id say "especially the gross slug ones", but theyre pretty much all gross slug ones XD





   JLJac on June 21, 2014, 01:46:34 AM:

Hi people! As you might have noticed it's a bit quiet here this week - I'm attending a family gathering. I just wanted to let you know I'm alive, and we'll be back to daily updates monday! 





   JLJac on June 24, 2014, 08:21:03 AM:

Update 257
I've been doing a bit of animation work on the spears and stones. In the Unity version the framerate is potentially very high, and I find myself wanting to account for that - ie I want things to snap between positions and rotations as little as possible but instead have them move smoothly. One way to check if I'm achieving this is to look at it in slow motion. There shouldn't be any jumpy movements even when played at 1/20 of the speed, is the philosophy. This is intended to give that extra little bit of crispness to the animation even when played at normal speed. All of those frames will be displayed after all, and if they are all smooth that'll probably add up to an impression of general smoothness even though you don't perceive the individual frames.

Here's a spear being thrown in regular speed and in slow motion.



Note that there's no animation work what so ever done on the slugcat for throwing, only the spear. Obviously we're gonna want the slugcat to really lean into the throw later on. Right now it looks like the spear is throwing itself  Huh?

In other news, the pathfindingpocalypse has begun.



I have a few ideas for path finding in general, that I want to get into a big base class to be used by all the sub classes later. The most important of those ideas is this:

You guys remember how I made something that could map the connectivity between different exits in a room, right? Here's the deal - using that data, the path finder can consider paths through offloaded rooms. In each offloaded room (or abstract room, as I call them in the code) I place a path finding cell for each exit. Key is that it's not one per room, but one per exit. The idea is that the path finding algorithm will be able to check for viable paths through the offloaded world by using these cells, and the pre-calculated data of how difficult it is to get between them. When the pathing creature is in a room, and that room is loaded, a high-res pathing map with one cell per tile is created for that specific room. These pathing cells are the same class as the ones in the world map though, and they are hooked up to the world map through the exits.

So, the idea is that this system will allow creatures to find paths through loaded and offloaded rooms completely seamlessly - there won't be a separate system for path finding on the world map or in the local area. At the same time, the world map will be grossly simplified compared to the local area, making it way easier on the processor and RAM, but providing the same paths as if all of the world was loaded and taken into consideration at once.

Wish me luck.





   JLJac on June 25, 2014, 08:02:52 AM:

Update 258
Pathing is coming along nicely. I'm not not making amazing progress, but I'm also not spending all of my time hunting bugs - it's just trotting along. I have spent some time writing debug functionality though, such as the little dots showing what's going on.

Don't really have much to show as this work isn't very visual - but this is what lizard pathfinding looks like as of now.



What I'm happy about is that it looks like I'm going to be able to make a huuuuge part of the path finding code shared between creatures. Ideally I'll be able to have everything in the same class, and only outsource a few things to creature specific path finders. Those things would be, for example, questions of what moves are legal and what number of cells the creature requires per tile (which would be 4 for lizards and 1 for everything else).

Also I've been able to make the path finder tap into the template creatures I talked about earlier, which is pretty cool. This means it can be given a creature template to path as, and it seems to be working. For example in the above gif you see some wall climbing attempts, but no flying, which would be present if the path finder was instead hooked up to the "fly" template.

The reason why I'm doing this super generalized system is that I hope it will allow for more creatures later on. If I get this right, we might reach a point where adding a new species to rain world is easy - I'll just fire up a new template, write the path finding rules and AI stats, and the creature will be alive and path finding dynamically through the world according to its own interests. Seems far away, but we'll get there!





   JLJac on June 26, 2014, 07:42:02 AM:

Update 259
I made a little obstacle course consisting of a few rooms to test the path finding in, with a few tricky mazes and other situations I want to try out. Some of the tricky bits are things like having to go through another room in order to get from one place in a room to another, and rooms that have completely non-connected areas that can only be accessed from other rooms. Before I get around to try those things out I have to get creatures moving within the room, though  Cheesy

Path finding is very slowly, but also kind of surely, moving forward. Today I made a method that checks if a movement between two tiles is legal. The method is outsourced to the individual creatures, and can take weird preferences such as the lizard's aversion for moving backwards into account. I don't quite know if it works yet. It looks like it from the colored dots, but when the lizard is supposed to follow the path it doesn't really behave as I want it to.

I gotta say, my biggest concern with this Unity/C# thing is becoming more of an actual problem when doing complicated stuff like this. I still after learning them don't think my debugging tools can compare to what I had in Director. In Director, whenever it threw and error, it would automatically open the code to the place where it happened, and allow me to look at all the parameters in that object. Here I can just use the debugger to set a stop point, but even then the debugger isn't half as good. I don't get a list of every relevant parameter by default, I have to write their names letter by letter in a little box to see their values. If their values are references to objects, I can't click them to go into that object, which means that if you have an architecture where you divide tasks over many different classes the debugger quickly becomes useless. I can't even view the contents of an array. There's no console where I can try little snippets of code, call methods in my objects or ask for parameters to be traced. In Director I could use the console as a calculator (how exactly does the modulus function work, let's try it quickly in the console) a convenience that I find myself missing. In the end I pretty much only rely on the Debug.Log method for debugging, which clutters my console horribly. Any tips on better debugging equipment?

From how I understand it I can't use the Unity debugger, as the objects in the game aren't Unity objects. Even the profiler doesn't seem to recognize my different methods, it just puts one fat list item for "Rain World Game"  Huh?

Despite this stuff being slightly frustrating, I'm making progress. I think I'm sacrificing a little bit of performance in the path finding in the sake of making it general - but that's in line with modern game development from how I've understood it. The computers are fast enough, the logistics of writing the code is oftentimes more important.

That's the good news though - the pathfinding seems to become very generalized and customizable, more than I had dared to hope for!





   JLJac on June 26, 2014, 09:13:28 PM:

Oh yeah now that you mention it I totally did notice the locals tab, just forgot about it while writing my rant. I didn't find it until much later than what would be awkward to admit considering it sitting right there, so I did spend the majority of the time typing and mistyping in the watch tab D:


Thanks a lot for the links! Checking them out now Smiley





   JLJac on June 27, 2014, 06:58:22 AM:

Thanks! I'm glad someone isn't dying from boredom haha!

Update 260
Pretty nice progress! The lizard path finding algorithm seems to be basically working! It's only implemented for a weird flying lizard with no gravity and like 50% air friction, none of the lizard moves (reaching across a gap, dropping from a ledge, turning around) are implemented, the path finding can fire once only and then the game has to be reset, etc etc etc. But it seems like the very basic functionality of saving the path finding matrix as a 3D array and having the third dimension represent direction is down. I've been able to place the lizard in a corridor and ask it to path to behind it, the path finder passed the lizard without it moving, made its way to a point where it could turn or move around something, got back to the lizard, and the lizard started to move. It's able to follow the paths pretty decently, though there is some getting stuck going on.

When the lizard path finding is done, every other path finding is going to feel easy in comparison. The lizard path finding is complex on a level where I can really feel the limitations of my mind, I simply don't have enough working memory to hold an entire situation in my head at the same time. When it gets to that I have two standard solutions. One is to not think but just mess around at random, which never gets me anywhere. After an hour or two of that I resort to the other one, which is bringing out pen and paper and thinking REALLY HARD. It's a weird feeling out there on the edge of one's cognitive ability - you'd imagine that sitting on a chair and thinking couldn't be very exhausting, but it's actually super unpleasant, like working out without having eaten enough beforehand. I have a bunch of coins on my table which I find myself stacking and unstacking over and over instead of focusing on what I'm supposed to.



The trick to this stuff was that it needed to have slightly different validity checks for paths when creating them and when following them, which probably has to do with the fact that the paths are calculated backwards. If I create the scenarios on paper as above and run them backwards and forwards I can see the problems and correct them, but I'm unable to really comprehend and summarize what's happening, which is frustrating.

Despite being a bit unexciting, this week has been very productive! If the rest of the path finding stuff isn't significantly worse, we're better off than I'd thought.

Have a nice weekend!  Smiley





   jamesprimate on June 27, 2014, 12:54:48 PM:

spot on! youve intuited a bit of what were going to be going for as far as implied / unforced narrative stuff.

its an interesting scenario, because exactly as you say there is a built-in game mechanic that is fairly simple (and fun!), yet has a large amount of possibilities as to how things could potentially play out within the open world were trying to create. we dont want to limit a persons play options to one narrative path just for the sake of "Telling A Story" because you would feel that artificiality, like bumping up against a glass wall: "I want to go here, but a big blinking arrow is telling me to go there." That sort of thing we really want to avoid. So it'll be a matter of baking the potential for scenarios into the structure of world itself and letting the player find their way through that (if they like) by whatever means they can.

We don't want to get too much into specifics (in fact were being pretty secretive about it), because a lot of the fun will be discovering how this happens. Very good question though!





   jamesprimate on June 27, 2014, 05:55:21 PM (Last Edit: June 27, 2014, 06:03:26 PM):

now i wouldnt say that we are thinking specifically of discovery as one of the main attractions of the game, but as one way the game *might* be played. there wont be much in the way of blinking arrows forcing you to search through this or that region, so potentially a person could "successfully play the game" a number of times in a number of different ways without ever feeling the need to explore certain regions (or likely even being aware of some of these regions existence!) thats kind of the idea anyways: a large complex world where "the narrative of this slugcat" is just one meandering part. choices will also play an important role, so its even possible that going one direction might make going another direction impossible (or at least very very difficult), one potential action vs another action, that sort of decision tree stuff. these may be pretty subtle too.

this touches a bit on replayability, and again i really dont even want to even allude to too much here because holy cow spoilers, but the idea we are working from in that regard is that aspects of the meta-world and game mechanics might evolve depending on how the player chooses to play the game, so perhaps on the second play-through the world might be ready for your bag of tricks. were thinking of replayability as fairly central aspect, and even having it being tied into the mechanics of the multiplayer.

but this is all quite a bit far off though! as you mentioned before, were still in the nuts and bolts for quite a while yet  Droop





   JLJac on June 30, 2014, 08:00:52 AM:

Your ideas line up very well with what we've been talking about, so I think you won't be disappointed Smiley

Update 261
Path finding path finding path finding. As I said, this is not going to be quick and easy. Made some progress though - now the embryo of an automatically updating destination for the path finder is in. My goal is that I want to have the path finder completely self-contained. In the end the AI should only need to tell it "I want to go here" and get a very simple response consisting of a statement as to if that's possible and if so what direction to start moving.

I've been thinking a little bit about threading. After looking at a few tutorials I don't think it looks sooo complicated... The idea I'm toying with is putting the path finding in another thread. It would be so very cool to have that basically for free - it would mean much more freedom when it comes to amount of creatures on screen, and would free processing cycles for other stuff such as animation. Also it would make gameplay more fun as the enemies would have faster reaction times...

So I have a few questions about multithreading Smiley
1: From how I have understood it, many threads can access the same working memory. The problem with this is that a field might get changed as you do an operation on it, which is where locks come into the picture. My path finding consists of a huge map of cells per creature. If the path finding thread would only write to this map, and the main game thread would only read from it, I would theoretically not need to worry about locks, right?
2: When creating threads, are those automatically placed on vacant processor cores if available, or do I need to manage that somehow?
3: Threading surely brings compability issues, right? Feels like it would.

The other big project of the day was to install Visual Studio to try it out. Something I ended up doing no less than 5 times! I now have like, infinite versions of visual studio and trials on my computer :/ Express doesn't want to hook up with Unity because it doesn't allow extensions, so then I got trials for the pro version (2010 and 2013) but then there were problems with migrating the project... Hm. Having tried nothing but monodevelop and freaking Macromedia director I don't find monodevelop that bad, but people say VS is better, and from the very little I've been able to try it - yeah, it seems really cool.

Then I ran into a price for the pro version if you didn't have any version already, which was at $13 000, which obviously scared me senseless. And then I also saw a thread somewhere that said that if you're developing commercial software on a trial version, you are in trouble. So I haven't really dared to try it after that, frankly. Am I too paranoid? Should I give the VS trial a go?





   JLJac on July 01, 2014, 03:32:25 AM:

@dancing dead, thanks a million for the bizSpark heads up! Applied this morning, just waiting for their response :D

@visuar, hi and welcome to the forums! And thank you so very much for your help! Ok, so concern #2 and #3 are not that bad, but with the locks I should take it pretty seriously? I think it would be fine as the reading thread would not read very often, so I don't think the threads would keep each other waiting much. Learning locks it is! I think my approach will be to first just make the pathing work as it did in the old game, then try to migrate it to a multithread solution. It's hard enough to debug etc as it is, so it would be useful to have it at least somewhat working before I bring that whole threading thing into the picture.

Update 262
Today learnt a little bit more about how the monodevelop debugger works while trying to hunt down some weird pathing behavior. It's not as bad as I made it sound, obviously - there's a ton of cool stuff I didn't consider back then because I didn't know it existed. Still in the process of learning it all - Step over, step in, step out. It's not all good though, some stuff still annoys me. I can't seem to examine the contents of a list where the instances are a custom class for example, and it annoys me that a super simple struct such as a Vector2 has to be clicked to have its contents viewed - there has to be some simpler solution. But the more I learn the easier it is.

Also did a thing I should've long ago, a mouse pointer object that displays the mouse position and what tile it's in. I've been putting that off forever, but now I finally took the 15 minutes and did it, which is going to be a huge headache releif in upcoming bug hunting.

Apart from all this debug stuff, I've done some actual work on the path finding algorithm as well. I've reached one of those road forks where you have to pick which problem to start to solve, and with which solution, and it stalls you a bit. In the end I will have to solve all of them though, so I might as well just pick whichever and get started, head first.

In slightly more exciting news I had a bunch of lizards path find at the same time, and it seemed to basically be working. Except it wasn't because the lizard animation/behavior isn't even started on, meaning they're just limp socks being pulled around by the head by a magical force. Meaning that if a bunch of them tries to squeeze into an opening at the same time they get hopelessly stuck. Or if one of them tries to get up or down a slope it gets hopelessly stuck. Or if they try to use a shortcut... they do, indeed, get hopelessly stuck.

When it comes to, for example, creatures getting stuck I tend to resort to cop out solutions such as making them shake around after being stuck for a while, hoping to end up in another not-as-stuck position and angle. Those solutions are nice because they end up saving the day despite the problem being sort of undefined, but this time I will really try to rely on them as little as possible. In the old game I had a mind set where I was always going to release the game in the next 2 weeks, so when I encountered a bug I quite often covered it up like that. I'd cure the symptom rather than the disease.

So say that something was slowly moving to the right but wasn't supposed to, I'd just add a slow leftward force to it and call it a day. Obviously that becomes a huge problem when you don't release the game two weeks later, but these quick fixes start layering up instead. So, this time around I will keep that stuff to a minimum. It will take longer and be more annoying, but the code will be better and most importantly more dynamic. All those little quick fixes tend to act like a layer of rust on the mechanics - they're not in the way until you try to change something, then nothing works and you have to hunt them down and scrape them off again. So, this time I will really make an effort to actually solve the problems, exhausting as it may be.





   JLJac on July 02, 2014, 07:39:44 AM:

Update 263
After getting the path finding to a state that could basically be considered "working" yesterday, I decided to take it to the next level today.

This idea was applied to the pups in the old build, but this time I wanted to generalize the concept so it'd be available to all path finding creatures.

Now the path finder is able to find paths that are not actually possible for the creature to follow. Why? Because sometimes you might want to have a behavior where a creature gets as close as possible to a certain place, without actually being able to reach all the way there. An example would be a pup trying to follow you, but there's a gap which it's unable to jump across. Then you want it to walk all the way up to that place where it's unable to get across, and then wait, rather than just not moving at all because the path finder tells it it's impossible. Another example would be if you're on a platform and there's a lizard under it that isn't able to get up to you. In the old build the lizard would just forget about you, but with this functionality it will still try to get as close as possible and hang out in the general area, despite actually getting to you might be futile.

The system also allows creatures to know whether the path they're following is actually going to get them to the goal or not. This info will be usable to the AI - say that you have a lizard camping out under a platform with a player and another player shows up, just next to it. Then the lizard will be able to prioritize the player it actually has a chance to get at, because it knows that the other path it was following was a dead end.

The system works by not only weighting pathing costs as 1D floats, but by having another "legality" parameter to them as well. So if we have a ground dwelling creature that's trying to get from A to B, the path finder will exhaust every possibility that's only passing through ground tiles before starting to path through the air. If exhausting every possibility there as well, it will start to look for paths through solid walls. Once a path is found it will be followed as far as possible.

The system also has a category for moves that are possible, but not preferred. For example the lizard can move backwards, but it will consider every other possibility of getting to the destination first. Another creature might be able to drop from high distances, but have an aversion for it, and so on.

Note that this behavior isn't always going to set in. I'm just making it available for the AI to use. For example we won't have every annoyingly lizard camp out under platforms you're on for ever, bringing the game to a stalemate. In most situations the AI will get tired of that pretty quickly and go look for something else to do. But it's nice to have the behavior available, especially for possible future friendly NPCs.





   JLJac on July 02, 2014, 11:32:20 AM:

Hi, glad you like it :D

The game actually evolved around the main character - the "slugcat" as it's been named recently was created and made to move around in a sterile environment to try out the soft puppet animation technique. Then I asked myself what kind of world this creature would live in, and came up with a couple of ideas that are now scrapped, maybe I'll share them some time ... however I settled on the Rain World theme, and here we are!

Yep, the environments are really static. As many things in this project that started out as a technical limitation, but later became a point of the artistic expression if you will - the contrast between the fluid creatures and the static environments is somewhat visually interesting, and there's a reason for it in the "story" (hesitate to use that word as there's no script, we're having more like an emotional narrative going on) as well.





   JLJac on July 03, 2014, 02:05:58 AM:

Update 264
Did some trimming, meaning that the path finding matrix shaves off tiles on the sides that are not accessible to the creature. Was told I shouldn't worry about memory too much, but this is a fairly simple measure that saves literally hundreds of path finding cells that would just be sitting there idly, so I'm fairly happy to have it done. If nothing else for peace of mind.

More interestingly I've managed to implement accessibility mapping, as I call it. This is a sub system of the path finder that maps whether each tile is accessible to the lizard. The accessibility has two parameters to it, "can I get to this tile?" and "if at this tile, can I get back to where I am again?".

The first is used by NPCs to dismiss targets that they already know they can't get to without having to run the path finder. When programming the AI later it'll be a huge boon to be able to just ask "can I get there?" for any tile.

The second is used so the NPC won't venture down into some pit where it's unable to get back again. Some times you might want it to venture past a point of no return, but the default behavior should be not to go where you can't go back from.



Here you can see the mapping in action. Blue tiles are "I can get here", red tiles are "I can get back from here" and green tiles are both - these will be the territory of this creature. Reachability and get-back-from-ability are easily calculated by doing a flood fill using outgoing tile connections and incoming tile connections respectively.

You can see how when the creature is held at the bottom of the pit, the level above becomes red as these tiles are possible to "get back from" by dropping down the pit, but not possible to reach. When the creature is held at the higher level the bottom of the pit becomes blue, as these tiles are reachable but not possible to return from.

What triggers the accessibility mapping is simply being in a tile that is flagged as either unreachable or beyond return. Then the creature assumes that it's been moved out of its territory by an external force, and starts reconsidering its surroundings.

Get-back-ability is currently calculated after reacability. As the reachability is mapped every tile is actually flagged as possible to get back from... I think this could be a fun detail - as a creature is momentarily confused by a change of environment it's actually possible to trick it into a pit or something. This is easy enough to change though, some creatures could play it super safe by immediately on exiting their comfort zone mapping the entire world as inaccessible, and then just add tiles as they're sure to be double-safe.

This whole behavior is handled by a sub-class in the path finder class, of which an instance is created on re-mapping and then destroyed as the mapping is done.

The next big pathing hurdle is going to be inter-level pathing. I have the idea pretty clearly laid out, and actually most of the infrastructure as well. For example, on birth a creature will create a set of pathing nodes for the off-screen abstract rooms already, I just have to utilize those. Stay tuned!





   JLJac on July 04, 2014, 07:17:10 AM:

Oh, look at that! Don't think it'll make a huge difference to us though... or maybe it will, because UnityVS doesn't work with trial versions of Visual Studio, and maybe now it will. We'll see!

Update 265
Off screen path finding. I'd say I'm about halfway through by now - the accessibility mapping shown above is for example able to map off screen abstracted levels, and the path finder is actually able to go through them as well, but there are some quirks.

The main hurdle here was that on the realized map, every AI entity will share an AI map, but in the abstracted world they will each have their own. This is because the movements in an off screen room is pre-calculated for each species, meaning that you will get a different looking graph connectivity in those areas depending on what creature you are. This meant that those two maps, for the local, realized room and for the abstract world, had to be connected at the room exits. As this connection was between a shared map and a private, there was some trouble, but now it actually seems to be working.

Still some stuff to take into consideration though. For example it doesn't yet consider the pre-baked connectivity maps of abstracted rooms, it just assumes that any exit in a room is accessible from any other exit. But we are really close to having a path finding system that's universal and able to seamlessly find paths in a room as well as between rooms.

Then again, following those paths is going to be another thing entirely haha!





   JLJac on July 07, 2014, 07:06:15 AM:

Happy to hear that! If you want to ask more in-depth questions, feel free!

Update 266
Now we have inter-room pathing! It actually seems to work! How it works, simplified, summarized:

1. On loading, a function called a "connectivity mapper" goes over all the rooms. It pretends to be each type of creature in turn, and using that creature's moves tries to get from every door in the room to every other. If it succeeds, it saves how long and difficult that path was (In room 3, as a Lizard, walking from door 2 to door 3, the path length is 21 tiles and the cost of the path is 321). If the path is impossible to traverse, it saves it as -1.

2. As a path finding creature is created, it creates a map of path finding cells for each tile of the room its in. It also creates a cell for each exit in each room in the entire game world. This might sound like a lot, but keep in mind that a 10*10 block of tiles holds no less than 400 pathing cells, so all of those exits in the offloaded world are going to be small fry in comparison to the currently occupied room.

3. The creature creates a network between these cells. For inter-room connections it's easy, if the room has 2 exits of which 1 leads to another room A and 2 to another room B, the first cell in the room (representing the first exit) should be hooked up to room A. Actually to the cell in room A that represents the exit towards the first room, but I said I'd keep it simple, haha. For connections between cells within the same room, it uses the connectivity maps mentioned before. This way the path finder will be able to know how difficult it's going to be to traverse a room, but the lengthy calculation is reduced to just a single integer number.

4. Run the path finding algorithm. The local grid of the currently occupied level is hooked up to the global grid through the room exits. The path finding algorithm is able to treat cells within the room and cells in the abstracted world equally, making it find paths seamlessly throughout the room as well as the world.



Finding a way from the bottom of a pit to the platform above, using off-screen rooms. Note that the path finding works from goal to start. The little free-floating cells on the left represent the abstract off-screen world.

I was once even pleasantly surprised by this when trying it out. I had a room that consisted of two little cells with no connection to each other, but just a connection to the outside world each. The offscreen pathing was able to create a path from one of them to the other through the offscreen levels, but not the other way around. I thought I had found a bug. In fact, one of the rooms that needed to be traversed in order to get between the cells contained a pitfall - dropping down was possible, but not getting back up. I found it fascinating how the very specific architectural traits of a level that to the game didn't even exist (it had never been loaded in that game session) could have a visible effect in this other room. It really made the world feel like a connected whole!


And, as a bonus, a little bit of path finding madness. The lizard isn't able to do its "flip over" move that enables it to turn around on a flat floor yet, so instead it proceeds all the way around.






   JLJac on July 08, 2014, 01:07:10 PM:

@nilanjan, thanks! Yeah, surely a lot of pathfinding in this game hahahaha! Still haven't turned out to the nightmare I expected though, so that's something we're happy about Smiley Yeah, I guess it would be accurate to say that I'm self-taught, not because people didn't help me, but because I never went to programming school. I've taken one or two courses that involved programming though. In the end I think the difference isn't very big - in the end the bulk of the learning is about just sitting down and learning it by yourself, and then it doesn't do a huge difference if you're going to be graded on it later or not!

@wlad, thanks! Appreciate it! I wonder too haha... Some days, way too many hours, some days too few - I'd guess it averages out around 8 hours a day.

Update 267
Today was one of the days it averaged on slightly fewer though, but I got some cool stuff done. Now we have a basic system for inheritance between creature templates, which will come in handy when it comes to, for example, the lizard breeds. If a creature template is created and passed an ancestor, it'll use the traits of that one as a base which will be modified by its own input parameters. So if I want to create a creature that's exactly like another creature, with only one difference, I can just tell it to inherit its trait and pass that one trait in the traits list to be changed. Good times!

Also creatures will can be tagged as not applicable for pre-baked pathing. This is because some creatures may have almost the exact pathing preferences (pink lizards and red lizards for example) in which case it's a waste to pre-calculate specific paths for them. The jury is still out on this one though, because it's just a few characters of data in each level file for each creature, and maybe the charm of actually having them all calculate their own paths might be worth it?





   JLJac on July 09, 2014, 10:27:24 AM:

Hahaha yeah most definitely! If there's anything I love more than programming path finding algorithms, that has got to be writing about programming path finding algorithms  Cheesy

And on that note -

Update 268
Yo dawg, today I put a smaller path finding algorithm in my path finding algorithm... to... Let me explain!

The basis of the rain world path finding method is that as one path is being followed, the next is being calculated. This means that the paths are calculated not within a single frame, but over the course of several, and that the creatures are able to follow moving targets. How it works is pretty simple; the path finding algorithm works its way out from the goal as a flood fill. When it reaches the creature, the creature starts following the path. Once the creature is following the path, a path to the next goal position (wherever the goal has now moved to) will start to be calculated. It's assumed that the new goal will be somewhat close to the last goal, so the creature will continue to follow the last path as the new is being calculated. The creature will never follow a perfectly updated path, but it will have a reasonably recent one to go by, and it is quite a lot easier on the processor as an entire new path doesn't need to be calculated every time the goal moves.

I think of this as a path finding algorithm that's optimized for having several creatures chasing moving targets. Contrary to an RTS rain world will have almost only moving targets.

Ok, with this in mind, take a look at this. Notice how each time a path connects with the creature, the next one is started?



This is done pretty simply. Each time the mouse is assigned as destination, but it's actually saved as a "nextDestination" variable. When the creature is following the most recent path or the path has exhausted all its options and knows its unable to reach the creature a new path will be initiated, with nextDestination as destination. You following? In the gif above we see a lot of the former and none of the latter.

So, there's a problem with this system. Say that the creature is in a small enclosed room. The path finder is told to find its way to a position somewhere out in the big world outside the room. A new path will be initiated, and the path finder will chug away at the vast sea of tiles in the world, without finding a way into the room.

Now the AI changes its mind, and the path finding goal is put inside the small room again. Notice the problem? No new path will be initiated inside the room, because the creature isn't following the most recent path, which is still searching all over the world for a way to get to the creature, and the path won't have exhausted every option in a loooong while, as it has to look at every tile in the world first.

So, the solution is to just assign a new path every time the goal moves, right? Nah, that won't work. If the goal moves, as it will when following a creature, there will be a new path each frame, and none of them will have time to reach the pathing creature.

This is where the path finder in the path finder comes into play. It's a super quick little path finder that maps whether one place is close and reachable from another place. So, when assigning a new destination, I check if this new destination is close to the old destination. If so, I simply do as first described, save it as nextDestination. If it is not, however, I scrap the old path and start a new one. The old one probably wasn't going to help either way.

So, in the scenario, this would mean that as the goal is moved into the small room again, it's quickly determined that this area is enclosed from the last destination - and the last path will be discarded and leave way for a new one, inside the small room. The creature will appear as more alert, as it will adapt to the new situation quicker than if it would've had to search the entire world for a path to a place it didn't even want to go anymore first.

Whew. Told you path finding was gonna get crazy!

In other news, I've enabled lizards to enter short cuts, and brought some of the path finding stuff together and had it work simultaneously. So, now we for example have the "pathing through places I know I can't actually go" stuff working simultaneously with all the other stuff, etc. The different elements tend to not get along very well at first when put together, but I think I've made it work. Have some ideas for re-structuring stuff though... we'll see.

Also been developing some ideas about how off screen creatures moving about are going to work. Off screen creatures are probably going to be a little... schrödinger's lizards, in that they'll be in sort of undefined states until they need to be realized... It's going to be interesting!





   JLJac on July 10, 2014, 11:08:19 AM:

Hehehe thanks! It's just an object that's hooked up to a path finder on initiation, and every time the path finder does something it checks if it has a draw object, and if so, throws a command at it. Not going in the game though, sorry!

Update 269
Today I've been doing things too petty to really be worth a mentioning - which is a good thing, because it might mean that I'm actually starting to wrap this thing up. Petty things include:

- In corners the lizard would believe that a path was accessable, and for one tick follow it, leading to the path being abandoned because it was "already complete and being followed". Took some very intense staring at a weird little squiggle in my note book until I figured that one out. If I ever did, but the bug went away.

- Right from the start when a new goal is being designated, it checks if that tile is reachable. If not, a "looking for the closest possible I can get to this point that I know I can't actually reach" bool is set to true, and the path finder follows slightly different rules. For example, if it knows that it will be able to reach the destination, it doesn't even check tiles that are not marked as reachable - they're just a waste of time and memory.

- When setting a new destination, it checks that this isn't already the Destination or NextDestination, and thus saves expensive connectivity checks.

On a slightly more interesting note, I've done some actual behavior - though I'm probably going to redo it once I get around to giving the lizards unique personalities.

Look at this scenario:



Where the mouse is (red little square), the lizard wants to go. But I've disabled shortcuts here, so it's unable to get to the upper part of the level. Instead it should get as close as possible, as mentioned in the note above.

Now, depending on how I weight the "which tile to check next" heuristic, we get different results. In one version we always prefer checking tiles that are legal to move in first. In that case the whole connected above area will be filled in first, and then start to swell out pretty evenly in all directions. In this case, the blob will first make contact with the lower connected area in the place I've marked with blue, and then spread across the floor. This means that the lizard will follow the path to where the blue area is, and then hang out there as that's to be considered "the closest I can get".

Another way to do it is to weigh in proximity to the original goal more. Then the blob of checked tiles will spread pretty evenly outwards from the goal until it hits a mass of legal tiles - then it will spread inside that mass quickly until it catches the lizard. In such a scenario the lizard will go to the red zone and hang out, considering that "the closest I'll get".

Maybe to you the red area seems more correct, as it's closer, simply. To me too, which is why you see the lizard hanging out there. But you have to have some of the logic that leads to the blue area as well in there if the creatures are to appear intelligent. Imagine a platform that has only one way to get to it; passing through a narrow corridor and then doing a jump. If a creature that is not able to do that jump is supposed to get as close to the platform as possible, you wouldn't want it to just hang out on the floor underneath it. That would be worthless if it were to for example guard some prey that has escaped to the platform and isn't supposed to get away from  there. Instead you'd want it to hang out in the corridor before the jump. That way it's perhaps not the closest to somewhere on the platform, but it's the closest to where you get to there.

This is the blue-zone behavior. If you look at the blue zone in the picture, you notice that this is the place that where if you were able to climb or fly only a few tiles you'd have access to the entire top part of the level.

So, now the path finder has these behaviors in it, and balancing between them is as easy as setting a slider between 0 and 1. So maybe different creatures will have a slightly different approach to this, some might tend more towards the one and others towards the other.

Note that this is just path finding, not AI. The AI will do all the actual thinking and just pass a simple "this is where I want to go" coordinate to the path finder. When AI is up and running, and a prey is climbing around in the unreachable top part of the level, the AI will calculate where the creature would fall if it were to fall, and try to hang out close to that place on the ground below it. So, neither blue zone or red zone. But that's a later issue, hehe!





   JLJac on July 11, 2014, 07:49:25 AM:

Update 270
Woho! The path finding seems to be more or less at the point where I'll be able to get it as a general creature-nonspecific behavior. I will of course revisit it when I get into doing individual creature behaviors, but the general principle seems to be working!

With this victory, I moved on to creature-nonspecific path following issues. First up, making a creature follow a path through multiple realized rooms. The issue - a creature only has a tile-level resolution map of the room it's currently in, for the others it uses the abstract node system. This means that when moving from one room to another, it needs to discard an entire path finding map for that room and create a new one for the room it has entered.

Furthermore, when entering the room it can't just lose its orientation entirely. If its destination is a specific tile within that room, it needs to make a quick path to that tile. If the goal is in fact another room, and it's just passing through the current one, it needs to look at all the exits except the one it came from, and for the exit that has the lowest pathing resistance (closest to the target) it needs to create a quick path and fill in the cells in order to get there.

This last issue is what I'm working with now. It's wonky and tends to give paths to random internal shortcut entrances instead, when it doesn't just crash the game. But it still feels good to be working with the ability to follow paths, not calculating them. Progress is being made!





   jamesprimate on July 12, 2014, 06:26:38 AM:

Haha yeah were a bit far from talk of porting it. That's like waaaaay down the line once its nearing completion. Though it is  the sort of thing that is important to take into consideration during development so you don't run into compatibility problems down the line. But don't worry, we're keeping it in mind!





   JLJac on July 14, 2014, 08:10:52 AM:

Wow that's really awesome! Ghost cats :D

Yeah, as James said, right now we're concentrating on making it before porting it, so it might be a while :S

Update 271
Alright, moving between multiple loaded rooms done!



In the gif, when you see the tiles up above the pit turn blue, that's me setting a destination. The lizard (pink cubes) has to make its way up there! Then the gif shows it as it's moving through multiple rooms in order to reach the destination.

Let's take a closer look at what's happening when you enter a room:



Notice how there's a path that's already there, and then it starts to swell out all over in two waves? When entering a room, the quickPathFinder - of a couple of pages ago fame - kicks in. It looks at all the neighboring rooms, checks which has the lowest pathing value (closest to the target) and makes a quick and dirty path to the corresponding exit.

The thing with quick paths is that they're made to be quick to calculate, not necessarily the most effective way to get there. Though they might be, if the maze is very simple. Anyhow, the quick path algorithm finds a quick and dirty way to the next exit, because the lizard should have something to follow right away when it enters the room. As it goes the real path finder will catch up with it, and it'll get a more reliable path, but the quick path is good enough to follow for the first couple of tiles.

As you might have noticed the accessibility mapping swells out from the quick path. This is because these tiles are already set to accessible when the level starts, and need to continue to be so as the accessible area is mapped, or the creature might stop in its tracks. Because of that I've fed all of the quick path tiles into the accessibility mapper as starting tiles.

Once the two layers of accessibility (reachable/possible to get back from) have been mapped, the path finder is told to create a new pathing generation, just like it would when chasing a target inside the room. But this time, it's the off-screen goal that's assigned. The path finding algorithm will search throughout the network of abstract rooms, and find its way to the current, realized room, where it will start flooding the tiles from the correct exit. In the gif this can be seen as purple, if you look closely.

Once the creature starts to follow this path, it stops calculating and just goes along - until reaching the next room, when the procedure is repeated.

One thing that was difficult in this was that when the creature is leaving the room where it's destination is, the destination needs to be translated from "tile space" to "abstract node world-map space". I solved this by partly using the quick connectivity check I threw together a couple of days ago, partly just checking straight distances to doors. It has been working OK, but the connectivity check is super expensive, so I'm thinking about more optimal solutions. No noticeable hickup though, so it might work just fine.





   JLJac on July 15, 2014, 10:59:17 AM:

Yep, that's true. The thought crossed me that each segment of a corridor could be made to one big, rectangular cell, or similar solutions. In the end I decided to keep to this solution as the connections between different tiles are on the tile level, and because the path finder is not only supposed to be able to find a legal path to a legal position, but also the closest you can get to an illegal position. If you were to only map the corners, or some similar solution, it would be kind of unclear how mapping illegal space should tie into that, which is why I've kept it simple. But if performance issues start to pop up, I'll definitely reconsider it!

Update 272
Sorry guys, this is not gonna be an exciting one.

Averted a number of null reference exceptions that would happen because some coordinates were not properly migrated from tile space to node space on exiting a room.

Changed it so that instead of connecting a tile of the realized room to a node in the next room through an exit, the tile is connected to the node in the same room, which is then in turn connected to the next room. Ie it doesn't bypass nodes in the realized room any more, which is cool for a number of reasons, one of which is that it'll help later when I come to giving creatures cozy little holes to crawl down and hibernate in.

Moved the quick connectivity mapper to a static class, making it accessible from everywhere.

When deciding which exit a coordinate is closest to, in order to convert it to node space, I check both if it's possible to get from the coordinate to the exit and vice versa, hopefully giving a slightly better representation of tile coordinates in node space.

Etc etc etc.

Basically I've been cleaning stuff up. I tend towards working like that - first I just go in there and massacre the problems in whatever way possible, then I go over the solution and tidy it up. By now I think the path finding is actually solid enough to start moving on to either embryonic AI (keeping track of where I want to go, having a few modes of behavior to finite-state-machine between) or abstract creatures (creatures in a super-simplified state as they are outside of the currently loaded world), perhaps both. Abstract creatures also need some AI, such as a basic idea about "where am I going?" and "what am I doing?" to be able to know if the current behavior is "hunting" or "retreating to hole because of approaching rain". For this reason it might actually make the most sense to have these two next problems be one, and integrate the most basic aspects of AI with the super simplified creature.





   jamesprimate on July 16, 2014, 05:23:51 AM:

did an update for the kickstarter crowd focused on pathfinding: https://www.kickstarter.com/projects/rain-world/project-rain-world/posts/914855

if you've been reading the devlog it'll be nothing new to you (im totally just paraphrasing what Joar has done the past few pages), but I tried to make it relatable to an audience that might not be as knowledgeable on the subject as you dudes.  Coffee





   JLJac on July 16, 2014, 12:01:47 PM:

Update 273
Ok, so on to the next task! Today I've created a class for abstracted creatures, and made them able to move around between rooms. They're also contained in little lists in the abstract rooms, and receive updates.

Each abstract room has one "node" per exit. Abstract creatures keep track of which such node they are "in". The quotation marks on that last one is the complicated bit. A node doesn't really symbolize a specific area of the room, rather all the nodes tend to share most of the area of a level. Take a look at this room:



This room has three exits, and therefor three nodes. Let's call the top left one A, the upper right one B, and the one down in the pit C.

So, from A you can get to B, from B you can get to A, and every tile you can get to from A you can also get to from B. So it's not as simple as saying that a certain group of tiles represent a certain node. Rather nodes symbolize goals and destinations.

Now imagine that this room is offloaded, and represented solely with its nodes.

Remember how I told you that the game has mapped how to get from every exit to every exit for every room as every creature? That info is used here. Say that a creature enters from the left exit. It's position will now be set to this room, and node A. Each creature has a timer for how long it has been in that node. When it moves the timer is reset.

The creature also know where it wants to go next, in this case let's say out the exit C. The pre-baked mapping knows the distance between the two exits, so in the abstracted space it's very simple - once the creature has been in node A for a time that is long enough to correspond to that distance times a movement speed, it switches to node C. Then the timer resets, and the same procedure repeats for the next destination. This way the creatures move between nodes with a speed that corresponds to the actual tile-level distances between them.

The roaming behavior I have currently set up looks at what node a creature is in, and looks at exits for adjacent rooms. It can only go to nodes that are mapped as reachable, and also only follows paths that can be followed back, in order to not get stuck in a dead end. So say that the creature is in node A, then its next move can either be to move back out through the exit A, or the exit B, but not C as it won't choose routes where it can't get back. If it is in node C, its only option is to return out through the same exit.

The framework also allows for saving paths, meaning that creatures can have more deliberate movements throughout the world as well. An obvious example of this would be getting back to their dens when the rain gets closer. I imagine that it would be kind of cool to suddenly notice a lot of traffic of creatures through your room as they are all scurrying back to their respective dens.

In the future, if you were to walk into the room while the creature is moving from A to B, it'll just use the timer to place the creature at a certain point along the path between the two exits. That way you'll be able to walk in on a creature in the middle of traversing a room.

What I'm working with now, is having the creatures transition seamlessly between abstracted and realized modes. Say that you are in a room, hidden. Then you should be able to see a lizard come in through one exit, pass through the room without noticing you, and continue out the other. This means that the lizard has to change from abstracted to realized back to abstracted again, with some parameters remaining intact. More on this tomorrow!





   JLJac on July 17, 2014, 07:55:39 AM:

Update 274
So now I have the basics down for the abstract creature framework, and am trying to connect it all together, so that creatures can move seamlessly between the two states of abstraction. However it also means that I have to re-structure quite a lot of the stuff handling things such as how rooms are loaded and the like.

I'm actually building some very fundamental infrastructure for the game here, so it takes a little thinking. Right now my basic idea looks like this:



Each of the areas is a level of abstraction. The very core of a creature is the top left cell, to which the other components are attached according to the nature of that creature and the level of abstraction.

An example of how a command might move through this infrastructure is when a creature with an AI addon (the player for example doesn't have an AI, meaning that the entire right column is absent) is given a new destination. This is handled from the top level - the abstract AI, and then the command is passed down to the AI and the path finder in turn. Processes in the AI are going to change the destination a lot, but each time the new destination will walk down this entire hierarchy - that way, when the room is suddenly abstracted and everything on the realized level is thrown out, the destination will still have survived in the abstract AI, which remains.





   JLJac on July 18, 2014, 07:49:44 AM:

Thank you :D

Update 275
Similarly to how the human brain has its inner part, the reptile brain, and the surrounding cortex, the idea is that the rain world creatures will also have two levels of intelligence where the more complex works as an addon to the constant more static part. In rain world it's not going to be human level and reptile level though, rather like... Reptile and aemoba... Anyhow, the idea is that in the simple, abstracted world the creatures will make simple, abstracted decisions. When the environment is realized at tile level, the AI should get a more powerful component as well, to match it.

Today I've been having a bit of a conundrum. Here are the options I'm choosing between:

A - reptile brain keeps control always, and when the reptile brain decides on something ("let's hunt!") that command is passed down to the complex brain, which refines it into more complex behavior ("i'll go to this and that particular tile, etc etc"). This is cool because it makes the creatures behave generally the same regardless of if they're abstracted or realized, which gives them truer autonomy.

B - reptile brain controls the creature when abstracted, but when the creature is realized the complex brain takes the wheel completely. It still uses the simple brain for storing destinations etc, meaning that if the creature is suddenly abstracted those essentials will remain for simple brain to use, but while the complex brain is running the simple brain is not allowed to execute any behavior. This is cool because it's cleaner - two different solutions instead of one gooed together, and because it means that the complex brain isn't held back by the simple one as it can do its own thing without relating to the abstract behaviors.

Hmmmmm... I'm really unsure about this one actually! Which one seems the cleanest and easiest to work with to you guys?





   jamesprimate on July 19, 2014, 01:35:52 PM:

Joar is going in deep with the Plato / Heidegger stuff!

Is there any advantage you can see from either of these over the other one in terms of easy of execution or processor strain? I like A simply because it sounds cooler, and i dont think keeping abstracted "personality" is such an issue (as the player will be unaware of it either way.)





   jamesprimate on July 20, 2014, 08:51:04 AM:

i think its going to be $900.00 retail





   JLJac on July 21, 2014, 04:35:08 AM:

A you say... Hm - in that case I'll have to do a little bit of thinking. I don't want the abstracted creature to be too heavy, as the very point of it is that hundreds of them should be able to run in the background as you play. But maybe there could exist a thing that goes over the abstracted creatures one by one and create "fake events" for them to react to - such as "hearing prey" which changes the mode from "idle" to "searching" for example. When the creature is actually loaded, this fake event engine would be replaced with the actual events of the room. Which would actually be a little bit of solution B I realize when writing this, but would perhaps hit the sweet spot between them. More on this later!

Today and probably tomorrow I'm making a website for our company, Videocult, which is necessary to get across some business hurdles. One of those is getting approved for the Bizspark project and receive a Visual Studio license, so that's going to be a nice boon for the development process. But until then, there might not be real devlog updates - so see you guys in a day or two!





   JLJac on July 21, 2014, 01:44:30 PM:

Do you feel like sharing any of the ideas you had buzzing around your head?





   jamesprimate on July 22, 2014, 06:14:07 PM:

Do you feel like sharing any of the ideas you had buzzing around your head?

uh guys, i think he meant "ideas about how to implement abstracted creature behaviour" hahah





   jamesprimate on July 22, 2014, 07:55:35 PM:

ITS OK WE LOVE YOU GUYS <3 Hand Metal Right





   JLJac on July 23, 2014, 05:30:28 AM:

Website! I guess we are an actual game company now!

www.videocultmedia.com





   JLJac on July 24, 2014, 01:43:17 AM:

Yup, thanks! I hope we get some more material to flesh out the page with later~

Do you feel like sharing any of the ideas you had buzzing around your head?

uh guys, i think he meant "ideas about how to implement abstracted creature behaviour" hahah
http://gamasutra.com/blogs/ChrisSimpson/20140717/221339/Behavior_trees_for_AI_How_they_work.php

edit:
Rewinding the thread I'm not so sure it's the answer to that question Who, Me? however still worth looking at Who, Me?
Not the current problem, but a super interesting read. As always, thank you so much for your input! I'll let this one brew for a bit and see how I can utilize it, I'm sure it will we very usable.

Update 276
These last days I've basically spent in angst about how to implement the creature abstraction. The problem is that this is such a fundamental part of the infrastructure - I can't really throw something together and then get back to it.

Yesterday I had a talk with James, and I think I've been able to take a step back from the problem. This morning I had an idea. In the end, it seems unnecessary to do a full-scale AI for creatures that are offloaded. It kind of beats the purpose of offloading them, right? With that in consideration, what is the only thing an offloaded creature can actually do that will be able to affect you in any way? There is only one action a creature in another room is able to perform that's going to influence you. That's exiting the room - an action that has the potential to take it to your room.

So the idea would be this: Separate all the actions that include room traversal into their own category. Only these will be able to occur in abstract mode.

At this point, the list is pretty short:
  * Random scavenging/idle milling about
  * Returning to den as rain is approaching

To this comes a few events that could possibly be added in the future.
  * Returning to den because of injury
  * Returning to den to store food
  * Going into adjacent room to investigate input from inter-room senses, such as inter-room hearing (to what extent this will be implemented is a game balance question)

So, the solution would be to strip off-screen creatures of any behaviors except these few.

But wait, doesn't this mean that the whole "living world" "terrarium" "creature autonomy" thing is thrown out the window? Doesn't this make the entire world become an illusion that's created in a radius around the player?

Not exactly. The idea is that in the same way as position etc is abstracted out there in the big world you're not looking at, AI is too. Creature interactions can still happen, but they (including the AI part)are abstracted to simple statistics. So say that a pup and a lizard is occupying the same node in abstracted space. Instead of a huge process of interaction between two AI's with path finders, tiles, physics, etc etc etc, the whole thing is reduced to "4% risk of eating per tick while they occupy the same node". By simulating stuff in statistics like this, stuff will still be able to happen off-screen, but not simulated in the same granularity.

Going to try an implementation this afternoon, and hopefully things will get moving again!





   JLJac on July 24, 2014, 07:36:12 AM:

Similarly to how you wouldn't have a baseball cap in a fantasy game because it's not fitting the setting, neither caps nor viking helmets are really true to the RW setting. That said, we do plan on having a variety of playable characters available, but we don't yet know if that's going to be a question of custom combinations of features or if it's just going to be a selection of characters to choose from. It's all much later stuff though, for now the general frame work needs to get done!





   jamesprimate on July 24, 2014, 09:12:46 AM (Last Edit: July 24, 2014, 09:22:38 AM):

well also this is sort of long-term thinking, since we should be able to have plenty of non-abstracted creatures hanging around off-screen in the general area too (possibly even for entire regions.) its more about finding some scalable solution for when the world starts to get big and complicated.

figuring out at what point/distance/etc they become abstracted will depend on a bunch of factors down the line, but for now we need a structure that will work either way.





   JLJac on July 24, 2014, 11:31:25 AM:

@whiteclaws, that first post is a pretty flawless description of what's going on, actually Smiley

@JIMBERT, yeah, there's a bit of that too. For example I intend to make it so that abstracted rooms can receive update calls at uneven intervals (perhaps depending on how far away they are) - in either case they might very well not update every frame. The longer ago it was a creature was updated, the more "quantum" it gets in a way - when it receives its update it will have correspondingly higher chances of doing things, and its "time since my last update" counter will be reset, pinning it down to a "less quantum" state again.

The pretty good news is that I seem to have escaped the stuck place I've been hanging out all week. I threw together a little visualizer for the abstracted world so I could actually see the creatures moving about, and it naturally helped a lot. Now I think I've got an angle of approach, and this ride is moving again!  Hand Shake Left  Grin Hand Shake Right





   jamesprimate on July 24, 2014, 11:53:10 AM:

YAAAAAAAAAAY  Hand Clap





   JLJac on July 25, 2014, 07:47:18 AM:

Update 277
Moving forward at a steady pace again! Today I managed to implement quite a few things, albeit small. Rooms can for the first time be unloaded to abstract space again. I have managed to get the object permanence of creatures pretty much down - I'm unsure of how it happens when a room is offloaded as the creature is currently in a a shortcut, but I have the following scenarios covered:

* The creature comes from abstracted space, entering realized space - and becomes realized
* The creature exists in abstracted space, which is then realized - and so is the creature
* The creature leaves realized space, entering abstracted space - and becomes abstracted
* The creature is in realized space and is abstracted along with it

This is pretty cool. I can have a lizard move about at random (random movement in abstracted space is halfway done, not very fine-tuned yet) and at times it will enter a room I'm in, at other times I might enter a room where it is. Cool stuff!

Another cool thing I've managed is to summon a lizard that's out in abstract space to the current room - it actually does show up in the doorway!

A loooot of things still need polishing. The abstract path finding stuff isn't at all hooked up with the in-level pathing yet, making it so that as soon as the creature switches between the two modes it forgets where it was going. Sometimes there are errors and weird glitching around. Creatures are not spawned in the middle of rooms as if they were actually doing something when entering previously abstract space, but rather at exits with a confused look on their faces. The list goes on. But so do I! It feels wonderful to have solid progress again.

Happy weekend everyone!





   JLJac on July 28, 2014, 05:57:58 AM:

Update 278
My little test creature has picked up the good habit of continuous existence throughout rooms and abstracted node space. It is getting closer and closer to achieving an AI capable of handling these strange situations as well.

When realized, the creature has this big cool path finder that can do all sorts of stuff. When abstracted, the creature just has a path, which is nothing more than an array of coordinates in node space, which it will mindlessly follow if it can. Today I made it so that on abstraction, the real cool path finder will try to create a super simple path and feed that to the super simple abstract AI if it can. If it's unable to, the abstract AI can fall back on the abstract space path finder, but I think that's not preferable as I don't see the reason why a path should be calculated twice.

This seems to work just fine. I've had the realized creature find a path in realized space where it needs to pass through abstracted space in order to get there. Upon abstraction, the path is passed down just as intended. This means that now creatures can become abstracted without losing their focus; if a lizard sees you, it will be able to calculate a huge detour through abstract space in order to get to you, and follow it all the way. On arrival, it will even be able to remember what it was doing, as a creature's proper AI is saved in a hibernation mode if the creature has a destination within realized space.

Next up - if an abstract room is realized as a creature is halfway between two cells, the path should be calculated, and the creature should appear in the middle of it.





   JLJac on July 29, 2014, 08:52:39 AM:

Abstract interactions would definitely be way easier to implement than actual realized interactions, so I'm probably going to implement quite a lot of them just for the hell of it. I'd post pictures, but you change the abstraction by measuring it. Actually you don't, here's my visualization of it:



That's the map of the world, each column is a room. Each square is a node in that room. The rooms that have a little pink minus above them are realized. The one with the grey rectangle behind it is the one currently viewed. You see how the nodes have different colors? That's how I've visualized the connections between rooms - the nodes in different rooms with the same colors are connected. Little orange dots are creatures, the slugcat and a lizard prototype hanging out in the other room.

Slugcat is in node 2, because that's the door it came in through when entering the room. Checking which door a creature is actually the closest to in a realized room is a pretty expensive connectivity check, so I'd rather not do that every frame, and for now I haven't really come up with any scenario where assuming a creature is still hanging out in its entrance node isn't working. If such a scenario would arise though, it would be easy to just have a method call that tells every creature in a room to check against the exits and update the node map accordingly.

As you can see there would have to be hundreds of rooms before the node graph became bigger than the grid of one single room, so I feel pretty confident that the abstraction is going to be a cool feature. It will allow a vast world to exist, and to gain granularity as you get closer, making it feel like the entire thing is alive simultaneously.





   jamesprimate on July 29, 2014, 03:02:04 PM:

this looks like a really elegant solution! easy to visualize and seems like it has deep application.





   JLJac on July 30, 2014, 11:43:52 AM:

Update 279
Big progress today! Finally a lot of lose ends came together. Now we have abstracted creatures working like I intended them to. The best way to do this is probably a list.

* When an abstract room is realized and there are creatures in it, the creatures will appear in the room in positions suitable to where they are headed. So say that a creature is moving from one exit to another in the room, and has been doing so for 40 ticks when you get in there and see it. A path will be calculated between the exits, and the creature placed at a corresponding distance along the path. This path will also be fed to the path finder, selecting all the cells so that the creature will follow the path immediately from frame 1 as the room is realized.

* If a creature is abstracted in a room, and doesn't leave it, its actual tile position will be saved, and used as a starting point for a path as described above. This means that you can abstractize a creature half-way in following a path, and then realize it a little while later, to see it having traversed some of that distance.

* If a creature is not following a path, but is realized in a room, it will walk around between to that creature accessible tiles randomly for a corresponding amount of repeats, using the creature's last known position as a starting point. This is meant to place the creature somewhere in an area connected to where it was last seen, further away the longer ago you saw it.

* If a creature is abstracted while outside of walkable terrain, it will be marked as stuck and unable to move in abstracted mode.

* On abstraction, creatures save a simple manhattan distance to the closest exit, the one which will be its node in node space. The creature won't be able to move away from that node until it has been in it a time that corresponds to that distance. This is so that a creature that was half a screen away from an exit won't be able to pop through it the very next frame after abstraction because the engine thought it was "in that node".

* Creatures can be assigned destinations in other rooms, and will move towards them. Every combination of destination in abstract/realized space and creature in abstract/realized space will compute, and the creature is able to pursue a path that goes through both realized and abstracted space. Theoretically it should even be able to traverse a room that's flickering between realized and abstract, though that's an extreme case that will most likely never occur in the game.

I have also been able to do just a tiny bit of performance testing, and it looks very promising. These are for example ~20 creatures passing through the room, and the framerate seems to handle it well.


(The gif though is captured in 10fps, so you'll have to take my word for it  Tongue )

The whole solution is still throwing a lot of nullreference exceptions and the like, but the general structure seems to be working and I'm excited to squash the last bugs and pack up and move on. Maybe soon I can finally get to actual AI!





   JLJac on July 31, 2014, 01:29:23 AM:

Update 280
Hehe wow - when you've paved the road with robust solutions it's amazing how quickly everything comes together in the end. Now I have the path finding and creature abstraction done, it seems! It isn't throwing errors at me any more! And way too soon, because I haven't had any time to think about which item to move on to  Shocked

What I should do is to adapt this whole path finding/abstract space system to accommodate for creature dens as well, so that creatures will be able to go hibernate and the like. But frankly I'm a bit bored by this stuff now, and the dens can wait a little while.

The next thing that seems reasonable to get to is some kind of generic AI system. That would be the very basics of an AI, the core that's shared between all creatures. One thing I know this system should incorporate is the "brain ghost" system, where creatures upon seeing other creatures will create a symbol for that creature that can move around with slight autonomy even after the creature is no longer seen.

This is the core mechanic that makes it possible to trick the enemies in Rain World. If a lizard sees you, it will create a ghost of you, and as long as you're in its field of vision that ghost will always be fixed at your position. But the moment you get behind a corner, the ghost will start to move based on the lizard's assumptions of how you'd move (based on things such as movement direction on last visual) and this is your chance. The lizard AI is only ever able to ask for the ghosts position, never the actual player's. This means that if you're diverging from the path the lizard assume you'd take, you have a chance to trick it.

This system is going to be common for all creatures, so that's something I could get at right away. The problem is that I have a slightly more complex environment this time compared to the lingo build - for example it's not possible to know how many creatures are going to be in the room and needing ghosts this time around, as creatures are allowed to move freely. Nothing that can't be helped by an hour or two in the thinking chair.



All of this is just "data collection" though, the system that will provide the AI with the information on which it'll base its decisions. The decision making process itself is an entirely different matter.

A Tree solution was posted a page or two back, and I really liked it. But I've also been thinking about a Pushdown Automata Finite State Machine kind of solution, where different modes are defined as behavior modules that can be stacked on top of each other. This would basically be a list of tasks, where the topmost item would be handled until it reached a success or failure, in which case the next one would take over. The difference from an ordinary to-do list is that the modules would be self-sufficient classes actually executing the behavior themselves, and also saving their state in case they got postponed, allowing them to pick up where they left off.

In a way, you could say that the Pushdown Automata is a subsystem of the Tree, as it could be created within the tree if you used a Sequence node and allowed it to be dynamically change its "playlist" during play...

While I'm rambling, one thing that I don't quite like with the Tree is that it has the AI character actively try every solution before moving on to the next one. If there's a lot of walking involved, this could mean that the character could spend several minutes executing some chain of actions where it's very obvious that the last one won't carry through.


(Images nicked from here)

Say that the "open door" node will return a fail. The NPC will still have walked to the door which might not be a big problem in a small world with fast-paced gameplay. But in a large world Frodo and Sam might set out on their epic pilgrimage for three movies just to arrive at mt. doom and face the fact that they left their mountain climbing shoes back home, and that's pretty stupid. Potentially you could circumvent this problem by first running through the tree with an "assumption" cursor, which will make an educated guess on whether or not each action in the sequence will succeed, and only do the actual run-through if that's the case. This sort of defeats the purpose of the architecture though ...

Another thing to take into consideration is that the tasks the RW AI will handle looks very little like this:



Rain World contains extremely few puzzle-like situations where items are needed to traverse obstacles and the like. This layout is perfect for complex puzzles where several interactions are each unlocking the other until a final goal is reached.

The problems in Rain World are much more... fluid than this. Each creature is pretty much always free to move to wherever it wants without having to collect any keys or hit any switches. The only things that can restrain movement is being speared to a wall or held by another creature, neither of which there is really anything to do about except wiggle and squirm.

The Tree solution seems ideal for overcoming geographical obstacles in order to obtain items that can help overcome further geographical obstacles. RW has very little of both these elements, and for NPS's, almost none.

So what does a Rain World creature need to think about? It needs to weight many options, none of which are simply "possible" or "impossible". It needs to do this with limited information as well, being able to account for uncertainty. I imagine a typical rain world lizard problem something like this:

"I currently see no slugcats. I have seen two on this level though (Ghosts are still in memory). One I saw 240 ticks ago in a position 30 tiles removed from me. The other one I saw 20 ticks ago just 10 tiles away, but it was holding a spear. Which one do I go after?"

Another might be:

"Room A have three edible creatures in it, but also a creature that considers me as edible. Room B has just one edible creature in it, but my own skin would be safe. Which one do I go in?"

My immediate idea is to somehow construct "plans" for what to do, and for each plan calculate a "good idea" value based on the known information.

Quote
Plan: Follow slugcat A! [Slugcat deliciousness: +40pts] [Distance to target: 20 tiles -> -20pts] [Time since I saw this slugcat: Currently looking at it! -> +30pts] [Time till rain: Starting to feel a little uneasy about the rain -> -10pts] Total points: 40pts

Plan: Follow slugcat B! [Slugcat deliciousness: +40pts] [Distance to target: 10 tiles -> -10pts] [Time since I saw this slugcat: 100 ticks -> -10pts] [Time till rain: Starting to feel a little uneasy about the rain -> -10pts]  Total points: 10pts

Plan: Go home to den! [Time till rain: Starting to feel a little uneasy about the rain -> +10pts]  Total points: 10pts

Decision: Follow slugcat A!

As the rain got closer, the "go home" option would appear more and more attractive until it became the winner of the evaluation. The main problem I can see with a system like this is that it could lead to flickering back and forth between behaviors without actually carrying any of them through. This could perhaps be circumvented by having the evaluation be delayed for a little while after a decision has been made, but that in turn would make the creature look slow to react in some situations. Maybe the evaluation could be tied to some event...

What do you think? If you guys want to give me some reading on AI that would be much appreciated! (Looking at you, Gimym JIMBERT)





   jamesprimate on July 31, 2014, 09:15:09 AM:

Quote
Plan: Follow slugcat A! [Slugcat deliciousness: +40pts] [Distance to target: 20 tiles -> -20pts] [Time since I saw this slugcat: Currently looking at it! -> +30pts] [Time till rain: Starting to feel a little uneasy about the rain -> -10pts] Total points: 40pts

Plan: Follow slugcat B! [Slugcat deliciousness: +40pts] [Distance to target: 10 tiles -> -10pts] [Time since I saw this slugcat: 100 ticks -> -10pts] [Time till rain: Starting to feel a little uneasy about the rain -> -10pts]  Total points: 10pts

Plan: Go home to den! [Time till rain: Starting to feel a little uneasy about the rain -> +10pts]  Total points: 10pts

Decision: Follow slugcat A!

^^^^ I love this so much. THAT is how AI should work, imho.

From a outsiders perspective, it's hard not to think of bumbling FPS enemies when talking about Behavior Tree stuff, where you can almost hear the CLUNK as it changes gears, mechanically going through it's list of activities. Not terribly life-like, and super easy to predict. But perhaps as dancing_dead says, that could be the fault of the designer not the framework.





   JLJac on August 01, 2014, 02:52:21 AM:

Thanks guys, awesome input! All of your takes on the issue are really valuable to me, and it's good to see that you have some different angles on the problem. I'm taking it all in.

Update 281
I took a little step back and looked at the big picture. After spending some time with my notebook and a pen rather than staring at these pixels I managed to pin a few key points down.

First of all, the core question and its (as of now) three answers:

What is the purpose of the AI in Rain World?
 * Challenge
 * Flavor
 * Trickability


Challenge - The AI should add to the challenge to keep you at the edge of your seat while playing. However, I'm going to dismiss this point entirely, because I have a million other parameters that affect challenge and are much easier to tune. The movement speed of the enemy, the range of its senses, the amount of enemies are all such parameters.

Flavor - The whole purpose of the project is to simulate a world that feels exotic and alive. Creatures' behaviors are a huge part of that. I'm not too concerned about this one either though - I trust my gut feeling when it comes to this aspect, and I think most of it is in the details (animation etc) rather than the overarching architecture. In short, I'm not worried about this aspect, it's going to be cool no matter what system I use.

Trickability - This is the thing - the problem that needs to be solved. The idea is that you want the AI to be smart enough so that the player can trick it and get satisfaction out of having outsmarted it. When it comes to Rain World AI, this is the holy grail I'm pursuing. Every amount of complexity on the AI's part should generally fall back on this; this is why the AI is complex. An NPC that just moves towards a target on visual contact isn't smart enough to be tricked. RW AI needs to be smart enough to come up with a simple plan and carry it through, so that you can have anticipated that simple plan and act accordingly.



I've identified a few ways to achieve trickability:

Communication/Clarity - It needs to be clear what the intent and purpose of the AI character is. You need to know what it's currently up to, and if it changes its behavior, that needs to be clear too. Some of this can be communicated by animation and sound, and is thus not really an AI concern. The simplest, solidest solution for this problem would be to visualize the state of the AI with HUD somehow. For example I've seen some splinter cell game where a ghost of the player lingers where the enemy believe you to be. You could also have eye beams representing visual contact etc. I don't like these solutions, as I try to minimize HUD in general, and because it feels like cheating to see what's going on inside the enemy's head. What you look at on the screen should just be the physical reality of the game world - you are in fact already cheating by being able to see through walls, which no other creature can. So this one is going to be an issue. One thing I've been thinking about is that flickering between behaviors should really be avoided in order to achieve this. The creature needs to commit to an action in order for the player to be able to see what it's up to.

Predictability - It's crucial that the behavior is predictable in order for your cunning plans to follow through. You should be able to know what each enemy is going to do in each situation once you've gotten to know them. If they are too predictable they might appear as soulless machines, but I think I know of a way to fix that. If their idle behaviors, when they are not pursuing or being pursued, is more random, that will bring a little randomization into the mix without hurting the predictability of the actual gameplay-relevant behaviors. In their idle states they will also move slower with less urgency, giving the player some time to react to an unpredictable move.

Sufficient complexity - As stated, a creature that is too dumb can't be tricked. A box that just moves towards you can be made to fall down a pit, but you don't really feel like you've outsmarted anything. If the box tries to move around the pit, but you're one step ahead and have already prepared an ambush or something along that route, you suddenly have a war of minds (albeit a very uneven one) and that's much more fun. However, if the AI is too smart, you will just spot it as it's traversing your room on its two hour quest to collect parts for building a rocket or something, and when you don't have the ability to ask it what its ultimate goal is, it's just going to appear as if it's moving about at random. So, more complex isn't per definition better - especially if the complexity gets way ahead of item #1, the communication aspect.

Interactions - There needs to be tools at hand when tricking the enemy. In the old build, a creature could pretty much only move about and eat or get eaten. There needs to be a few more interactions to achieve trickability. Something to lure creatures to a specific location. Something to stun them. Some ability, such as armor or the like, that they can be robbed of through a cunning plan. These are not strictly AI issues, as they encompass larger game design choices, but they will have corresponding AI behaviors and might deserve to be mentioned here.



So that's how far I've gotten on my thoughts of why Trickability is my main goal, and how to achieve it. The next page in my notebook has a simple little observation about the kind of environment this AI will live in.

Contrary to in many games, Rain World creatures will encounter extremely few of what I call "Key/Door Puzzles". That is, actions that are locked behind other actions, such as "You can't get to behind the door until you've unlocked the door. You can't unlock the door until you have the key."

The Rain World NPS's are generally animal-type creatures, that don't use much tools or items. The Rain World maps are generally open - they don't have locked doors that can be opened with items or switches. This means that there are extremely few situations where something is possible to do if something else is done first. Categorically, every action is either possible or not possible, always. Either I can get up on that ledge, or I can't. Either I can hunt that prey, or I'm speared to a wall. Among the possible actions, however, there is a wild variation of desirability.

This means that Rain World AI is about

Decision Making, not Problem Solving

This notion has me currently leaning in this direction. But the behavior trees seem pretty awesome too haha! I seriously don't know if anyone made it all the way through this monster of a post, but either way it was good to get my mind sorted out. As always, all your input is very welome!  Smiley





   jamesprimate on August 05, 2014, 04:40:11 AM:

the "Joar is too busy hanging out on an island to bother with an update" mini-update 281.5

So island or no, we took some time and talked about AI archetypes and what to do. The next step of that is developing the AI's "tracker", which plots the expected position of a creature or object for the AI to follow when that creature or object is out of view. Basically, it creates a mental "ghost image" estimation of where it thinks that target will be via some criteria. For example: a lizard chases you around a corner and can no longer see you. Which direction does it take to continue to follow you? THAT'S the tracker. As you can imagine, this has big significance for hiding, sneaking and plotting, AKA a bunch of Rain World.

Joar had 2 options for this: a tile-based method and a physics-based method, each with certain advantages:

* Tile-based seems more robust in general but suffers from a lack of granular resolution (1/20th as accurate as physics method) and difficulty predicting more "physics-y" shapes like parabolas (such as the arc of a jumping slugcat!), that might occur.

* Physics-based method models parabolas and gravity well and also has has the advantage of being able to easily and more accurately model the velocity / vector of an object to "ghost image", but could potentially suffer from "in-between state" jitter and other weirdness.

So the decision was of course to do BOTH: Tile-based tracking for objects on the ground and then physics-based tracking kicks in for jumps (and perhaps flying behaviors.) And that's what he's up to right this moment!   Hand Metal Right

I'm getting assorted things prepared for PAX Prime, where we'll be showing the Rain World alpha again at the Adult Swim booth. Also, I don't talk about this too much in here, but the Rain World soundtrack is getting deeeeep: Well over 60 tracks written so far. Not all of those specific ones will be used of course, but the way things are mapped out now, 70-100 tracks might be where it ends up. Kickstarter backers could wind up with a nice 3-4 disc set. Quite a bargain! XD





   JLJac on August 05, 2014, 08:27:53 AM:

And now, straight from the island in the Swedish countryside!

Update 282
After talking a little with James, we have started to pin down the AI stuff some. Still I feel it might need some digestion, and have instead started on the next (and last) module that will be shared by almost all AI creatures - the Tracker.

The Tracker module is basically a piece of code that makes creatures be not omniscient. It creates ghosts for each other creature that the creature knows of, and acts as a combination of visual processing unit, memory and anticipation/prognosis intelligence.

As James described, the Tracker runs a ghost for each other creature. When the other creature is clearly visible, the ghost will be updated to its position each frame. When obscured, the ghost will fulfill two functions - in the short term anticipating where the creature might be (it went in through that passage, it ought to pop out on the other side) and in the long term remembering where the creature was last seen.

This is the creature's "internal reflection of the world", it can never ask the game engine directly for info on where creatures are, but always have to go through this sometimes incorrect filter.

This is the Tracker as it stands after one day of work. The debug visualization is a little wonky because the the laser is only displayed when the lizard sees the slugcat's upper body, but the ghost is set to visible mode on seeing the lower body as well.



As you can see the "anticipation of movement" stuff is not really done yet. In simple cases like this, when there is pretty much only one way to go, the ghost should be able to follow a corridor through many twists and turns. This is where I'm planning on having the tile-based movement kick in - it'll move smoothly until it inevitably gets stuck in a corner, then it will start to evaluate its further movement options on a tile-by-tile basis.

Also the ghost should respect what tiles are considered accessible and inaccessible to the creature being emulated.

The basic framework for creating, maintaining and deleting ghosts seem to be working fine though. This system also potentially allows for multiple ghosts tied to the same creature, which could create interesting options where an AI creature could for example evaluate both options at a road fork or the like.





   jamesprimate on August 05, 2014, 12:11:09 PM:

And now, straight from the island in the Swedish countryside!

Update 282
After talking a little with James, we have started to pin down the AI stuff some. Still I feel it might need some digestion, and have instead started on the next (and last) module that will be shared by almost all AI creatures - the Tracker.

The Tracker module is basically a piece of code that makes creatures be not omniscient. It creates ghosts for each other creature that the creature knows of, and acts as a combination of visual processing unit, memory and anticipation/prognosis intelligence.

As James described, the Tracker runs a ghost for each other creature. When the other creature is clearly visible, the ghost will be updated to its position each frame. When obscured, the ghost will fulfill two functions - in the short term anticipating where the creature might be (it went in through that passage, it ought to pop out on the other side) and in the long term remembering where the creature was last seen.

This is the creature's "internal reflection of the world", it can never ask the game engine directly for info on where creatures are, but always have to go through this sometimes incorrect filter.

This is the Tracker as it stands after one day of work. The debug visualization is a little wonky because the the laser is only displayed when the lizard sees the slugcat's upper body, but the ghost is set to visible mode on seeing the lower body as well.



As you can see the "anticipation of movement" stuff is not really done yet. In simple cases like this, when there is pretty much only one way to go, the ghost should be able to follow a corridor through many twists and turns. This is where I'm planning on having the tile-based movement kick in - it'll move smoothly until it inevitably gets stuck in a corner, then it will start to evaluate its further movement options on a tile-by-tile basis.

Also the ghost should respect what tiles are considered accessible and inaccessible to the creature being emulated.

The basic framework for creating, maintaining and deleting ghosts seem to be working fine though. This system also potentially allows for multiple ghosts tied to the same creature, which could create interesting options where an AI creature could for example evaluate both options at a road fork or the like.

the gif isnt work for me for some reason. anyone else having this prob? i'd LOOOOOOVE to see it





   jamesprimate on August 05, 2014, 04:05:23 PM (Last Edit: August 05, 2014, 07:14:27 PM):

Image is broken because the link sends us to the site where the image is stored and is actually not the image

Here is the gif


yooo! thanks this is really cool

people are going to see this gif out of context and be like "COOOOL RAIN WORLD HAS LAZZZERS NOW!!!!"

they'll be so disappointed





   JLJac on August 06, 2014, 07:18:20 AM:

My usual upload service wouldn't work for some reason, so I had to use another. Here it is again, anyhow:




Update 283
Inspired by the occupancy grid article, I've started developing a solution with another level of hierarchy. Instead of just the tracker owning a bunch of ghosts, each of which knows which creature it's supposed to be emulating, the tracker now have a list of "creatureRepresentatives", and those have a bunch of ghosts each. When the creature is actually seen, this list is shaven off from the second position, and the very first ghost is put at the creature's position. When it's not seen, the ghosts are allowed to mill about.

I now have some basic ghost movement as well. It takes the allowed movements of the emulated creature into consideration, and moves to nearby tiles. It prefers to go in the same general direction as the creature was last seen moving in. When reaching a road fork it will sometimes split into two.

I'd post a gif of a million ghosts splitting over and over until it looked like mayhem, but I'm in the middle of transitioning to the representative system, so the game won't run ATM. Gifs tomorrow!





   JLJac on August 07, 2014, 06:32:22 AM:

Update 284
When reaching a road fork, where one option is considered ideal and the other slightly less so, a ghost is now able to clone itself. The clone gets a slightly lower score, which is accounted for in the eventual ghost ranking process.

Ghosts travel slowly, as we want creatures to assume that their prey is at least somewhere close to where they lost it. Over a large amount of time however, the ghosts will travel to pretty much all corners of the world, which means that a creature that has been long lost will be looked for in much more diverse locations than one that disappeared around a corner just two seconds ago. Each time a ghost travels, it will check if it is in the line of sight of the creature inside which's head it's living. If so, it'll freeze in place - it wouldn't make sense for the the creature to assume that the prey could have traversed any distance that is actually visible to it.

In this gif (trying yet another hosting service, hope this one will work for everyone!) you can see a (stuck) lizard lose track of a slugcat. Notice how after time has been sped up, the possible locations are scattered all over the lower left area, but also contained within the area which is not visible to the lizard. It knows the slugcat has to be in there somewhere, but becomes less and less sure of exactly where as time goes by. Here the ghost count is capped at 15, I think the actual game would generally use fewer.



When the slugcat is actually seen, all ghosts except one are removed. The ghost that's slightly larger and pulsating is the one that's considered the best guess for where the slugcat might be. This is where the ranking comes into play. The ghost score has several things feeding into it. Traveling in the same general direction as the tracked creature was last seen moving in is one, proximity to the last seen coordinate and the tracking creature are others, intended to make search behaviors look more reasonable. The search behavior will probably be mainly about going after this "best bet" ghost until all of them are gone.

When the lizard is moved close to the ghosts, they disappear. Note that they don't disappear as soon as the lizard is able to see them, but the lizard has to be somewhat close as well. This is for a few different reasons. One is that when the ghost cap is reached, and a ghost reaches a road fork, it won't pick one direction, but instead just freeze in place (seemed more reasonable to me to stop at the crossroads rather than picking an option at random that would take you even further away from where the creature was last spotted). Another is that the ghosts are not in every tile in the possible area, like an actual Occupancy Probability Grid. Both of these are generally the same concept; that these ghost coordinates are not strictly "places where I believe the creature to be", but rather "places that would be a good idea to go when searching for this creature" if you get the distinction. The latter can't just be dismissed at a glance, but takes some examination before its hypothesis can be falsified.

Many of the parameters for this whole thing can be customized, such as the max amount of ghosts per tracked creature, the speed of the ghosts (as a fraction of the tracked creature's average speed - I imagine I'll generally want the ghosts to move slower than the actual creatures as a conservative guess that's closer to the last seen coordinate is better than a wild guess) etc.

Ideally this system should also be inter-room, so that a ghost could pass through a shortcut into a neighboring room  - this I haven't implemented yet. But generally I'm happy with the system. I will however add some functionality to dumb it down to work better for the slightly thicker creatures. An example would be that a dumb green lizard probably shouldn't be able to be too clever about how you're able to climb and it's not. Instead it should assume that you have the same limitations it has, and emulate your ghosts with its own terrain preferences. That way when you climb up and away from the area it's searching, the proper reaction should be confusion.





   JLJac on August 08, 2014, 02:16:25 AM:

Yep, it's assumed that the creatures have full knowledge of the map layouts. There are a couple of reasons for this. The player has access to the mythical third dimension, allowing them to view the entire room simultaneously, and I think seeing other creatures through walls is quite enough of a head start. Also it kind of makes sense - as the environments are static - for the creatures to know their premises. And, making AI, path finder and tracker account for probability of unknown tiles is a huuuuge pain programming-wise, that would most likely have no pay off in the gameplay aspect except making the creatures behave stupidly and unpredictably. Saving which tiles are discovered would consume massive amounts of memory as well. So, I've decided that the creatures are always aware of the terrain layout, though they are not omniscient as to where other creatures currently are on the maps.





   jamesprimate on August 08, 2014, 04:28:15 AM:

An example would be that a dumb green lizard probably shouldn't be able to be too clever about how you're able to climb and it's not. Instead it should assume that you have the same limitations it has, and emulate your ghosts with its own terrain preferences. That way when you climb up and away from the area it's searching, the proper reaction should be confusion.

classic green lizards!

very cool visualization. how do you suppose that system scales? it is something light-weight enough to run, say, 15-20 instances each with 15 ghosts?





   JLJac on August 08, 2014, 08:05:43 AM (Last Edit: August 08, 2014, 08:18:35 AM):

I think so! Also I've noticed that the search behavior doesn't change much from 2 ghosts and up, so I think 3 or 4 ghosts would be just fine. Also, for creatures that the tracking creature doesn't have much interest in (neither prey nor threat) tracking just 1 ghost or none at all will save some space, if that becomes an issue.

Update 285
Made the ghosts work between different rooms.

Created a system which gives ghosts a "second chance" before dismissing them on visual contact - this second chance consists of scurrying away very quickly hoping to find an obscured tile. This comes in handy when a ghost is sitting for example next to a short cut entrance, in that case it makes more sense to just move the ghost in through the shortcut when it's seen, rather than remove it. Its score is however downgraded, so the hypothesis of that particular ghost is considered less likely.

When I had this "second chance" system in place, I decided to have that apply to the last existing ghost always, and never delete it. This means that the tracking creature will always have some theory about where the tracked creature might be, though the hypothesis is considered more and more unlikely.

By having the lizard follow the "best guess" ghost of the player, I managed to have it display some pretty cool search behavior.



The little pink number is the estimated chance of relocating the player - this will play a part in actual AI decisions later, such as when it's time to abandon a hunt. The chance is calculated using an average number between the amount of ticks since the player was last spotted and the lowest generation among the ghosts (times ten). This means it takes both pure time and how much effort it has actually put into looking for the player into account.

Inspired by the Utility Based AI stuff, I made this curve for evaluating that probability:



Up until the intersection (45 in the image) it follows the red curve, after that the blue one. This means that during the very first seconds it will estimate the chance of re-locating the creature as pretty high, then it will start to drop quickly. Then the blue curve kicks in, which never actually reaches 0, just gets closer and closer to it.

The idea is that the Tracker will always be able to suggest some small chance of finding any given creature and a coordinate to start looking, even though the search is more or less futile. This way I can make sure that all the decisions are actually made in the decision making AI. If the Tracker could "give up" that would essentially mean that the Tracker made the decision to stop looking for that creature, which isn't its job.

Here's a gif of the lizard prototype trying to search for a player that has been removed from the map. The estimated probability goes down, but it could theoretically continue this search for ever and ever unless told otherwise. Note how the search is first focused to the nearby area to where the creature was last spotted, but later moves on to further away areas as all of those options are exhausted.






   jamesprimate on August 09, 2014, 09:08:26 AM:

I love it when devlogs get real like this, with people breaking out the the graphs and the log and the curve functions





   JLJac on August 11, 2014, 08:02:09 AM:

Oh, but the point is that after the plateaux it should become a 1/x type of curve, that approaches 0 but never gets to it ... I really love your graph tool! Which one is it?

Update 286
Today wasn't the best day, as I spent quite a lot of it messing with flight tickets and online payment and stuff. Still got somewhere though! Tied together some lose ends in the Tracker module, and fixed a few errors where it would throw null reference exceptions. Also made it able to call out to its parent AI when a creature is spotted, with a distinction between first time spottings and spotting a creature that it's already aware of.

With this a pretty cool mile stone is reached - the shared AI assets are done! That would be the Path Finder and the Tracker, which are AI modules that are going to be used by pretty much every AI creature. There's an asterisk after done, as they will be revisited to accommodate for the needs of the individual creatures, but they are done as far as they can be before starting on making the creatures. This means that the next step is a step away from these boring generic functions - now I can actually start creating some content! The first creature up is the lizard, I imagine. Stay tuned!





   JLJac on August 12, 2014, 08:08:43 AM:

Update 287
Lizard animations are slowly coming together. But also I spent 40 minutes chasing my own tail (WHHHHHYYYYYYY DOEEEEEEESSSSS THISSSSSS VARRRRRIIIIABLLLEEEE CHAAAAAAAAAAAANNNNGEEEE!!!?!?!?!?!?)before finding out that I had put a 1 instead of a 2 in a specific spot - the line was copied from another place and I hadn't gotten around to change that specific digit. By the time I found out I had commented out pretty much every line in the entire game, disabling physics, gravity, and the very force that holds creatures together. The game was reduced to some floating body parts drifting in and out through the walls. So then I had to repair everything after my furious bug hunt.

It's crazy how focused I get when something like that happens... Nothing matters except squashing that one bug.

Speaking of bugs, another old friend has returned: when enabling the lizard flip (when they turn 180 degrees on a flat floor) the good old behavior where they just LOVE to do that flip over and over has resurfaced. They'll see me, do a flip for fun, another flip in the other direction, then one more just for the hell of it, and then they need to do a last one so they'll actually face the correct direction before they start moving. It looks ridiculous. Giving the flip animation a pathing weight corresponding to walking seven times around the world doesn't seem to work, they just love the flipping all that much. Last time I came up with some weird solution where I wouldn't allow it to flip close to where it flipped the last time, but that was a hack, this time I'll try to find out what's actually going on...





   jamesprimate on August 12, 2014, 07:55:59 PM:

id say thats a fair assessment





   JLJac on August 13, 2014, 11:34:46 AM:

98% autobiographic.

Update 288
Ok, got some good progress today, even though it isn't much to look at. Quite a lot of the lizard animations are in now - it's able to walk, climb, crawl, turn on flat surfaces, reach across gaps horizontally and vertically, and drop down to floors below it (though not very gracefully). Coming up is the ability to drop to pipes and grab them mid air, this always fails miserably as it is. I might have to nail the upper body to the grab spot for a few frames so the lower body can do a cool swinging motion before the lizard gains control and gets up on the pipe.

What's cool here is that the creature is made into a physical object with forces pulling it along, rather than just a ghost like sprite floating along. It's really fun already to throw spears at it and see how it tries to re-adjust and find new footing to continue moving.

The body physics are going to be cooler than in the old game. Whenever no body segment is inside a tile that's considered legal to that lizard, a "framesInLegalTerrain" counter is set to 0. When any segment is legal, it starts ticking.

If this "framesInLegalTerrain" is above 10 (numbers are subject to change/diversity between lizard breeds) the physics behave differently - it is assumed that the lizard is in total control of its situation, and the velocities of the body segments are slowed down each frame, and they aren't affected by gravity. The body basically "floats" around. If the value is less than 10 though, the body behaves as any physical body in the game, and can be tossed around the level. Basically I'm trying to get a good balance between the lizard being an agent and a physical body, where it's supposed to behave like a little bit of both.

In this gif I'm tossing a lizard around as it tries to traverse this courtyard - whenever I press a button it's pulled towards the mouse pointer. The idea is that it should be able to continue moving towards its goal despite being antagonized like this - it shouldn't get stuck or be unable to adapt to a new situation.






   JLJac on August 14, 2014, 11:10:39 AM:

Update 289
Lizard movement is now basically working as I intended it to. Dropping from ledges, grabbing, and all that stuff is in and reasonably cool looking for pink boxes.

Other than that efforts have been somewhat unfocused today - I've started many things and finished few. Flipping back and forth has been sorted by having the lizard have a counter set to something like 2 seconds when flipping, and during that time the path finder will assign the flip move a last resort status.

The embryo of an engine that will understand when the creature has gotten stuck is started on but not more. The idea here is that when a creature gets stuck it will be able to understand where and possibly even why it got stuck, and then be able to actually do something else rather than just trying the same thing over and over. It's actually a little bit of learning, but it will basically boil down to "not getting stuck as much" rather than anything mind blowing. More on that when I actually get to it.

The last unfinished effort of the day was starting on the system for dividing the lizard into separate breeds. This took some thinking; where to put the division in the code? The current solution is that each lizard breed has its own Creature Template, all of which inherit from a parent Creature Template, and that they also own a Type Object containing some breed-specific parameters. We'll see how that works out!





   JLJac on August 15, 2014, 11:01:21 AM:

Update 290
Got some lizard breeds in! It's funny how just some small differences in speed, size etc drastically change the personalities you project on these boxes. They still suffer from quite a lot of getting stuck everywhere, but it's getting there!



Also, these inheritance based generalized systems... wow. Having laid out the general frame work, it really is super fast to define stuff! If I'm going to want another lizard breed down the line, it'll be like a day to add it!





   jamesprimate on August 15, 2014, 07:49:36 PM:

Update 290
Got some lizard breeds in! It's funny how just some small differences in speed, size etc drastically change the personalities you project on these boxes. They still suffer from quite a lot of getting stuck everywhere, but it's getting there!



Also, these inheritance based generalized systems... wow. Having laid out the general frame work, it really is super fast to define stuff! If I'm going to want another lizard breed down the line, it'll be like a day to add it!

Joar, you don't even know how happy this gif makes me  Tears of Joy





   JLJac on August 16, 2014, 01:17:37 AM (Last Edit: August 16, 2014, 01:25:51 AM):

Joar, you don't even know how happy this gif makes me  Tears of Joy
Hand Thumbs Up Left Cool

It's looking more and more like Rain World with every update!

Quick question though, it seems like for the A.I./Slugcat/Pathfinding/etc you are creating new solutions, completely different from the Lingo build. My question is, why? Is it because you're using Unity now? Or maybe that you realized that the Lingo version was inefficient? (I've been wondering this for a while now, so I hope it's not confusing Tongue)
The reason why I'm re-working a lot of the solutions is that in the old build, I never intended to have more content. Everything I added was "the last thing before I'm gonna ship this", meaning that I never did generally applicable solutions, only patch work and quick fixes for whatever I had in front of me at the time. In the end the bulk of the game ended up being band-aids on band-aids, meaning that the machinery worked alright, but whenever something was to be changed or added, it was a mess.

This time around, I'm making generalized systems for everything, such as path finding. This means that down the line, if I want to for example add a creature, I can just plug in the path finder, and bam, it's up and running (after three hours of tweaking, so maybe not BAM, but way faster than building it from the ground up). If there is a bug in said path finder, it will have to be fixed in just one place, rather than one for each creature.

And when I'm at it, of course I'm taking the re-write as an opportunity to do some optimizations. I'm not really "using Unity" from how I understand it, I'm using it for rendering sprites and I use some of its C# library, but I'm not doing anything in the Unity editor. However I am converting the game, from Lingo to C#, so while I can glance at the old code I in fact have to re-write everything. For the slugcat I did a straight port of the old movement behavior, but with the lizard I'm not quite as thrilled about the old physics, so I'm taking this opportunity to do some changes.

Edit: Oh, and a question for you seasoned programmers out there - I think I have an infinite loop somewhere in my code. Unity just freezes, and it's really hard to find what's causing it because each time I have to force exit with the task manager and restart everything. It's somewhere in the lizard code, because it only happens when there are lizards... Are there any ways to find infinite loops? Can you for example tell the monodevelop debugger to throw an exception if any loop has run more than 1000 times, so I can find where this thing is hiding?





   jamesprimate on August 18, 2014, 01:56:36 AM:

the thing that was posted was WAAAAY old (like, years) and wouldnt be any sort of representation. even the builds we're showing at PAX and such are 6-7 months old at this point and in a completely other programming language! a lot has changed, so let us get rain world to a point where we are proud to show it!





   JLJac on August 18, 2014, 06:45:32 AM:

Absolutely  Grin

Update 291
Found that darn bug! Thanks to Gimym JIMBERT, as always! In one place I made a division with a counter that could, at times, be 0. Contrary to throwing an error, as I'm used to from director, it set the value to NaN. In this case that value was the vertical velocity, which was then applied to the vertical position, and then at the end of the frame when it wanted to check terrain collision it had to loop through all the tiles from negative infinity to where the object was at, and that's the infinite loop. It wasn't really infinite though, given a few years it might have completed  Cheesy

Other than that, further work on assorted anti-getting-stuck measures. The current task - if having moved into a dead end, the lizard should start moving backwards, and continue moving backwards through bends and corners until it reaches an intersection and can pick another direction. Proved to be somewhat tricky, but I have a few ideas!





   JLJac on August 19, 2014, 11:32:54 AM:

Update 292
Finally I've gotten to work on the lizard cosmetics!



There is some kind of tail now!

James and I have also been having a few talks today. One of them was about was about individual variation on creatures. We both like the idea that each creature should have slight individual deviances, probably from a random seed, to make them look less like clones.

The problem as I see it is this - we have the breeds of lizards. The idea is that the player should be able to learn the behavior of each breed. "Greens are slow and dumb" for example, or "Blues can't take much abuse, but can climb walls". What I worry about is two scenarios. One is that individual differences drowns the breed traits, so that everything becomes a random sludge. The other is that in order to not end up in the random sludge, we will need to make the individual traits so very small that they are actually not significant in any way, and then the effort was in vain.

One solution is to have the differences be purely cosmetic. Short tail, long tail, that sort of stuff. This is safe, so I think we might do this kind of stuff regardless.

Another is to have somewhat rare, but very clear unique individuals that appear late in the game when you've already come to know the categories. That would be stuff like "It is very clearly a blue lizard in every part of its behavior, but it's large as a green lizard". The kind of stuff that can be easily understood by an experienced player. This solution would probably take on a bit of a flavor of "bosses", as these deviant individuals are likely going to be mostly harder than regulars, and the element of unfamiliarity and surprise will play in their favor either way.

The jury is still out on this one, and luckily the jury probably have quite a lot of time to think about it before it's time for an implementation. But it's never a bad thing to plan ahead!

What do you guys think?





   JLJac on August 20, 2014, 10:27:29 AM:

Stop me before we get there!

Update 293
Feet are in! And some more sophisticated tail animation.

This time around I decided I wanted to give the lizard breeds more characteristic walks. They are all a tad slow at this point I think, that is a gameplay balance question that will be tweaked a lot later. Quite a lot of the stuff that's supposed to be in isn't yet - for example they are supposed to move with different efficiency when occupying different terrain (pink can climb on poles, but it's somewhat slow and clumsy) and when moving in different directions (green is considerably slower in any vertical movement that requires it to lift its heavy body).

Here's the pink lizard with legs. It's a bit boring and anonymous in my opinion - which it's partly supposed to be as pink is the default, but it could have something more going on, definitely. Remember that this is just movement through the terrain, so they still don't have much to work with to convey personality.




Here's the green one. It's heavier, slower, and moving more unevenly. It also lifts its feet with each step, sometimes resting on its belly for a moment between steps. Green is also supposed to have a stiffer tail than the others, to give it a bit of an alligator feel contrary to the soft gecko bodies of most of them. Can you tell?




Blue has a rapid, even, smooth movement where all four limbs are constantly working. You might also notice how it's able to grab on to walls, and how it is more agile and more inclined to climb.




So much fun! I was dying to get back to this kind of stuff :D The feet still have some weird flickering at times, and I'm not sure how happy I am about when the legs overlap each other perfectly, so there is still tweaking to do. For fun, here's one of them moving together:



You might notice that the interactions still feel a little blocky and uneven. There are some getting stuck scenarios left, especially as the lizards are not aware of each other at this point. When two of them get in a deadlock pushing against each other they have no protocol for what to do in that situation. But you can see some interesting stuff too, such as how the green one is way heavier than the blue one and pushes it out of the way without any impact on its own movement. In the future I hope to create a really interesting dynamic between lizards, having them getting annoyed with each other and whatnot.





   jamesprimate on August 20, 2014, 10:42:36 AM:

this is so massively exciting. i seriously cant believe this is ONE DAY after that last post.





   JLJac on August 20, 2014, 11:18:36 AM:

Yeah, this is not behavior, just movement. They have no AI at this point, so your observation is correct  Hand Thumbs Up Right





   jamesprimate on August 20, 2014, 03:02:24 PM:

one thing joar and i were talking about earlier is the difference in stride between the lingo lizards and these.

previously, locomotion was done via a sort of faked "ghost pull" situation, meaning that the lizard walk was basically the body being dragged along the ground. now in the new version there are nice actual legs to walk on, and so the stance and stride of the lizard has changed a little. HAS SCIENCE GONE TOO FAR??

this is all adjustable though, so your guys opinion on the "feel" of new lizards stride vs the old could be really helpful!

to me the new lizards look much more agile, which could make them appear even more threatening (and thats a good thing of course!) maybe a mix of some low and some high? keep the slower lizards close to the ground and the faster ones with the more agile stance? wot u think





   JLJac on August 21, 2014, 06:17:16 AM:

@Loren Schmidt, yeah, that sounds a lot like what I've been trying to do, but I might have to throw a few more counters in there to get a good rhythm to it o.0 Are you doing procedural animation too?

@Kytin, interesting idea! Maybe we could keep physical traits and "personality" separate, and only have the latter be individual...

Update 294

I made a couple of pretty big infra structure changes, such as moving all of the lizard breed definition stuff to the same place. Now there's a static class which is fed a lizard color and returns the complete template, all of it based on one huge enum switch. Maybe not the most elegant solution, but it works flawlessly and is only supposed to run once when the game is started up.

Also got the thing where lizards have different speeds in different terrain and when moving in different directions down. At this point it averages between the terrain type that each of the three body chunks occupy.

Oh, and sometimes you just have to do something that doesn't make any sense to the schedule, but you want to do just for fun! So I made the lizards' limbs have health, and go limp and useless if they're too low.



This is going to be really cool later, when spears and stuff is in... Note how one of the front legs is sometimes working, sometimes not - when they have low health, but not 0, they're switched on and off a bit like that.

The other thing I got started on today was an obstacle tracker. Because of the physics based nature of RW, not everything is very predictable, and even after me trying to eliminate all the getting stuck scenarios, there will be some obscure getting stuck scenarios left. The obstacle tracker isn't only there to patch over problems I'm too lazy to fix, though Wink It plays a part in making the NPC's seem more intelligent over all, and makes them able to account for some weird unpredictable scenarios that might occur in any game session. What it basically boils down to is being able to identify that a certain move is not possible after a number of failed attempts, and trying something else.

This (rather tragic) gif shows a lizard that tries to climb up to the player, but is rather unsuccessful due to its limbs being disabled. The gif is sped up, because without functioning limbs the lizard is really slow.



Whenever a move fails, the destination tile is reported (red in the gif). After being reported a certain amount of times, the tile is marked as an obstacle (yellow) and the path finder is told to restart. This time around the yellow tiles will have a higher cost assigned to them.

This means that after trying to climb a couple of times, the lizard concludes that "OK, this isn't working" and decides to take another way up. This system works no matter what the obstacle is - if it's lame limbs, a stream of water, some heavy creature grabbing on to the lizards tail, anything.

This multiusability is both its strength and its problem - the lizard still isn't very smart about cause and effect. A smart lizard would deduce that climbing was the problem, not these specific tiles. With this system it might very well go to another climbing pole and try that before realizing that it has to get up some other way.

The point is, however, that this is a fallback. If I want to make the lizard able to understand that it can't climb without functioning limbs, that's something I'd write specifically in the AI ( if (functioningLimbs < 4) noClimb = true; )  but for all the scenarios I won't be able to predict, this fallback solution is a lot better than infinitely trying to get past some impossible hurdle.

Before it's done I want the obstacle tracker to have one more function - it should be able to identify when the obstacle is in fact a creature blocking its way. When a huge green lizard is sitting in an opening and a tiny blue one is pushing and pushing in vain to get through, it seems kind of unreasonable for it to assume that "it must be something wrong with this specific tile!" Also, once the green lizard is gone, the blue one should really stop avoiding that tile. So I think a specific framework for being blocked by colliding in other objects might be in place.





   JLJac on August 22, 2014, 11:03:03 AM:

Thanks! Yeah, there was a little bit of that in the old version. I don't want it to be too agonizing to watch them when injured, after all it's sort of unclear whether they are actually creatures like us capable of pain, but they should certainly react to injury in their behavior  Hand Thumbs Up Right

Update 295

Oh wow. Today was spent in vain. But it was awesome! But it was in vain. Basically I did what I do best, spent way too much time on monstrously complex AI machinery that no-one will ever notice.

Remember yesterday, when I talked about an obstacle tracker for other game objects? That's what I did, basically. The idea is pretty simple: On a "movement failed" call, first check if you have collided with any other creatures these last couple of frames. If so, don't write to the obstacle map (the one showed in the last post, where the lizard was able to figure out that climbing wasn't going to work after a couple of tries), but instead call the Obstacle Object Tracker, telling it which object you were supposedly blocked by.

The Obstacle Object Tracker has a list of suspected obstacle objects. It checks against that list, and if the object is already in there, it adds to a Reports integer. After a certain number of reports, the object is moved to the Confirmed Obstacles list. If it's not on the suspects list, it's added to it. All the suspects on the list that were not the right one this time around get a Lifetime counter decreased, and when it hits zero they are forgotten.

Whenever the path finder is asking a tile for its pathing cost, the Confirmed Obstacles list is checked, and if any of them are hanging out in that particular area, the cost is increased.

Simple enough!

Then it comes to my no omniscience purism. Say I'm a blue lizard. On my Confirmed Obstacles list is a green lizard, I've bumped into him 5 times and am frankly a bit tired of him, so whenever I'm pathing around the level I'd prefer not to run in to him again.

But... It was 240 frames ago since I saw him. And the creator of this little universe doesn't like omniscient AI, so I can't just ask the game engine for the position of the green lizard. Contrary, I have an AI component used for just that, the Tracker from a few pages back. I can ask the tracker where I think another creature is, but never ask for its position straight up.

So the Obstacle Object Tracker needs to be hooked up to the Tracker, with each object on the Confirmed Obstacles list having a reference to a Tracker ghost, so it can use that creature's supposed position when asking what tiles to avoid.

Problem is, that I don't want to have every creature track every creature - some creatures are not interested in each other as neither eat the other, and it would be total overkill for all of them to run 12 ghosts for every other for no reason. So I needed to make it so that when an object is moved from the Suspected Obstacles list to the Confirmed Obstacles list, the Tracker gets a call. The Tracker looks through its ghosts, and if it finds one for the obstacle creature, it returns it to the Obstacle Object Tracker to be stored. If it doesn't, the "A creature has been spotted" method is called, and a ghost is created and returned. In short, the tracker will start tracking that creature despite it being disinteresting because it has become interesting in the role of a physical obstacle to avoid.

[/insanity]

This means, if we return to the blue and the green lizard, that at this point a blue lizard can chose another path to its target because it's dodging a misconception of where it expects the green lizard to be. o_0

Do you think this comes across to the player? Hahahahahaha nooooooo it doesn't. But it was fun, and now it's in there, useful or not. At least it has helped dissolve huge knots of lizards being stuck in each other.

It does create some cool behavior though. When a big bunch of lizards are moving towards you, some of them will strategically take alternate routes as to not get stuck behind the crowd. This indirectly leads to some surrounding behavior that can be pretty nice. But boy, could it be done with simpler methods  Cheesy





   JLJac on August 25, 2014, 08:44:13 AM:

Update 296
Got a triangle mesh up and running for the lizard's tail. It's based on the player's tail, and was thus somewhat painless to get working. Paving the road has finally started to pay off. Also added a new function to my triangle mesh class - vertex coloration.



Because I've assigned color to the vertices, and the idea of this object is that triangles can share vertices, there are no sharp edges in the shape and the colors are stretched and bent like supposed to. When bent at very sharp angles you can see some edges, but I think it's acceptable for now.

I've also created a body for the lizard, which works similarly but also uses circular graphics as well. Basically it's a circle at each body segment with stretchable quads connecting them, expect it's not because there are also intermediary circles between the segments to smoothen the curve, and the very first segment is only rendered as a little stub because this is where the head is going to be.

The color might be a bit dark against the balck background - my monitor is brighter than most - but if you look at it at an angle you'll probably be able to see something  Tongue



A little slow motion and tossing around in there as well to show how the tails behave. I don't think all lizards will have colored tails like this - I kind of like the black tail - but maybe one or two might have something like it.





   jamesprimate on August 25, 2014, 09:10:13 AM:

oh wow those look absolutely incredible. the black gradient has is very "deadly creature" feel to it, like a poisonous frog or snake. If you dont use that coloration for all the lizards (i vote for that), then perhaps as a distinction for the larger "adult" versions of each breed.





   JLJac on August 26, 2014, 10:00:19 AM:

oh wow those look absolutely incredible. the black gradient has is very "deadly creature" feel to it, like a poisonous frog or snake. If you dont use that coloration for all the lizards (i vote for that), then perhaps as a distinction for the larger "adult" versions of each breed.
Haha if you think so, we can keep it! But then I don't know about the little fin the blue one used to have, maybe we'll have to come up with something else there...

Those are so smooth...and terrifying. Loving the faint 3D effect when the tails change direction, even if unintentional. It's unbelievable how much you can do in a day.
Thanks! Yeah, I like that effect too - it's just a side effect of the tail triangles having been added root to tip - the brighter tip segments are rendered on top.

Tails look amazingly fluid. So are we going to have some

stalking action going on? Because that would be terrifying to think you're safe, only for the scenery rustle and see the tails flick around and then disappear again
That exact scenario can hardly be recreated in our sidescroller view, but we could definitely have them hiding in vegetation at times, with only the tail spottable!

Update 297
Spent most of the work day on a train, which doesn't lend itself well to graphics work as I can't use the mouse - instead I did some re-structuring in the creature templates and other less exciting stuff. I also made a few changes to the lizards, moving all of their behavior to a new method call that's only called from the main update call if the creature is neither dead nor stunned - in those cases it'll just lie limp. Got the limbs' deactivation behavior respond to that as well, making the whole creature relax when stunned.

When getting home I did get around to converting some sprite sheets though, and now I have most of the head graphics over in the Unity version. I've managed to implement head rotation, but not really any other behavior - it's still just staring straight forward with a dead gaze. I will be able to animate what the jaw looks like when opened and closed etc, but having the creature actually do these things by itself is for when I'm writing the AI.



The head consists of 5 sprites - the eyes, the head, the teeth in the upper jaw, the teeth in the lower jaw and the lower jaw itself. I'm happy to see all of these align, one worry was that there would be little gaps between them at places. When the lizard bites a creature, that creature is supposed to be displayed below some of those sprites, and above others, to make it look like it's stuck between the jaws. I still haven't figured out how to make that happen technically. One idea is that each lizard could have its own sprite container (similar to a movie script in flash) between its jaws, where all the sprites of the bitten creature could be moved. But when to move them there? You don't want the jaws to snap shut and then have the lower jaw blink and disappear behind the bitten creature...





   JLJac on August 27, 2014, 11:37:40 AM:

Always and for ever Grin

Update 298
Did a lot of work on the head today - made it so that it can look at an arbitrary point in space that isn't necessarily the pathing target or straight forward, made it so that the head can collide with terrain, and got the jaw opening motion down. Many of these animation quirks are based on values defined in the breed object, meaning that the different breeds will have subtle differences in how they move. Still not happy enough with the head to call it done, but it's good enough until I have the rest of the creature animated and can get to the polish phase.

I also ported the lizard leg sprite sheet for the unity build, and have been fighting with some pretty ... interesting animation.



What do you say guys, still not really there yet?  Cheesy

At the end of the day it looked a little bit more civil:



But the legs still need a lot of work. A dirty secret of my trade here is that the legs never really have looked substantially better than this, but the fact that everything is merged into a flat-color silhouette has really helped obscure some of the worst part (the joints where the legs connect to the body) while bringing forward the better parts (the tips of the limbs). I'll keep working with it until I find it acceptable with the legs visible like this though, and hopefully it will all look really cool when the final coloration is in.

One thing I've started to notice is that the lizards probably take too small steps, this tip-toeing doesn't really look very menacing. This problem is in the "search for a grab point" code though, which is a pretty messy chunk of logic, so that will take some deep diving to sort out.





   jamesprimate on August 27, 2014, 11:52:57 AM:

Quote

well now THATS disturbing! quite Giger-esque. motions look great though!





   JLJac on August 28, 2014, 08:28:20 AM:

I'm working on it - it's going to drop your jaw when it's done  Who, Me?

Update 299
Not all days can be good days, and today certainly wasn't. As you can see from the earlier gifs, the steps the lizards take are too small. I set out to do something about that.

I identified the problem to be this; when the foot decides that it is trailing too far behind it looks for a new grip position. It finds one that is a good choice at the time, a grip in the terrain somewhere in front of it in the traveling direction.

The problem is that it takes a little time for the foot to travel there. When it gets there, some five frames or such later, the entire body has moved forward. Suddenly this spot isn't in front of the body at all, but right beneath it. The fact that the limbs never really get in front of where they are connected to the body makes it so that they trail behind, and look like they are being dragged rather than the source of locomotion.

My idea for a solution has been that they should have another phase except from just gripping and moving towards a new grip. This phase would be the "catching up" phase. When the limb trails behind, it shouldn't immediately look for a new place to go, first it should just focus on moving forward. When it catches up with where it's connected to the body, then it should look for somewhere to grip in front of it.

This looked very promising to begin with. The lizards stopped the tip-toeing and dragging their legs behind them, and took long, menacing, sneaky strides. Then a bunch of problems started to show up.

It only really worked on flat floors, in more complex terrain the limbs would reach for places they weren't actually able to reach. Upon closer inspection I noticed this also happened on the flat floors at times. If all the limbs were synced they'd all reach forward, but with no limbs used for locomotion they wouldn't ever get there, and the lizard would just lie there pathetically stretching all four feet towards some destination it's never going to get to. The same could happen when the direction changes, when the lizard got out of stunned mode, etc etc.

I've tried so many workarounds. The most immediate idea was to have the limbs reach far only when the lizard is moving fast, but closer the slower it moves. This worked OK, but with bad timing all limbs could still reach far at the same time, and there it would lie twitching on the floor. I tried a lot of other stuff, such as basing reach distance on how many other limbs are currently connected, and so on and so on.

You might think "only accept reach destinations that are actually within reach!" but it's not quite as easy as that. When the reach destination is determined, the body is in another place than where it will be when the foot actually touches ground. The only solution I can come up with on the go is some very sophisticated algorithm that first chooses a preliminary reaching position, and when trying and failing to reach that re-evaluates to the closest valid position...

Didn't crack this nut today o_____0 Remember kids, procedural animation isn't only fun and games! Take heed!





   JLJac on August 28, 2014, 09:42:09 AM:

That was the idea, and it worked! But what if the body doesn't get there? Because the whole creature decides to turn around and go the other direction, or because all four limbs aim for the sky simultaneously, none of them get a grip, and the whole thing just ends up on its belly, reaching for a future that will never come?

I think there is a solution in having it re-evaluate if it ends up in a position where it is stretching but not reaching, and the second time around only consider strictly valid grasping points... But I'll have to let it simmer around a bit until I can come up with a way of turning it into actual code.





   JLJac on August 29, 2014, 09:01:44 AM:

Thanks for the awesome input guys!

@Christian, that's a good idea. The problem is that the tracker is on another scale, it operates tile by tile, while the feet are pixel by pixel. Also the lizard knows where it is going most of the time (forward) but in some scenarios such as turning around the prediction turns out wrong - it can try to predict, but it can't see the future!

@Gimym JIMBERT, as always, thanks a thousand times for the interesting resources!

@Lee, wow! That's awesome! Actually what you describe seems rather close to what I have, except that you describe some kind of "overmind" controlling all the four limbs, making sure that they move cross-wise etc. In my solution the limbs are more autonomous, which has good parts and bad parts. The good part is that they are less static - they don't need permisson to move, making the movement less of an "animation" and more intelligent. The bad part is that they're not intelligent, and I end up with stupid bugs. I actually implemented something similar to your solution, but instead of placing it in a coordinator object I connected the feet into pairs and enabled them to know some stuff about their partner, changing their behavior depending on what the partner is up to.

Update 300
Ok, so I haven't really had a huge break through, but I've moved forward through blood sweat and tears instead. The new solution has many little mechanics in it, but the core difference is this: The first time a limb tries to find a reach position, it reaches too far in front of itself, to where it expects the body to be in the next couple of frames. If the body does catch up and the position actually becomes reachable, all is good, it goes there and grabs the terrain.

If the lizard changes direction or some other weirdness however, so the target never becomes reachable, a counter starts to tick. Every frame that the reach target is outside of the limb's reach this counter increases. When it reaches a certain number (I used 15 frames) the limb decides that OK, this target is probably not going to be within reach, ever. It then tries to find a new target, this time playing it super safe, only going for terrain that is strictly within reach.

On top of this other systems are implemented to smoothen the walk cycle. One such is that if every limb is grabbing terrain, the one that has been doing so the longest will automatically let go and go find a new target. This keeps all four limbs from syncing up in the same cycle of grabbing and moving.

Another one is that the front limbs and hind limbs are connected into pairs. Or rather, one of them is aware of the other. The one hind leg that knows about the other hind leg will try to be at the opposite of the other's cycle, and the same for the front legs.

Slow motion of pink lizard moving (and looking up, I have my mouse pointer up there):



The steps are longer, and the movement is smoother. There are still problems in more complex terrain though, but I feel this is a good start.

For the green lizard I don't want the movement to be smooth, and have allowed the limbs to sync up:



I'm still not entirely happy with it though. The legs should move at the same time, but not sync up so perfectly. I'll look into making them have just slightly different grabbing targets. Also the foot should obviously not move above the hip making the leg turn like a wheel.

The blue lizard takes smaller steps. It looks kind of strange now because the limbs are as big as those of the others - that'll become more proportional once I get the movement down.



In 2D terrain that isn't just a flat floor many of the problems become evident. The limbs have a bit of flailing, and some hesitation when they try to reach for terrain but fail and change their minds. For these specific climbing scenarios the limb movement actually looked better before I made the changes, so I'm contemplating making some kind of differentiation between floor crawling and climbing and using different systems for limb movement depending on the situation.

Hahaha and also, I've finally encountered the backside of inheritance! All this messing around with the limb code has somehow made the poor slugcat's arms disappear! Don't worry though, all the code I wrote is intact, so getting them back again will probably be a quick fix Smiley

Getting there!


Another thing!
Monday I'm going to do some serious relocating of myself to way over in Seoul! The idea is that I should get to work as quickly as possible, but there will probably be a lack of updates at the beginning of next week. Travelling will take something like a day and a half in itself, then comes being jetlagged, re-adjusting, finding somewhere to sit and work, etc etc. But by the end of next week I hope to be back in business!

안녕히가세요!





   JLJac on September 04, 2014, 01:15:59 AM:

안녕! I'm arrived in Seoul, and spending my time trying to sleep during the night and not sleep during the day, both of which are easier said than done. But I think I'm getting there. I've also been (sleep)walking around my new neighborhood, and checked out where there might be some starbucks or something that could be suitable to sit and work. Other events include realizing that any small bit of Korean I might have ever known is now gone, so getting food at a restaurant is a sort of culinary Russian Roulette. Actually every interaction is like a sort of Russian Roulette if the only two words you know are "Yes" and "No" and you're just trying to sprinkle them somewhat evenly throughout the conversation. My landlady seems somewhat annoyed with me, but as I have a very dim idea of what she's actually saying I don't know for sure. Tomorrow I hope to have an actual update for you guys!

@Lee, hm, OK, I think I get it now. But wouldn't this mechanic mainly be about smoothing the leg movement? Smooth leg movement is not really my main concern here, rather the opposite - if the legs are too smooth the lizard will just look like it's floating with the legs tapping along under it. Some unevenness to the grabbing cycles is not really a bad thing. Rather my main concern is to make the steps as long as possible, and considering that, wouldn't a steering system like this only allow for the steps to be shorter? Like, to get the longest possible steps I should only let go when the leg is positively too far behind, giving up a grip any earlier than that would just make the step shorter, right?





   jamesprimate on September 04, 2014, 01:29:41 AM:

yay! jac's back! ...in a starbucks  Coffee





   JLJac on September 05, 2014, 04:09:57 AM:

"keep updating" seemed to be the key, actually Smiley

Update 301
Ok, so I think I found a solution on the leg AI problem, and it was rather obvious and sitting there all the time. The solution was to keep looking for a grab spot every frame when the leg is lifted. That way it will start moving towards some place rather close to itself, and thus too far back, but as it approach it other more progressed spots will become accessible, until it's stretched all the way forward and can evaluate grab spots that are in front of the lizard. When it finally reaches a grab spot, it goes into grab mode and just relaxes until it's too far behind again. I don't quite know why every iteration of this solution I came up with had just one or a few checks for grab spots, when continuous reevaluation seemed to be the trick.

In other news I've colored the paws of the lizards, and made the leg size change according to breed:



I don't know if you can notice, but the pair of legs that are further away from the camera are slightly darker, I hope that this slight color difference will make it appear a little less like a flurry of color and make it possible to at least get glimpses of the leg movement.

The mystery of the slugcat's disappearing arms has also come to a conclusion. At one time or another when doing the lizards I told all limbs to go into retract mode when the creature enters a short cut, so that was what happened to the slugcat as well, only that the slugcat didn't have any way of un-retracting them.





   jamesprimate on September 06, 2014, 08:20:23 PM:

I hate to be a naysayer but I'm personally not digging those gradients in the lizard tails. The lizards used to have a cel shaded look to them, but now there's a sort of roundness to them that appears to be a sort of faux-3D. Compared to the rest of the world, it looks a little out of place. Maybe it'll grow on me, but it is a stark contrast to the rest of RW's aesthetics.

idk if you recall how the level art is made, but "faux 3D" describes it almost perfectly, so hopefully this actually moves to tie everything together! but I suppose we'll find out. we're still missing a few subtle components so it feels a bit "off", but i think once Joar gets the lizard head blinking / color shifting weirdness happening, it's all going to fit right in  Hand Thumbs Up Left





   JLJac on September 07, 2014, 03:25:01 PM:

I noticed when climbing against the wall, two of the legs are still shaded, despite both being on the same "plane". Is that intentional?
Nope, thanks for the heads up. Know what it is, getting at it.

On tail gradients, James and I have actually had a brief discussion ourselves on that - I tend to agree with you in that it looks a bit too... Idk, computer-y. A bit too perfect, perhaps. James is fond of it, and I can totally see its potential though, so maybe with a bit of tweaking! I don't know if you've noticed, but the art restrictions I'm keeping to is single color flat surfaces but with occasional gradients in the surfaces - never between two "mundane" colors (black, brown, whatever the level geometry is), but between a "mundane" color and an "effect" color (neon colors such as pink). So the gradient is technically within the restrictions, as are the colored feet. But I see your point - it does look a little bit different from the gradient in for example the plants, which is created with a mask. Let's see where it ends up! Right now I'm just constructing all the pieces, there'll be plenty of re-adjusting and tuning later.





   JLJac on September 08, 2014, 04:02:32 AM:

Update 302
Did some misc animation work, including the infamous blinking head! I cleaned up some of the limb movement further, made sure that green's shoulders didn't stick out through its back, hunted some bug in the obstacle tracker, etc. One new animation available to the lizard now is "wiggle", where the body wiggles back and forth. It'll do this when it's stuck somewhere, and also when it has no limbs at all to move with, in which case the wiggle animation makes it slide along the floor in an inch-worm like movement.

The big achievement of the day was setting up Visual Studio with Unity and UnityVS. After some tears and pulled hair James and I got it to work, and now I've been debugging the Unity project from VS, so it's all up and running!

In James related news the last batch of songs/music experiments he sent me contained one track that was super cool - we felt that it represented an entire style that we'd like to explore further. Maybe when he has dug a little deeper in that direction we he'll want to share some of it. It's really something else!

I've been looking at my poor little lizards, and noticed that they have some locomotion problems. In particular the green one. After the limb work of last week I feel happy enough with how the movement looks, especially if I compare with the lingo version I realize that they do feel like they have a more physical presence this time around. The problem is not in the aesthetics, but rather in the actual physics of movement. They fail at some moves they should succeed at, they get stuck way too much, sometimes they're strangely unable to move in narrow corridors. I probably need to take a long boring day to just clean this stuff up, identifying the problems one by one and doing something about them. I want my standard lizard to navigate its environment competently, any incompetence should be added by hand in a controlled manner. Let's just hope that the problems are in the movement physics, and don't have roots in the path finder 0________0





   JLJac on September 09, 2014, 03:30:03 AM:

Update 303
Cleaning up in the lizard movement wasn't as bad as I expected it to be. I'm perhaps not done, but I got some of the worst issues out of the way, and now all (as so far 3) breeds of lizards move with more ease through the environments.

On popular demand I gave the tail gradients some attention.

just my thoughts on the tails: why not try a shader that just clamps the gradient by threshold (that makes sense right) so you maintain a gradient over the curve of the tail, but it keeps the chunky look.
This I don't get exactly what you mean by? A shader that makes the gradient "banded" with fewer colors? Or a shader that draws the gradient as a circular gradient using the shape of the tail as a mask?

Catching up with this ever-growing devlog is hard! Congrats on that!

Was going to mention the tail´s gradients looking off to me, when I found there were already comments on that.
On the other hand, the gradients on the paws looks great to me, maybe if you just shorten the tail gradient´s span / make it exponential? I can sure see them being fully neon for a couple more pixels at the tip, and then getting to the base color on a more abrupt way, that would be also more consistent with the paws. (Or of course, keep them as you are, since it´s both your game AND awesome.)
Haha I can imagine! Hope it was fun or informative  Cheesy It already is exponential in the old gifs actually, ^3 or ^4 I think.  Shortening the span though was a good idea, tried it out and it did look better! The paws are painted with the photoshop brush, which I believe is a gauss curve. Maybe I should calculate one of those... Seems overkill though!

In the end I restricted the gradient to not cover the entire tail (a little different how much it covers depending on breed), kept it exponential, and also added just a little bit of random noise to the gradient, especially towards the intermediary colors, hoping to approach the slightly grittier look of the photoshop brush painted paws.



And blinking heads! The frequency depends on an excitement parameter in the AI, so you'll be able to see if they're idle or up to something by how fast they're pulsing. Instead of just a sine pulse, this time it's a sine where 0<y<1 but raised to an exponent, making it so that it does drop to 0, but it's at high values more than it's at low ones. This exponent also gets bigger with excitement, meaning that when they're very calm/almost sleeping the head is dark about as much as it's bright, but if they're very excited the head is mostly lit with just quick pulses of black color. I'll do a comparison some time when there's more AI to work with. Right now they're locked at 50% excitement. Basically I figured that it's more fun to look at color than something dark, and this way I could make them more colorful while keeping the iconic blinking.

Oh, and the other effort of the day was making lizards able to handle slopes - the one part of them that had been shamefully neglected. When I was at it I also made the "grab for terrain" method of the limb object understand slopes, so now the player will also grab at them correctly when crawling.

Last for today, I'm asking for some programming advice.

Path finding towards a target is relatively easy. Basically flood fill outwards from the goal, when the fill reaches the player, keep going "downhill" node by node until the goal is reached.

As I'm closing in on it, I've come to realize that "path finding" in order to flee is probably much, much harder. If you just turn your back at the thing you're fleeing from and leg it you will inevitably end up running in a corner, and you're an easy snack. If you path towards the closest room exit or something like that, that path might very well take you straight into the arms of your pursuer. And also, how do you know that you even want to go to the other room? If it's a dead end you're in a worse pinch when you get there and the pursuer comes after you. And all of this is still just considering one pursuer, if there are two of them and you for example only flee from the closest one, you might very well end up flickering between fleeing from one and the other, and end up eaten by both.

Are there any special tricks for fleeing AI behavior?

I did have a pretty solid algorithm for the flies in the old build, but it was very dependent on they being able to go somewhere you weren't (down in the ground), they weren't as much fleeing from you as to the best located refuge. Are there any solid algorithms out there? Do they all depend on managing ridiculously expensive "danger maps" where every tile's distance to every threat is mapped and need to be re-calculated pretty much every frame?





   jamesprimate on September 09, 2014, 11:29:08 AM:

ohhhhh, the "cornered state" suggestion from that second link sounds SO right to me:

Quote
One thing I've done in the past is add a cornered state to the enemy. Put yourself in the shoes of the fleeing enemy. It is scared, it is hurt, it is fleeing and trying to just get away! Perfect mindset to get yourself cornered, which can be really fun for the player.

Once cornered, the enemy can do different things, ideally depending on the personality of the enemy itself:

They can cower and duck into the corner and wait for death. Only really works if you can convey those emotions. A single-character rogue-like enemy probably can't convey that without text or something. From here, the player could decide to leave the enemy alone, showing compassion. Could be really neat if the enemy then becomes passive. Or if healed, even become an ally of the player.
They could go into a blind rage and launch a last-ditch attack against the player, or unleash some kind of escape spell or skill; such as a squid squirting ink, or a lizard playing dead.
These are really more interesting than avoiding the corner in the first place. And are probably faster to compute, which will let you spend those cycles elsewhere.

https://gamedev.stackexchange.com/questions/16600/how-to-prevent-fleeing-monster-from-backing-himself-into-a-dead-end





   JLJac on September 10, 2014, 03:24:40 AM:

@Gimym JIMBERT, Thanks for links! Yeah, a mix of those solutions is basically what I've been thinking about as well. Just wanted to make sure that there wasn't a super obvious go-to solution I was missing here!

Update 304
Today was spent in thinking mode.



I've been able to outline a few methods for keeping distance from threats - I think I could make something work that would be an approximation of an occupancy map setup. Creatures can't share these, as they all have different ideas of where all the other creatures are, so they'd have to be rather optimized as many creature might be updating them often. My idea is some sort of heuristic version that for the most part just uses 2D distance (getting away to the other end of the map is rarely a bad idea) but very close to the creature can overlay this with a small dijkstra map for some smarter behavior when it comes to walls.

The main issue though is the question of how to avoid dead ends and corners. I think this is going to be the main factor in whether or not the behavior will look decently intelligent - running straight into the closest corner is going to look dumb. After some contemplation I came up with this: What is a dead end? It is not a loop. A loop in this case being a group of allowed tiles that encircles a group of unallowed tiles.



A real scenario might not be as black and white as this, for example I don't think most people would consider a big open room a "dead end". But let's not give any benefits of doubt here - for simplicity, let's write off everything not a loop as a dead end. The purpose will still be served - if you can get to one of these loops, you will at least have the benefit of being able to run away for ever rather than ending up with nowhere to go.

Especially places where many loops intersect would be attractive in a fleeing scenario. Imagine the center point in the character "8". That's two loops intersecting - if you're a paranoid creature fleeing from foes and you're in an 8-shaped room, you'd probably default to that center point where you have the most options for escape to pick from, right?

So, how do I find loops? The first thing I though was that I'd identify every continuous blob of unallowed tiles using connected component labeling.

When I'd found every such shape, I'd let all of them grow at an even pace into the allowed tiles, until they hit each other. Those edges would be the loops.




I was really enthusiastic about this approach for a while, but then I realized that my path finding map isn't that simple. For example I have connections that are valid one way but not the other, and connections that takes the creature across unallowed tiles, messing up the blob integrity completely. These shapes of unallowed tiles probably could be defined still, but they'd be multi-dimensional objects that I wouldn't have a chance against.



So what I'm thinking about now is a slightly different approach. I'll map the allowed areas instead, using a dijkstra's algorithm-like method (essentially a flood fill where you keep track of where each tile was filled from).

When filling the tiles, if I encounter a tile that's already filled, I do a common ancestor check. As all the tiles are filled from one original tile, and the dijkstra method keeps track of the "parent" of each new filled tile, you essentially have an ancestry tree. If I'm in one branch of that tree, and collide with another branch, I can check how far back these branches have a common ancestor. If that's not long ago, they are basically siblings, part of the same "frontier" filling in an area. If their ancestor is far back though, that means that we have a loop!

By moving from the collision point to the common ancestor through both branches, the loop can be identified tile by tile.



What do you think? Is it going to fail for some obvious reason?





   jamesprimate on September 10, 2014, 06:00:00 AM (Last Edit: September 10, 2014, 06:49:23 AM):

Hi Joar, one of the backers here. I have been following these updates with a lot of interest in lurker mode. Blinking heads, however, have made me come out of hiding and register just to say "no, please, don't".  No No NO

Seriously, this looks bad and takes away all the credibility these creatures might have. Instead of thinking animals I'm now thinking blinking robots.

whoa hey! thanks for the feedback! its legit awesome that you are passionate enough about the project to not only read the devblog, but actually SIGN UP FOR TIGSOURCE too. i appreciate it!

this isnt a change however, the lizards have pretty much always had blinking heads (as far back as 2 years ago!) and they are shown as such in all the kickstarter materials:





http://youtu.be/dVXfrSLeLNo?t=30s





http://youtu.be/XvMZNVCmd_o?t=44s

so too late to turn back now Cheesy

it may look out of place a bit in the gif you are talking about, since they are being shown in debug mode without level backgrounds or environments or the behavioral AI that dictates the blinking, but we still have a ways to go with them yet. give us some time, they'll look as good as the lingo ones i promise. right now were just happy to have them running around the screen with their heads attached ;]





   jamesprimate on September 10, 2014, 01:20:46 PM:

its all good! and seriously, thanks for your opinions. something is making it stick out for you guys to notice the difference, so we'll be sure to scrutinize it further now that you've brought it to our attention  Toast Left

Joar is all wrapped up in fleeing AI, so this might be on the back burner for a bit, but I stared at these gifs for a while, and here are some thoughts:

* i think, sadly, everybody else is right and the tail gradients probably have to go. i got attached to them while they were just TAILS (no heads), but i have a suspicion that the visual contrast between them and the blinking head is probably one of the reasons its not sitting right with people. it just looks funky. (im sure we can use that trick on another creature to great effect though!)

* the new bodies really need to be lowered closer to the ground. they just lack that threatening sneakiness of the lingo. Seeing both pairs of legs for the walking animation also probably contributes to the visual color noise similar to above. And the droopy tail that results from the taller stance just doesnt feel "predator" at all.

* also reduce the size or amount of color on the feet to further eliminate the color noise. The originals benefited greatly from a less is more visual approach, and the small bits of color for feet allowed the viewer to sort of imagine more movement than was there. It seems contradictory, but even with the new well-defined feet and MUCH improved walking animation, the result winds up looking less natural, because the brain is silly like that.

* less stubby tails on the blues. the originals were lean and lanky which was threatening. its possible that might be solved just with the "lower the body" thing though.

OK! THUS SPAKE JAMES





   JLJac on September 10, 2014, 02:18:47 PM:

Haha wow! Good morning everyone!

@kruxus
I think (think) that if the frontier is wide, the tiles next to each other on it will still have close relationships. And yeah, of course I'll add animation fluff, but as a fellow programmer you understand that I want to actually solve the problem  Wink

@Lee
Ugh you're right! But when chased by two enemies, a loop isn't worse than a dead end, right, just equally bad? Given that both the enemies don't decide to take the same route, in which case it's still preferable. And intersections between loops would still be a good idea to get to if you can do so while staying clear of threats?

On blinking heads! I think the black background makes it more visible - against the grey background the heads oscillate between two colors that have about an equal contrast against the background, one through hue and one through darkness. With the dark background the dark state of the head blends much more, which might make the blinking more in-your-face and appear more as blinking rather than a color change.

The robot analogy is actually not entirely out of place... The way I think of them is as Neon Lizards - they're definitely not robots, but they're not animals as we know them either. There's a slight biotechnological theme in the game, but not in the "cyborgs" sense - rather a smooth blend between one and the other, a seamless transition between skin and plastic. You're supposed to not really understand what you're looking at. Most of all though, this world is viewed through a cartoon "filter", and then a pixel "filter". When looking at a cartoon you rely on having seen most of the objects on screen in real life. They look nothing like reality, but you can deduce what they're supposed to symbolize. What I'm trying to accomplish here is a cartoon rendering of something that you've never seen before. In a situation like that you have to backwards engineer a reality from the meager clues that the cartoon gives you. Is this chameleon skin or light emitting diodes? The image is too simplified to know, so everyone has to make their own interpretation. That's what interesting to me about this visual style - things are just hinted with barely enough fidelity to try to piece together an understanding of what you're looking at.

So give me the benefit of the doubt! You could interpret what you see as "Boring robot" or "Game NPC cheaply announcing its AI state", but you could also project whatever trippy cool shit you want on those images, and I'm hoping you'll go with the latter Smiley

James animation notes:
Noted! All of these seem super valid. The new body elevation makes them appear more dog-like rather than lizard-like, so that definitely has to be tuned down. Looking at the old gifs I realize that the old lizards were much more of just a colored head and a black body "sticking out of it", the new ones have become more animal-shaped. New ones are better in a few ways, but the old ones had a point that has gone missing. I'll take a good long look and try to incorporate the best of both.





   JLJac on September 10, 2014, 11:40:52 PM:

Hahahaha if you guys didn't notice the blinking heads until I mentioned them, maybe they're not that big of an aesthetical disaster after all  
Tongue Tongue Tongue

I agree that something has gone missing in the smoothness of the new build though. Research will be directed at finding out exactly what!

Update 305
Dead end mapper! I think I've managed to identify dead ends pretty well today, stay tuned for a million screenshots so you can judge for yourself!

When generating these I disabled short cuts to make it "what you see is what you get" - there're no secret passages between tiles, so what looks like a dead end in the image is actually a dead end. If this is confusing to you let me know and I'll try to explain better. Some images have something that looks like a very obvious dead end but is greener than anything else - those are room exits.

Essentially the way to read these pictures is that red is considered a dead end and green is considered a good area to be in in regards to not being cornered. The AI behavior I have in mind will be able to use these maps for a few things, but I guess the gist of it should be that if you're being chased, gravitate towards greener areas rather than running into the red. If your tile is redder than the tile of the threat, you're probably being cornered and it would be a good idea to find a path back to greener pastures.






Same level mapped for Fly and Slugcat respectively. The fly obviously has access to air tiles, while the slugcat is stuck on the ground.






See the pink tiles? Those are "fleeing targets", essentially tiles that are A - in "hub" areas from where you can get to other areas without being cornered and B - somewhat evenly spaced. These are few and well defined for a reason - when a fleeing AI doesn't know where to go, it is supposed to be able to evaluate those one by one. Which one of them is closest to me? Which one is the furthest from the threat? Which one of them can I path to without the path intersecting with my threat?

In the difficult scenario of knowing where you want to get away from, but not where you're going, these fleeing targets might give a clue. If you arrive at your fleeing target and still feel panicked you can just pick another one and run around between them at random - you're at least guaranteed not to end up in a dead end.


Here's a little comparison - the same map, mapped for the fly creature, with shortcuts turned on and off:



The rooms on the left each have a shortcut in them. Note how when the shortcuts are turned off these rooms are pretty much completely considered dead ends, no self-preserving creature would allow itself to get chased in there. When the shortcuts are on, however, they get a path through them, making them more considerable as fleeing destinations.

Last for today, a thing that I'm not keeping but which ended up looking pretty cool - I tried to have the algorithm grow at random, and the effect ended up looking like a tesla coil, or veins:



Edit: Just came to think of it, room exits should obviously have a fleeing target each as well.





   jamesprimate on September 11, 2014, 01:49:27 AM:

THIS. UPDATE. IS. AWESOME.





   JLJac on September 11, 2014, 10:06:27 PM:

Ok, so here's a technical question.

These maps take too long to calculate, so I'll just do it once on the first time the level is loaded, the write it back to the level file and have it hang out there.

When I calculate these maps a by-product of that process is a dijkstra map for each exit in the room as calculated for each creature. This is really useful info to the AI, it could do a lot more and a lot faster if it had access to it. Sooo, I'm thinking about perhaps storing that as well, when I'm at it?

Say that a standard level is 50*40 = 2 000 tiles.

Say that I end up with worst case 15 creature types that need to do these calculations. Some creatures share maps as they have the same basic movement, so it'll probably not be that much.

Say that a room has 4 exits, all of which I'm saving a map for. Then I'm also saving the dead end map, so 5 maps all in all.

2000 * 15 * 5 = 150 000

So, a hundred and fifty thousand integers. If the level is bigger, or there are more exits, that number could be even more crazy. If the level is 100*80 instead, we end up at 600 000 integers.

The level text file I have currently is at something like 4kb, and contains something like 3000 integers to store the level geometry. So by that estimation a 150 000 integer level would end up at... 200kb. That doesn't seem too bad? Modern computers have gigabytes of RAM, they should be able to hold those amounts of data? The bigger level ends up at about a meg.

What do you guys think? Is this viable? It seems like such massive numbers. It also kind of is a waste, as not all creatures are in all levels. Also, if you look at the screenshots above you'll notice how in the most cases the majority of tiles are not accessible, meaning that a majority of these numbers would just be zeroes.

When loading a level its text content is held in memory, then converted to rain world code objects. Then that text is discarded. Is that a huge hit for garbage collection? When the game starts up each level is loaded once to retrieve some data from it, and if there are hundreds of levels I worry GC could get overwhelmed.

Is having all those integers in memory during play a performance problem in itself?

Thankful for all advice!





   JLJac on September 11, 2014, 10:31:13 PM:

Just struck me that I could do a very easy compression of the maps by just going tile by tile and only saving them if they are indeed mapped, leaving out the blacked out terrain. Then when I write the data back, I just go by the same order. It seems from my tests that this would get the amount of integers down well below 30% in the level layouts I have going now.

I could probably do with dijkstra maps that are just tile-by-tile rather than creature specific as well - not AS good, but still an asset to the AI. Then I would not have 15 * 5 maps to save, but just 15 + 5 = 20.

(15 + 5) * 2000 * 30% = 12 000 integers

That shouldn't be a major problem, right?





   JLJac on September 12, 2014, 12:36:27 AM:

Update 306
Well, most of the day was spent in hesitation over above issues - I did some calculating back and forth but that obviously didn't help me much as I do realize that what I think of as "big numbers" or "small numbers" is irrelevant to the scope a computer. I didn't want to start implementing it without knowing it was going to be an actual realistic solution, so I kept away from it and did some other poking around today.

For example I made the dead end mapper use the creatures' terrain preferences rather than a first-best grab of tiles, meaning that now the maps will hopefully gravitate a bit towards terrain that the creature is comfortable with.

Another thing I did which has been a long time coming was implementing a terrain proximity map in the common AI map:



Any flying creature will be very thankful to have this info, as it allows it to know what's open air and what's uncomfortable tight spaces. Also, if we want to add a creature bigger than 1 tile wide, this allows that creature to know where it can move.



Here's a dead end map for the fly with a preference to stay away from walls, looks pretty reasonable for a fleeing behavior for a flying creature right? Given that those bottom two corridors are room exits, otherwise it shouldn't have anything to do down there.





   jamesprimate on September 14, 2014, 01:23:57 AM:

I had a chance to play this game briefly at BostonFIG. It looks as incredible in person as the GIFs we've been seeing. I must admit, I felt like I was terrible at playing it. I'm excited to spend more time playing it when it comes out and getting a chance to learn to play it better! Very cool!

yo! was nice meeting you! thanks for stopping by and hanging out

TIG was pretty well represented at BostonFIG. i think i met more forum people there then all PAXs combined. i guess that makes sense with the indie game focus, but still seems surprising considering how much smaller it is.

on a similar note, the RW booth was NUTS. we had a crowd for 8hrs straight doing constant 4 player matches. Its possible we had more people playing it in one day at BFIG than 4 days at PAX Prime. and that was with the most slap-dash, ghetto "booth" setup possible  Tongue






   JLJac on September 14, 2014, 04:08:59 PM (Last Edit: September 14, 2014, 04:33:04 PM):

Hi!

I usually don't work in the weekend, as I think a five day week is probably the better option in the long run, but this time I made an exception and did some polishing on the dead end mapper. Now it works like I originally intended it to - actually finding loops, and from every loop drawing a connection to every exit. Tonight when I do my actual update I'll throw an image of the slightly improved dead end mapper in there.

@ Sebioff, Jimbert, thanks! Just needed a reality check. I might as well implement those solutions then, if something like a million integers isn't necessarily a problem. I have been looking into Sparse Arrays some, as I think I could use something like that for the heat maps where the great majority of the level is just blacked out, but from how I understand it there's no way to get the smaller memory size without trading it for a more complex look-up process. And you guys have told me that if I'm in a situation where I have to choose between burdening the processor or the memory, I should go with the memory - so in that case it seems unnecessary to go out of my way to go against that advice.

I had a chance to play this game briefly at BostonFIG. It looks as incredible in person as the GIFs we've been seeing. I must admit, I felt like I was terrible at playing it. I'm excited to spend more time playing it when it comes out and getting a chance to learn to play it better! Very cool!
Thanks for dropping by! Sorry I couldn't make it this time haha! One fairly common complaint with the game that I remember from PAX was that the controls were difficult... So you're probably not terrible, it's just that the controls aren't as streamlined as they should yet. Some people learnt the controls intuitively while some where struggling with them, so we probably need to find some kind of common ground between all users here. I for one have been playing with these exact controls for three years now, so I'm way too used to them to be able to evaluate them properly - I think that when we get down to streamlining the user experience we'll have to bring in a few people who haven't played the game before and watch them play to see what problems they encounter. Anyhow, glad you liked it!

This curve:



is there a way to get a curve like this that fits snugly in a 1*1 square? I want 0<X<1 and 0<Y<1, and I want f(0) = 0 and f(1) = 1, but no X other than 0 should produce an Y of zero, and the same with 1. In english, the graph should hit the corners of the square perfectly. The one pictured actually doesn't hit the corners, if you change the steepness of it the graph will break out of the square elsewhere.

Edit: Yay! http://dinodini.wordpress.com/2010/04/05/normalized-tunable-sigmoid-functions/
It actually really isn't a sigmoid I think, as it doesn't have e^-x, but it fulfills the same purpose.





   JLJac on September 15, 2014, 02:55:30 AM:

Update 307
I spent the day trying to accomplish serialization of a class, as that was going to be a time saver I believed  Cheesy Serialization is basically that an object is converted to text (which can be stored in a text file, for example) and then converted back to an object again. My idea here was that I was going to save the AI maps like that. After having broken my game pretty badly it became more about trying to patch it back together again, something which was made harder by not being able to make visual studio break at exceptions, and... Yeah you get it!

The end result was that I actually managed to make the serializer spit out some text, but way less than what could possibly contain the data I was trying to store (just the names of the classes I was serializing, basically. And some.... web url!? Idk.) To serialize an object I also have to adapt in a lot of wonky ways, like having an empty constructor etc. Also, all objects that are stored in the serializable object also have to be serializable... Basically, at the end of the day, I think it's going to be more efficient for me to just make my own method for converting my data to text and back again. Also, that way I will positively know that it's not storing something I didn't ask it to, such as strange web URLs and the like.

The only problem I can see is that I need to store some floats. Integers will become 1, 2, 3 or 4 ascii characters, which is kind of wasteful with space but still within the realm of the reasonable. For floats however, if I want to save them with somewhat good granularity, I have to use like 6 characters for each, which seems horribly wasteful compared to the fact that a float is actually no bigger than an int in raw data.

Does anyone know of any cool ways of converting ints and floats to ascii text that isn't horribly wasteful? Maybe you could make a huge BitArray, feed it all the ints or floats or whatever, then cut it up in pieces of however many bits make up an ascii character and just put that character in the text file? That would surely be using the space to 100%, right?

A pretty frustrating day. It never cheers me up when what I'm fighting with isn't an actual logical problem, but the functionality created by the microsoft people - all due respect though, everything they've made that's streamlined and easy to use I obviously never even notice. The day wasn't all bad though. I did get some pretty nice restructuring done when it comes to "preprocessing" levels, ie finding out AI information about them and saving that to the text files. Also I solved the curve problem of this morning, and made a curve visualization tool that I'm going to have a lot of use for in the future:



Over and out!





   JLJac on September 15, 2014, 04:31:17 AM:

Hm, I've managed to translate float arrays to characters bit by bit... It doesn't become ascii though, but unicode.

Look at this insanity:
Quote
饕䲟㌵䮈綷䲫᠄䲇휕䰍ൣ䱷䚼䲘⧓䯅蠄䬌೎䨷쫿䲆쇿䥙ꌂ䲫騨䱌䱃⦏䮌萕䱀떵䱹ꮛ䲶쬩䪎䮲海䲝땘䰠歐䱌䯒︇䲺䱽퍜䱊䲧⿹䬚躨䪋﾿䦬묄䬵䕫䲦��䰣궧䰍ꮋ䯭诺䨞憎䱑₏䱬䑈䱱璚䱞怒䬺欤䯿㉐䱽擀䲑㾇䲛ᷩ䲭诞䮈뜐䬆삇䱍졣䨆宴䦏횛䰹㑅䱙槥䱩筏䮜ꠢ䦉턚䲫敂䰥��䱄힩䦪ꏈ䲮ݺ䲠⒰䱠䃓䲎곀䰘옶䱲眶䫐ꌩ䰾撦䲟뼮䩏寧䨪亘䮘몗䱦Ꮺ䲟肎䲺곉䲶츴䰰믋䱘孃䲕硰䲹��䲋綹䱵䭌烋䰞쬖䲕㐹䱸䰹ષ䲹倣䲲ŭ䮛祂䲒弣䰜㶊䱙ᘤ䬂綍䱚⽁䰡伵䲫⯐䲋㩭䮼᢯䲼䀬䱩䲆竡䮏ﵽ䰱茚䯵谏䰼栏䲚ས䱸ẗ䱴켁䲟⊍䱞俴䰂쨩䲉⛎䲃秅䲼䲙슉䱱괹䪃䯎ᗆ䯇䯉籣䮇䱴伖䱠䱗ᒷ䛤툀䫸騔䮏ꨦ䰣뀫䱀仆䲌뷈䱕ꆳ䭈죹䱶፦䲛姈䰾⊽䲀ꚟ䢣塟䲔궼䱨禷䭝憣䱕藩䲜휹䮍爳䧚䰭蒺䲏︥䯧帚䱥캃䲏㊢䲺友䱁쒴䯹ꬾ䲸䧯ᣄ䬠袭䲻蝽䯩ㇽ䮷翛䨇㒃䯸켬䲑ᥫ䲝䯝腗䪔䓋䲋腐䮕ꋪ䰲覯䫍ԍ䰃졄䰒풃䲔죝䫼䊗䲂뵘䲍䲻덖䰼바䫀✞䲜釶䰯낈䮞䯏풺䱡䁶䲸䱜ﶨ䲡溴䧜峏䮤曬䯞䂷䱼ꁹ䲽똵䰤儈䯟씦䲃偟䯽䰓䮏䦛롩䲶㌔䲪⤃䱫쉔䲢嶮䲍컓䱌䬳렺䱸ᮍ䰍䪴䧛鿰䲄䯀팗䲢먙䲧侓䰠䰹㳔䰎櫯䲨㺜䲮䜣䯹䲷嫪䯵럥䲢䬱鏉䰯瞂䯒ႇ䱁ꑥ䲪㐤䮚罼䲢픚䱏㸶䲪꧴䰸馉䮬ᕻ䲶곟䲟ꄖ䯌��䲮餇䭞㌮䰶㫹䰢蒠䯠䰈譠䪓揤䮴蠪䲬壧䲴铅䩿ꁆ䲟晖䱁䲥窧䲾䨙䱩枊䰪❹䰄䰮蘈䯜��䲯稘䨌讅䨈쁢䰽癚䫏侌䯯ɴ䲘⋦䯴丐䲆ᫌ䭑蟒䲠圲䰔䋤䱫ꖅ䰋绑䲗题䮧샂䲵崤䩹凊䮌᤻䲦䫨䱓슷䲞Ⓞ䲐ᱠ䯵릥䥖筫䲐ꂟ䮘ᤏ䲄⟩䱡䷬䱏䰄䱚燜䲮ᔏ䩧襵䱺᳤䯚턳䰂⯤䱡푼䱲"䱆쿙䱈䫐䲅䲏ಪ䬞曋䲚軈䲩ৎ䱲䯵䰣⤆䲳襁䱦懦䨺春䯡ꮙ䮶꼟䰕국䭮곇䲲搣䱖��䰮윋䱵⻧䲟ᑱ䯈蓩䯄䱄僬䫋܂䱫俾䰅鏅䮅慐䰊䱵爿䲐妝䱞眄䰉춭䲰얜䰒ϰ䲉䭁抎䲼��䲴��䲈邷䬐蝔䮀䮰䲹趽䭂ᐳ䰁㥨䲁䮑჈䫾➾䰫顖䰧㨤䰔냒䫅䱜㺲䧵鬣䲼뤴䰢䬱辢䱍ꗅ䰱䟃䪊窤䲓䲝㨆䲚䓋䲈홵䭣쮹䰰ꦁ䫇燻䱳쎝䮩ﺸ䲸䲱��䲻䵠䱗ܽ䯫잔䰖꿶䯕䰉ึ䬈ߐ䱈섓䮇ꡝ䭱楢䲞헻䲘ẁ䲤㔔䬅㨂䣸ᵆ䰈東䲸臢䱅ꭹ䲞ᥤ䮳彡䱪��䬿砠䱬맏䱕ງ䲬バ䰻㤧䰺⠣䲱঻䲶᜜䬘锫䲠鵥䱃ፓ䭫鲫䲟Ⳅ䲵瀤䱴柊䩤ꢧ䯕鈫䯉��䯑僀䰵籏䬔��䰡僤䱊Ꝗ䨂贆䰚ᇬ䲋菌䨨嗠䯆봅䭹喊䮧鶍䱵纤䮁侚䰫橌䯄㕹䱝ᣏ䭦ퟵ䰟塣䭇谂䰖䯮ʑ䮵晸䲖��䱰��䲄ꮰ䰫勍䲋䱿갳䧫蹯䰳℄䮝꨷䯋䕿䬄陥䦫慢䧥ஊ䱡⦗䭠䓑䲾䯴¥䲠︧䲈뙴䲫歔䩶﫿䲻趼䲓쇖䯇䄏䲙敧䯱譅䰥賡䮹枂䪅ﵽ䮤䯽쒠䫚撔䮄��䮴䲥䰁빵䫐춊䫽邴䪂㮧䰡孂䫦��䯋ꈙ䰻䯗䯱䨳䱍쟇䩞鋰䲉䰦轟䰛퇗䲪钧䮘䘰䭃轋䮈﷭䰿ႅ䲀捑䲇䔏䨥芶䮷Ჸ䯷㵐䰇엞䲆䟸䯲シ䲍ᧂ䯟檣䲀뮀䱃搰䱝⇿䱋縎䮝姁䲸ꬕ䰫廓䱱ꓩ䱽퉖䰈寢䰃㇧䲄艬䱝䍰䱍쥪䲱茢䲲㔪䱀놿䬁僅䲥〴䲺醰䭆캆䲤栃䰟䲳ﭑ䰞귚䪯漉䯳ǰ䲍宠䲥˰䲌윱䫘᦯䭘䀚䰩鎥䭨W䮺ㄌ䰁廒䰕ᆀ䱏伆䱷⢀䮼岣䱩䬠錽䱧♷䱳爥䲐ᮣ䱌즐䰜誅䯍q䱹戼䲤䨆䥟䰰좿䲅቉䲖䧑䲧ࢁ䱁憄䯱꞉䱥㞕䨽ꭘ䲨巌䲪끵䬨ꀤ䰆餺䱌��䱠賦䧦㝴䰱ᘪ䲐଒䪐㋯䲘岫䲔䦚䲪৤䲖达䲦揃䲈胖䰝缘䩮硺䰋ꅮ䱉䮽䲜䯞䲒젨䦨ꚕ䰗��䣸纶䮁듐䮄뤦䱥Ⱇ䲇씅䮯땢䰽፠䱾旪䯆ȣ䲟渟䲠࿎䲑懚䲢ݑ䯱曠䨡ೡ䰁訥䪀噀䪚罻䲦颞䭣꠨䲨⏰䱢닸䡥쮷䰕츼䲨粈䲅쪶䱀嬎䭵鴀䬶ꌚ䲩쨱䬜霚䲆ѵ䱦翺䲘䲠嫎䱐䰟媲䮬䥲䱑䲲鷋䲤��䲓胶䲒쀁䯃崩䬛苩䯝鐍䲗蓢䬒搩䲇䫼䱈嚢䰴소䨟䲮栿䲥▓䭽陔䭷萐䲽ず䩵ନ䲓ꨆ䦼㝀䰦铚䲢೫䰒��䲳⃘䲱쮅䲺挤䱥邕䲙뫤䲊敊䯨쥤䲭Ἁ䰫咮䮯m䲖렝䲞䨃䱒ᇞ䱰뫈䰓똥䲡䱱㪷䥤앋䲭ߴ䰾卅䲞텷䲯ฤ䪽ꎈ䮱쪹䤸ȿ䮙䜶䬡ඟ䲛㦜䯎츧䮾䰢䬞㏰䯵怂䰳顥䰀炭䱉ꂲ䰍Ɠ䮘졫䮧疪䲕梾䲎꒏䱁ᠵ䲍䯻ޞ䲜इ䬹��䪯꣨䱪闫䲭휵䲲쳣䰴ḣ䲢轶䯷均䲙ꐦ䲴茕䱞厺䱯덴䮇ꯑ䰢ٓ䰩䧞䰏彖䪘䬑뮲䲒ᛡ䲫᠝䲙摣䲯뮇䰬莋䯂ᄇ䱰ꓤ䮋졮䮚璋䮆팣䲟퉀䲸嬊䲄פֿ䲹獳䲨軭䲩䨘䯟㯻䲌⾴䬄Ჶ䲱圥䮧纆䲷㒈䱨헐䱇ᎊ䱠슚䲺㙺䰒֝䮶焨䮔︋䲍읝䰏䰽ﳡ䰮餩䰭䯯慢䫥␺䲯ᱢ䱔✉䱲↪䲘蕝䬧㼚䮾摩䲺鲌䲑䱺崽䲸竐䲐쁅䲀꽦䫖㺳䰼Ꟃ䲘隟䱐姕䲕皢䮛䀓䰯鮘䫜◧䫽��䲣⍌䯐魦䰒䞍䲺詿䲖訨䯬茋䯗奷䯌૸䩪좢䦶롽䮗䲍ⓧ䲻ᮞ䰱舖䰁ὥ䲱緵䲹䱒䣱䫬좈䢄鳪䯰ꃭ䱋狊䬓씳䭶㥆䱸₹䱍斧䰷礏䯍䭪��䰡굴䱛術䱦嵯䰃逢䱼淘䲦翍䲬ῒ䰉Ά䰃䲷ퟆ䱞ጓ䮉椱䲼ꇣ䲐䮐ꖓ䲫览䯭凈䰮糏䲷猼䮚쭝䲫䲀㌲䫁劙䲣魟䰥㍲䲪ꀫ䱘Ⓦ䬚䲔ز䬜쇌䰋䲙欅䲦떥䲚ᚷ䯜狇䲼恽䦾ꆭ䲏䲡殾䬲ꃢ䱧ዏ䮌뱅䲔诺䲞棣䲴䨥鉺䯩噑䱛գ䭸箬䱠苖䲳ᴃ䲊☥䱣ꖆ䭘䢮䯝ꥂ䲴⥾䪥䫥ᣞ䮥␌䯏臏䮉ꢙ䲛㉍䮴뢳䯒ᤱ䲂㫋䲈䮩躯䮾썱䧩햇䰃䩪㸭䮑쟊䭼莖䰊崣䲃娫䬨ꈉ䲽ᜲ䲟㫏䰖汕䫚ꚯ䲐둥䱰掍䲕쑭䲨ൊ

If nothing else it's a somewhat interesting display of what languages have a lot of signs hahaha! This is generated from random floats. The vast majority seems to be Chinese and Japanese, which makes sense. There's quite a bit of Korean in there as well, but as Korean is a phonetic alphabet (although you group the letters together in compounds of 2-4) it's a lot less. Soooooometimes you see a roman or Cyrillic character in there.

Huh. Pretty cool. Just not sure if I can actually store my data like this. It does seem to be re-convertible, if I ask for random floats back from the string-to-float method they're aligned. But it doesn't feel very safe if this game is supposed to be compatible with many different platforms. Also I read somewhere that some computers arrange their bits in the opposite direction, in which case the data will be totally jumbled.

I should probably just do the actual serialization haha  Who, Me?





   JLJac on September 16, 2014, 02:39:45 AM:

Update 308
There was a thing called Convert.ToBase64String which makes bit arrays into strings that are (from how I understand it) dense information-wise, and using that I finally managed to save my AI maps to the level files and load them again. These strings keep to ASCII characters and look a lot less menacing.

I have also created infra structure for checking that all levels are up to date upon starting the game, and if not doing the AI map calculation on them and saving the results to the level file. When the level is then loaded it'll unpack and use that info. This part took a bit of fiddling, as when the level is loaded to generate the AI map it shouldn't load the (non-existent or out-of-date) AI map, and when it's later loaded for real it should wait to apply the AI map, as it needs to generate some parameters from the level geometry before it can apply the AI data.

So yesterday's problems are solved! Instead a few others, more harmless ones have popped up. The dijkstra maps don't look perfect and probably need some messing with, and the thing that maps the distance between every exit and every other exit isn't plugged in and tried out yet. But the basics of pre-generated AI data is in! Yay!

In less happy news James told me that Gimym JIMBERT is apparently taking a pause from tigsource! D: This means that Project Rain World will have to do without its main developer for a while, I will however do my best to step up and fill the position myself. Thank you a million times for all the useful help, I wouldn't be half as far without it! Come back soon! 
Hand Thumbs Up Left Crazy Hand Thumbs Up Right  Hand Shake Left Tears of Joy Hand Shake Right





   jamesprimate on September 16, 2014, 06:36:15 AM:

deep sighs of relief were heard all across the globe!





   JLJac on September 16, 2014, 10:39:44 PM:

*phew* Who, Me?

Update 309
Finally I think that everything having to do with AI data being saved to level files is DONE! For each creature (or rather for each "pathing template", some creatures share the same pathing data as their movement is similar) there are now several AI heatmaps that can easily be accessed. One of those is the dead end map, and then there is a dijkstra map for each room exit.



Here's a visualization where I can look at the different AI maps for all the different creatures by moving the mouse around. The ones with little blinking dots are the dead end maps, and the blinking dots are the hub spots or fleeing targets. Saving those to the file was kind of a hassle as well, until I figured out I could just shift the float upwards with 2. (Shifting it with 1 would be risky as the range is 0..1 and then it wouldn't know the difference between an actual 1 and a 0 that had been shifted.)

This means that theoretically creatures could move around between exits with no path finding at all, just by following the dijsktra maps. In practice there are other things playing a role as well, such as the Obstacle Tracker, so most of the more intelligent creatures will still need to do actual path finding. For small, stupid, swarming creatures it could definitely be used though, enabling what looks like intelligent behavior with pretty much 0 strain on the processor.

What most creatures will be able to use the maps for, however, is having a better general understanding about where they (and stuff they interact with) are in space. Which exit am I closest to? Which exit am I closer to than any other creature? Considering a group of creatures, towards which exit do they gravitate?

I have this one idea though, let me share it with you and tell me what you think. The idea is that the dijkstra maps could be used as beacons for triangulation of distances between arbitrary points on the level. What I'm talking about here is not distance as in straight distance, which is easy, but actual pathing distance with the terrain counted in. If you are close to another place in coordinates but it takes a huge detour to get there, that detour distance is pretty much the only thing that's relevant, right? I'm thinking about this especially in terms of being afraid of other creatures, when fleeing it is very relevant information how close the threat actually is in terms of time to get to you, rather than mathematical shortest distance.

I think the triangulation technique could create pretty decent estimations for these non-direct distances. To get the exact distance you'd need pathing, but this technique is probably at least 10 000 times quicker in most cases, and will hopefully produce acceptable results.

Ok, so take a look at this. Here's a dijkstra map for each exit, and I'm trying to triangulate the distance between A and B. The data I have access to is the distance between those points and each exit.



So what I'd do here is basically imagine each map as a dimension. For the first dimension, then, A is at 25 and B is at 12. That makes our delta in that dimension 13.

ABS(25 - 12) = 13
ABS(18 - 60) = 42
ABS(40 - 6) = 34

(No I didn't count tiles, the numbers are just invented)

These distances in "triangulation space" can tell us some stuff. If we only have one dimension, we can't know very much, because there are many tiles on the map that are exactly 12 tiles away from a specific exit, and they are not necessarily close to each other. E.g 12 tiles to the left of the exit and 12 tiles to the right of the exit. If we have more dimensions to play with though, I think the triangulation would quickly become more reliable. At three dijkstra maps my estimation is that it would be extremely uncommon for two tiles to have the same combination of distances to all exits, making the coordinates in "triangulation space" pretty reliable in their relationships to other coordinates. Correct me if I'm wrong here!

The system could potentially give a "false close", but never a "false far". An example of a "false close" would be if you have a room with an obstacle in the middle and an exit at the north and the south of the obstacle. A point to the west of the obstacle could have the same distance to both exits as a point to the east of the obstacle, making them appear identical or close in "triangulation space". An asymmetric placement of the exits, or a third exit, would help with that though.

A "false far" can never happen, because if the points are separated in any of the "triangulation space" dimensions, they are at least as separated in actual travel tiles as well. Look at A and B in the third picture above - the absolutely closest they could be while having the distances 40 and 6 would be if B was 6 tiles up on the same path as A, and then they'd still be 34 tiles separated.

Another way to say this is that if the deltas in all "triangulation dimensions" is 0, A and B might or might not be on the same tile, but if any dimension has a delta larger than zero, A and B are sure to not be on the same tile.

The fact that the system might give a "false close" but never a "false far" probably means that of the three deltas calculated in the example above, you should pick the biggest one, and conclude that the actual distance can be no larger than that.

I think this makes it fitting for fleeing behavior. These distances could be used to evaluate how nervous a creature should be about another creature, and whether it's time to calm down and stop the fleeing behavior. "False close" isn't too bad in this scenario, because better safe than sorry, right?

Also it will be cool to check out how this can be used in swarming behaviors. Maybe you could even create some strange kind of dynamic path finding using it, if you move towards whichever neighboring tile is the closest to your goal in triangulation space rather than in actual space.

Oh, when I read through my post before hitting the button I had a small epiphany! One way to further eliminate "false close" could be to add the mathematical straight distance between A and B and treat it exactly like one of the triangulation dimensions! It has the exact same properties - ie that A and B can't be closer than that, so it would work really well as a last reality check, eliminating for example the "obstacle in the middle and symmetrical exits on each side" problem. Shortcuts messes this up a little bit as they make it possible for tiles to be "closer than they actually are", so maybe it shouldn't be relied upon too much. But shortcut travel still takes some time, so it could be counted in to some degree...





   JLJac on September 16, 2014, 11:33:40 PM:

Dijkstra map triangulation looking pretty good!



The color of each tile is how far that tile is estimated to be from the mouse pointer. It uses the largest distance it can find.

I have a bit of a heuristic approach here, where the it counts 1/3 of the straight line distance as one of the dimensions, meaning that straight line distance is accounted for, but not taken quite as seriously as the triangulation dimensions. This looks like a good balance to me, as if I didn't account for straight line distance at all it would display some pretty obvious weird artifacts and errors, but if I counted it in fully it would not leak through shortcuts at all.

Contrary to what I expected the algorithm does give some "false far" outcomes, in cases when all the exits are close to each other. This can be helped by giving the straight line distance more weight. I'm thinking though, maybe I shouldn't actually just pick the largest value - instead I could try to calculate the multidimensional diagonal in triangulation space?  Evil

It is pretty cool though! It gives an estimation of a dijkstra map between any two points that's decently accurate, and at 0 memory cost and 0 processing cost. The way to do this "properly" would be to move around a dijkstra map target every time it changes tile, do a complete flood fill, and save a huge grid of those values, just to throw it away on the next movement. Slow, weighty, and it couldn't really be done for more than a few moving entities. This system can estimate distances between all and any points on the fly! I do these calculations for every tile times every frame! With this system I could easily have 100 creatures asking for the distance to all 99 other creatures each frame, and it wouldn't even be a problem.

Gonna try my hands at those multi-dimensional diagonals now ...





   JLJac on September 16, 2014, 11:59:58 PM:

Yeah! These are actually far from perfect - if you look at the gif you might notice that there's some snapping going on at places. That's where one of the dijkstra maps approach the area from two different directions. Those tiles are considered far apart despite actually being close. The less dijkstra maps it has to work with and the closer they are the more stuff like that. But given the extreme benefits in speed and memory I think that's worth it by far. For AI's that are supposed to be a bit smarter you could maybe have a real dijkstra map being updated close to themselves or the threat they're avoiding, and then resort to the triangulation for the rest of the level.

Multidimensional diagonals worked out fine, the estimation looks a bit smoother. They're probably a bit slower as they have some exponents and a square root (it's actually just Pythagoras's theorem in n dimension) but that's still so vastly faster than creating actual dijkstra maps that it's not really anything to think about.

It will be interesting to see how the AI will be able to use this!





   JLJac on September 17, 2014, 03:14:47 PM:

That would be generating and following a dijkstra map - every tile knows its distance to a fixed origin point. The triangulation is about comparing multiple overlapping dijkstra maps to estimate the distance between any two arbitrary coordinates. This means that I can get an approximation of a dijkstra map for any point with just a few lines of code executed and no memory usage, contrary to executing the tens of thousands of lines of code necessary to generate an actual dijkstra map and save it to memory.





   JLJac on September 17, 2014, 03:38:08 PM:

Yep! The more baked maps, and the more apart their origins, the more accurate the triangulation becomes.

What the system doesn't account for however is one-way connections, as it's just comparing distances it doesn't know the difference between positive or negative distance, or what kind of connections the distances go through.





   JLJac on September 18, 2014, 01:18:26 AM:

Update 310
So I got some flight behavior up and running. The core mechanic is an engine that can identify a "threat level" for any given tile, like so:



Sorry about the coloration in these ones, it's a bit unintuitive as I didn't invert the hues. Red is less threatening, and blue is very threatening. The map is generated by a combination of straight distance and dijkstra triangulations.

The system supports many different threats which can be assigned separate severity. In this next gif there's one threat emitter assigned to the mouse pointer and another stationary - they tend to melt together if they get close.

The dead end map is consulted as well - you might notice how some tiles are always considered a bit threatening. Basically dead end tiles get a "bonus" on their threatening level.



The flight behavior consists of picking an (accessable) coordinate every frame, and comparing it to the current destination of the path finder. If the new point is less threatening than the last one, the new one is assigned. There's a 50% chance to evaluate one of the pre-baked "hub spots", otherwise it'll pick a coordinate from anywhere in the room. I'll also have it consider exits here later, making the creature able to flee from the room rather than just within it.

The path finder assigns a harsh cost to tiles that are considered threatening, meaning that the paths will take detours to avoid them. I have an exponential formula to this, making it almost impossible for it to path through a threat area.

Here's a blue lizard feeling very afraid of the mouse pointer.



The lizards are not good at crawling backwards, and avoid it for the most part, but if they have a nearby threat right in front of them they'll back up. This will activate a "panic mode", lasting a second or so, where they won't path to any specific target, but just move to whichever nearby tile is considered the least threatening.

The system is perhaps not perfect, but I think it's good enough for most purposes. The goal here isn't as much to create an actual super efficient fleeing behavior as it is to communicate that the creature is trying to escape. From a game fun perspective it is probably always more fun for a non-player entity to actually bite the grass rather than successfully getting away (Action happens! Something gets eaten! And it wasn't you!) so as long as the behavior doesn't look frustratingly stupid I'm happy with it. Now to contemplate what to do next... Flies?





   JLJac on September 19, 2014, 12:11:51 AM:

Haha yeah - I think it'll be pretty cool when you've been antagonized by those guys for a while to suddenly see them flee from either yourself when you've managed to hurt a few of them with a spear, or some larger creature hunting them.

Update 311
Spent the day cleaning up the fleeing behavior - I had stupidly been using just 2D coordinates throughout the entire system, making it unable to differentiate between rooms and making creatures potentially confused by threats in other rooms. Now it's using world coordinates, that have the room index specified.

Now the threat tracker can create a link to the creature tracker as well, which I didn't really have a framework for yesterday. This means that a creature can avoid another creature using its tracking data, and I can easily set up links like that when the AI is alerted that a new creature has been spotted. As the time since the threatening creature was seen increases, the threat will decrease accordingly, until it's forgotten altogether.

Also enabled fleeing between rooms. If a fleeing creature realizes that there's an exit with no threats blocking it, it might just leave.

Have a nice weekend! Here's a gif of Reverse Rain World!






   JLJac on September 22, 2014, 03:34:11 AM:

Update 312
Some pretty interesting parts have started moving into place today. First and foremost, a framework for relationships between species. A relationship is a one-way link between one Creature Template and another, consisting of a type enumerator and a float signifying intensity. Currently I have Ignore, Eat, Afraid as possible relationship types, but there are endless possibilities such as AggressiveRivalry, Annoyed, Symbiotic, KillForFun, Cautious, Territorial, and so on. These are the threads that will hold this food web together.

As you might remember the Creature Templates have some inheritance between them - for example there exists a Lizard template that's never incarnated on a level, but which is an ancestor of all the lizard breeds. I've set the relationship system up to flow down through the inheritance tree, and overlap empty ("Ignore") relationships but never specifically declared relationships. I'll have you know that I did this with a recursive method! (On declaring a relationship, check all children if they have any relationship to the relationshipee, if not, call the method again but on the child! I only got stack overflow exceptions 5 times setting it up!)

This means that I can first declare that all lizards should eat slugcats and ignore each other, by addressing the ancestor Lizard object. Then I can create exceptions, like making Green lizards hunt Blue lizards, making Pinks aggressive towards each other, or deciding that Greens should actually run away from slugcats rather than hunt them.

The really cool part about today though is that I've been able to start hooking the AI components to some behavior. Everything was pretty much in place already, so it was very easy to make the lizards actually react to other creatures. As I had planned, it seems like I can create lizard behavior with very little code in the actual lizard AI, as almost everything is outsourced to the different modules.

So for example there is a Threat Tracker, right? And from today a Prey Tracker as well. The general AI already has a method that is "a creature has been spotted". So what the lizard AI does is that each time it gets notified about a new creature it checks with the Creature Template Relationships: if the alien creature is prey, it notifies the Prey Tracker - if it's a threat, the Threat Tracker is notified.

These modules are then pretty much autonomous, they run their own behaviors alongside the main AI, keeping track of threats and potential prey respectively. Every frame the main AI can ask them, however, for a status report. The Threat Tracker can be asked for a threat level 0-1, and the Prey Tracker can similarly be asked how it estimates the chances of catching its most attractive prey within the next few frames.

Using these values, the main AI can do a utility based decision - what's more urgent? If the threat tracker tells me that I'm actually in danger here, perhaps I should activate the Fleeing behavior? The idea here is that these values should be weighted when compared, for example a threat level of 0.3 might be more important than an estimation from the Prey Tracker at 0.7, as self-preservation should be prioritized. Later when more elements are in, the threat of rain could perhaps overshadow the threat of another creature, etc.

So say that the utility check decides that the current threat level is the most urgent issue - in that case the fleeing behavior is activated. When the fleeing behavior runs, the main AI once again turns to the Threat Tracker, this time asking for specific details on where to run. The Threat Tracker then does its calculations and returns a flight path, while the Prey Tracker can be more passive this particular frame.

Then there's of course talk between the modules, all of which is moderated by the main AI. For example the Path Finder will ask the main AI about each tile it handles, whether or not the main AI wants to add some path finding cost to that particular tile. The main AI will then ask other modules, such as the Obstacle Tracker or Threat Tracker, and for example return higher costs to tiles that are perceived as more threatening.

It all seems to work! A hunter/prey relationship between Green and Blue lizards makes one pursue the other, but both still hunt the player on opportunity, for example. It's a lot of fun to be able to switch these relationships on an off at a whim. Right now there's no real interactions in yet, so they can't bite each other or the like, but it's still fun to watch them react to each other.

What's fun about the AI system is that it seems I have somewhat been able to separate the more technical stuff from the design stuff - out in the modules calculations are done, while in the main AI there are only a few lines of code, but those lines are creative content rather than technical solutions. Using the modules I can quickly and cleanly create behavior that conveys personality, such as cowardice or brute force, rather than solving a lot of technical problems. I'm much looking forward to creating more creatures within this framework!

All of this is very hardcoded and crude as is, but I soon hope to be able to show you some more sophisticated stuff.





   jamesprimate on September 22, 2014, 06:12:59 PM:

KillForFun

joar turning the brutality up to 12





   JLJac on September 23, 2014, 01:14:49 AM:

A quick question that popped up: How do the blue lizards react to the green ones? Did you make them afraid of green ones by default, or do they realise that they are being hunted and then register the hunter as a threat? Or maybe they are just completely oblivious to the fact that they are about to be eaten?  Shrug

I also loved the lizard backing up when he suddenly sees the slugcat below him in the reverse rain world gif! The way you handle the AI makes the creatures feel truly alive!
Thanks! That specific relationship is pretty much just me testing the system by this point, I don't know whether it'll make it to the final game. It might though! Or maybe green lizards could become aggressive towards blues if they're competing over prey. In any case, the creatures are going to know what other creatures to watch out for by default. They've been living in this world a long time, so they have a hunch. If they'd have to actually figure out what's dangerous and not, they'd not really stand a chance - because they're unable to see through walls they'd spot the threat as it was currently charging at them, and wouldn't really have any time to draw conclusions. I guess that the same rule as in actual nature could apply though: if something is bigger than you, get out of there!

Sounds really cool.

Are multiple lizards of the same color able to hunt cooperatively? For example not choosing the same path and/or keeping a constant distance to each other?
The yellow lizards (not in yet) have cooperation as their trait, the others are rivals with varying hostility towards each other.

I must admit that I haven't read all of the 102 pages, but just wanted to say that I really like the style of this project. It looks awesome and, judging from the gifs you're posting, has a great feel to it. Any chance to get an ETA on when this game will be released? Smiley
Thank you! No exact date yet, James and I need to pin down some design choices first!

Update 313
Got a utility based AI system up and running, with a little class keeping track of each utility level, multiplying it by a strength, etc. Seems to run pretty well! Also made it so that you can give it a bias to continue the current behavior, and a function that compares all utilities and returns the highest.

One problem I ran into today was this - I want the Fear parameter to tick down slowly rather than just drop as soon as the creature is out of the threat's immediate proximity. It makes sense to continue staying away for a bit, right? The problem I encountered is that even very minor threats (say 0.2 on the "how afraid am I of this thing"-scale) should be able to cram the Fear meter up to max if they're very close.

You might be more afraid of bears than wolves, and that should make a difference if you spot either creature on a distance. If you walk around a corner and end up eye-to-eye with either animal the difference in shock and panic wouldn't be very big though.

I have something like this in - the threat alert divides with an exponential of the distance, making it so that a threatening creature has a large blob of super scary tiles around it, while a less threatening creature is only really scary in its immediate neighborhood.

The problem is that if the AI is scared by a less scary creature, but scared to max scaredness, it still takes a long time for the Fear to tick down. I don't quite know how to tackle this one just yet. One idea is that every frame that the Fear parameter is something high, a counter ticks, and then the Fear parameter ticks down slower depending on that counter... Like, if the creature was panicked for 20 seconds it takes longer to calm down than if it was only scared for 4 seconds. Hmmmm....

I wanted to post a gif of some lizards hunting each other and the player today, but the fleeing behavior never quite got to a place where it didn't look stupid, despite some efforts to make it look more consistent. I know you guys liked the panicked hesitation, but there was a bit much of it, making it look like a flickering back and forth rather than a somewhat consistent following of a flight path.

The problem is mainly that the creatures don't commit to a flight path, instead they constantly change their mind as to where they're going. I have been able to tackle some of that today though. I identified the problem to be that when evaluating if a certain spot is a good place to flee to, you can't only look at how scary it is at the destination, you have to look at how scary it is along the path to get there. Example - a safe place that is behind a threat, meaning that you have to move by very close to the threat in order to get there.

The correct solution for this would be to actually calculate the entire path, I guess, and evaluate how scary every tile is along that path. This isn't viable though, as these evaluations have to happen several times per frame. Instead I made some kind of hacky little approximation, where I check the tiles in a straight line between the creature and the possible target position. This actually seems to get rid of the absolutely worst running-straight-into-threat scenarios.

Things are moving along rather well. I found myself playing the game as a game from time to time when playtesting, which is a first for the Unity version. The very core elements of sneaking, running and out-maneuvering are in now, and the ability to very quickly change creature relationships on a whim creates a lot of cool opportunities for experimentation. Tomorrow I hope to be able to show you something.





   JLJac on September 24, 2014, 05:31:16 AM:

I know, I will give you something to look at! I'm just so caught up right now... Please be patient just a liiiiittle longer! Yeah, that idea crossed my mind as well! It would be super easy to implement.

Update 314
I've entered some kind of turbo mode, and am working like crazy. That said, I find it difficult to describe what I've been doing today in simple terms. Creating lizard behavior, and changing what needs to be changed in order to create lizard behavior, I guess is what's going on. Today the lizards got a ton more going on for them. Mostly I've worked on idle behaviors. When idle, they slow down some, stop a while, move between different spots. They sit and look at other objects - taking things such as how fast the objects are into account when deciding what to look at. They all have different preferences when it comes to choosing a spot to sit - green ones like an open floor, pink ones like to lurk in a narrow space, and blue ones prefer sticking to some wall high above everything else, ready to drop down on whatever might pass by.

I think what's going on here is that I've suddenly found myself creating the game, rather than paving the road for creating the game. This process is a little different, as I can't be as brainy about it - it's not a bunch of tasks that can be crossed off, but rather a creative thing. That said, I should be able to devlog properly... So sorry about how this week has been so far haha! Tomorrow I promise to pull myself together and give you some gifs to look at!





   JLJac on September 25, 2014, 01:10:01 AM:

Update 314
The lizards now have three of their main behaviors more or less done - idling, hunting and fleeing. The one missing is fleeing from the rain - when they can do all those things they're "feature complete" in that they'll work as a game mechanic, though the particulars of the behaviors can of course always be improved.

The very first step towards making them flee away from rain is introducing the dens they'll flee into - so that's one thing I've done today. It's a change that goes pretty deep in the most basic infra structure of the game (rooms, connections between rooms, how rooms are loaded. Basically the foundation of the game world) and it's been a long time coming. It wasn't as bad as I expected it to be though, just an hour or so later the game ran again with no problems. The worst part was having to dive back in the lingo level editor to fix some stuff (yuck!) but other than that the new build seemed to be able to handle the changes. Something's gonna pop up down the line though, I guarantee it :S

Other than that I've actually worked a little on cosmetics as well. As the idle behavior is slowly but surely coming together, there are some animation details that need to go with it. I know this has been the devlog's most boring week ever, but here's at least something visual to look at:



Sorry about the chubby tail and tail gradient, I know we decided that was going away but I haven't gotten around to changing it yet. What you're supposed to look at here is that the head can move, and that there's subtle movement in the tail and a hint of breath contractions around the chest area. If the lizard is dead or knocked out those movements should probably stop.





   jamesprimate on September 25, 2014, 04:52:46 AM:

sausage lizard!!!!!

idle animation looks promising. probably hard to judge outside of the context. i do believe we are heading toward some Nice Gifs though!





   JLJac on September 26, 2014, 12:26:19 AM:

As is they're pretty straight on, but it could be cool to have some other behaviors as well. The white ones ambush, but the point of that behavior is that you don't see them sit and wait for you as they're camouflaged. I can't really come up with any situation where a passive behavior would be beneficial to them... But yeah, it'd look totally cool.

Update 315
This morning I set James up with the level editor, and introduced him to the eldritch horrors that are its interaction design and general user hostility. Three years worth of "I'll just assign it to a button, I'll remember which one" has not turned out pretty. That said, he seemed to get a good grasp of it, and it's going to be a lot of fun to see what he'll produce!

Other than that, I did some more work on idle behavior, making them have a more reasonable way of tracking what to look at. Now they judge what creature to focus on depending on several parameters, such as distance, size of the creature, how intense the relationship to the creature is, how scary the creature is considered to be, and whether the creature is in view. Here's a gif with two lizard having their hunting behavior turned off, just chilling out and looking at each other and the player:



Apart from that I've been further tweaking overall behavior, and the big change of the day is that lizards now have a limited field of vision. It varies some depending on breed, but is usually around 180 degrees, meaning that you can fairly easily sneak by behind them.

Here's three lizards in a level without the player, tracking each other and moving about. The green one has an "eat" relationship to the blue one, but a pretty weak one, meaning that it'll hunt it if it doesn't really have anything better to do, and give up pretty soon if the hunt is not going well. The blue lizard has a similarly lukewarm fleeing behavior. If the player were to enter the room they'd probably both stop caring about each other. The pink lizard is just trying to hang out, and you kind of get the impression that it's a little annoyed by the other two. The networks of little squares coming out of each lizard is a visualization of the Tracker, meaning that those are basically each creature's hypothesis of where each other creature might be. The pink lizard, which isn't really interested in any of the others, does very minimal tracking - basically just saving the last position they were seen. This slimmed down tracking behavior is one of the things I got done yesterday, I think. The blue and the green however run the full algorithm on each other.



Have a nice weekend everyone! See you Monday!





   JLJac on September 28, 2014, 11:50:07 PM:

Update 316

*flap flap flap*






   jamesprimate on September 29, 2014, 03:54:23 AM:

YAAAAAAY





   JLJac on September 30, 2014, 12:48:27 AM:

Update 317

Hey, remember these guys? (Blue for your viewing convenience)



I've had a lot of fun with the flocking behaviors of these. The creature is ... eh... half bat, half (butter?)fly, and they're able to switch between a flapping bat flight and a buzzing insect flight - this time around I explored that aspect even further by having them engage in some kind of swarming ... dance? ... where they use the buzzing flight for a slightly longer time, hovering in place. The framerate of the gif doesn't really make those rapid wing movements justice, but you get the idea. They actually flap once per frame, so 40 times per second, but the graphics engine I've got going extrapolates between frames, meaning that you'll see as many frames as your computer can render. Her's the flapping in SUPER SLOWMO:



You might notice that some of them flap more with one wing than the other - that's when they're trying to move in the horizontal dimension.

And here's a slugcat ambush in regular moderate slowmo (no actual interactions yet, but the fleeing behavior is in):



Edit: Oh, yeah, in that last gif there's actually a floor, but it isn't visible because I've turned the background off. In case you wondered why the slugcat is hitting solid air all of a sudden.





   jamesprimate on September 30, 2014, 04:52:48 AM:






Ahahahaha this looks so nature documentary, i loooooove it. the bat swarm movement looks fantastic!!!





   JLJac on September 30, 2014, 11:27:33 PM:

Why thank you!  Grin
 

Hahaha wow that's awesome! Especially like the little mini flaps in between... You should release it for the iPhone, it has one entire more dimension of freedom than flappy bird, so it should do ^2 the $$$ according to simple maths!

Update 318
Took it a bit easier today, and did stuff such as commenting some code. Might as well do it when it's fresh in memory. Also cleaned up the bat flight animation a bit - for example you might notice that the rapid flaps in yesterday's gif are upside down - they should be quick when going down and slightly slower when going up. Also the wings tended to be tilted upwards too much an not enough downwards, so I messed with those angles some and applied a Mathf.Pow to make the movement less stiff and linear.

Other than that I started implementing some bat grabbing. When I first just hooked the creatures up with the default grabbing code I got this behavior, which struck me as hilariously confused:



"Is it stuck to my neck!? It's stuck to my neck right... If I stand very still maybe it won't bite me..."
And the bat is like "Whoops stuck to a neck here. Guess I'll just keep on flapping"
 Cheesy

After a bit of tweaking it started to look better though:



It might not be very visible in these gifs, but the hands stretching out to reach for bats are in as well, but as I haven't gotten around to making the slugcat direct its gaze it doesn't look very good yet. Instead of looking at the bat and reaching for it it'll just stare blankly at the camera with the hand moving around in the background. Once the face movements are in I'm sure it'll look cool though.





   JLJac on October 01, 2014, 04:33:38 AM:

Eating the fly is planned as a Premium feature for Gold Subscribers.





   jamesprimate on October 01, 2014, 08:42:46 PM:

so after a brief (2 hour) crash-course from Joar on the level editor basics, ive been on the world-building warpath. We're looking to be pretty ambitious with the size of the world (200+ rooms? id like to do even more than that), so this is what im going to be staring at for the foreseeable future:



A really significant change in the new unity build is that rooms can now be multiple screens in width or height, which opens up huuuuuuge possibilities for gameplay that i've been mulling over the past few months. We're planning on using them as larger set-piece levels to base regions around for a dramatic effect. But first I have to get my level building chops up and do some tests with multi-screen room implementation.

Here I took inspiration from a level of joar's called  colosseum, and basically just extended it into 2 screens:


The red and black overlay lines indicate the multiple camera positions. in order to format for both 16:9 and 4:3, we're making each level work for both simultaneously. its a little tricky, but hey.


We can also go vertical, as this 3 screen concept that spans from a rooftop into the canopy:



That was one of my first multi-screen tests, so i flubbed the height a little. no matter, camera placement to the rescue.




A horizontal 3-screen concept for the underhang region:






This next one is definitely my favorite of the 25(!) i've done so far. A 5-screen set piece concept for the garbage pit region called garbageWastes:





Its a bit hard to make out in such a tiny picture, but imagine each one of those rectangle overlays is a 1600:900 screen. Quite Exciting! Check it out here for a bit more detail: https://i.imgur.com/aYGLNkY.png 

But.... that level broke the editor, so perhaps ill step it down a notch for a bit  Cry





   jamesprimate on October 01, 2014, 09:12:20 PM:

by the end of the kickstarter, joar had around 70 completed levels i think? so thats a pretty fair amount. but a good many of those were multiplayer levels or concepts. the actual knitted-together, navigable world was around... 40 i think? maybe half of those being place-holders

im thinking (ambitiously...) that the game world of the alpha will be about the size of maybe 2 of the 14ish regions planned for the game.

but we shall see! after a few months in the level editor i may have changed my tune  Blink





   JLJac on October 02, 2014, 12:37:29 AM:

@iambored2006 & Christian,
Yeah, it's a sneaker. All the other creatures have a limited FoV, except the player. The idea is that you don't question the player's omniscience as much, as it stems from the weird duality of player/avatar that comes from having a third person perspective. The slugcat is in the world and shouldn't be able to see through walls, but you're looking at it all from the unfathomable third dimension, so you know things you shouldn't know. This is actually the core aspect that makes the game fun as well. You look at the lizards and you see what they do, and can kind of imagine what they might know or think, as you try to play around that. Your ability to see through walls is also pretty much the only leverage you have on the lizards, if they were able to ambush you from behind a corner the game would be virtually impossible. I could easily add a mode where other creatures are invisible if there's not an actual line of sight from your avatar to them, but that would essentially break the core mechanic. It would be extremely scary though hahaha! So it might be fun to try.

Update 319
Made the flies able to move between rooms, and exist in abstract rooms. James and I had a little talk, and decided that bats (yes, I'm using fly and bat every second time) didn't need to be saved as individual creatures in abstract space. There's really never no need to identify one fly from another, a bat is a fly is a bat. Also it seemed ridiculous to save the individual positions of ... idk... 10 000+ flies on the entire world map, especially as they are all moving the entire time. So instead I created a system where they are saved as just numbers, per node in each room.

As always when I've spent the day doing something boring I'm going to try to appease you with saying that it's a generalized system that can be applied to any creature from here on! It's a boring update, but it'll make fun updates be more frequent in the future! We call this system Quantified Creatures, as they are not remembered as individuals but just reduced to their quantity. I think this system can be cool for some small decorative insects and the like as well.

The system supports free movement between rooms, abstract to abstract, abstract to realized, realized to abstract and realized to realized.

One thing this system is capable of doing which I'm looking forward to is to create extremely large migrations through the world map. We have been talking a bit back and forth about whether or not bats should migrate - it might not be a good idea for gameplay reasons. If they don't though, some other creature definitely should. My idea is that I could have huge quantities of the creature moving between abstract rooms, as this would be no harder than just shuffling numbers (minus one in this room, plus one in this room). Then when you move through the rooms and view them one by one, as many of the creatures as the computer is capable of could be shown moving around. You could follow the flock and see them consistently existing in many rooms, moving in the same direction, suggesting an epic world-map-scaled movement with thousands of creatures, even though not all of them are necessarily realized at a time.

James has really been killing it with the level editor 0______o He's been sending me some pretty amazing looking levels. Looking at his levels, I've come to realize that he's way better at composition than I am haha... Look at those hills in the wide one, that's some pretty damn smooth line work for a musician! Still I'll be necessary in the creation of these 200+ (Shocked) rooms, because actually placing the tiles demands knowing them all by heart. So it seems we're zoning in on a setup where James creates the geometry and I decorate it and give it the RW aesthetic. Which seems like a perfect match! But nothing is settled for sure yet, we'll have to see how things develop as we get into the focused world building phase. Until then I should probably fix the level editor so it can output larger levels ...





   JLJac on October 02, 2014, 01:09:40 AM:

I think that in fictional universes, you can't really speak of realism per se. I mean, look at it. But you can talk of in-world consistency. My philosophy is something like this:

* Make simple, understandable rules
* Stick to the rules
* When it's necessary to make an exception, try to
   -Promote the exception to a rule. If the exception is in many places, and consistent, it's not an irregular oddity any more.
   -Demote, minimize and hide the exception. A fallback solution, as it'll always be an exception, but better than nothing.
   -Clump exceptions. Many exceptions in one "weirdness zone" is less jarring than having them everywhere.

So, rain world creatures have certain rules going for them, one of which is inability to see through walls. This applies to all of them. This is a gameplay rule, they have "canon" rules as well, such as that they need to hide in a hole when the rain comes, or aesthetic rules, such as that they consists of several moving parts but few, flat colors.

The player creature is by necessity an oddity, because it's controlled by the player. So I've sort of been gravitating towards making the player creature an exception cluster. The ability to see through walls is one of those exceptions.

Then there's other stuff as well, such as aesthetic choices, I wouldn't want the sprites to pop or fade into existence when you see them, as I try to keep HUD and game graphics as separate as possible - essentially my goal is that everything you look at should either be very clearly an object that *is there* in the physical game world, or something that is extremely clearly a HUD overlay which is not in the world (promoting the exception to rule and clustering it). So these kinds of decisions have developed together with gameplay decisions into what I'm thinking of as the current design idea.

And simplicity has a certain weight as well! If the simplest, default mechanic of a 2D game is that you can see everything on the screen, that should be a slight bias to keeping it like that as well, in my opinion. Otherwise you're adding stuff, and whenever you're adding stuff you need to be careful that it's stylistically in line with everything else.

Sorry it got a bit long! I'm not defensive against your question, I just like to talk about this stuff Smiley





   JLJac on October 02, 2014, 06:25:38 PM:

Update 320
Finally we went through and got the Unity pro license, and now for the first time I've been able to see the new animated creatures together with the backgrounds!





This is just a very first look, still a lot to do, so I might come back in the evening with a more detailed update. Just thought you guys were so starved of visual stuff that you might appreciate seeing that the graphics are starting to come together.





   jamesprimate on October 02, 2014, 06:36:29 PM:

Update 320
Finally we went through and got the Unity pro license, and now for the first time I've been able to see the new animated creatures together with the backgrounds!





This is just a very first look, still a lot to do, so I might come back in the evening with a more detailed update. Just thought you guys were so starved of visual stuff that you might appreciate seeing that the graphics are starting to come together.

LOOKS

ABSOLUTELY

INCREDIBLE

 Tears of Joy





   JLJac on October 03, 2014, 06:56:09 PM:

Thanks thanks thanks!

Update 321

The old lizard bubbles are back in:



I also made a few impact effects, such as little water droplets. When I grab the lizards with the mouse and smash them in the ground (don't worry, these stunts were performed by trained professionals) there's really a lot of water, that's because the mouse movement impact speed is much greater than most in-game scenarios, and because there are three of them at the same spot. To get a feeling for what it actually looks like most of the time, take a look at when they impact the ground from natural falling.



And one extra, for hilarity. I had forgotten that I had activated grabbing other creatures when I introduced the bats, so when playing with some lizards I accidentally pressed the wrong button and.... Hahaha this looks too funny! Just grabs the bastard by the throat like it's nothing!



I don't think that the actual game will have the ability to grab lizards, and if it will, it will definitely be factored in that the lizard weights more - in this gif the lizard is just moved to where the player is, meaning it essentially has 0 mass. Also if the game was finished the lizard would bite you if you attempted this. So rest assured, there won't be anything that looks like this ridiculous scenario in the actual game, I just wanted to show it to you because it looked funny.





   JLJac on October 04, 2014, 02:19:26 AM:

No real world equivalent really - sometimes I think of it as smoke, but mostly as bubbles. They're also similar to the emotional signifiers you might see in cartoons or anime (lines, squiggles, signs) except they do have some sort of physical presence. You know how some animated characters has some feature that is physically there, but is used mostly to convey emotion (the one that comes to mind is hades' fire in disney's hercules), something like that. It's a mystery Smiley





   jamesprimate on October 04, 2014, 08:30:38 AM:

oh wow that direct comparison is really nice! everything looks pitch perfect, just BETTER. smoother, cleaner, deeper. really really freaking impressive considering the huuuuuuuuuge amount of things that have changed under the hood.





   JLJac on October 04, 2014, 05:33:55 PM:

Yup, parallel. The shadows are created with a pretty simple mechanic. As the level is rendered, is saves the depth of each pixel, ie how far into the Z dimension it is.

Now we're in the shader, and we're rendering a pixel P.

What we need to do is find a... let's call it shadow check coordinate S.

S is to the left of and above P. How much to the left and above increases linearly with the depth at P.

So if P has a depth of 6, S might be 6 pixels to the left and 6 pixels above P. (Except it's actually scaled by a factor in the actual game, and can have different angles that are not necessarily 45 degrees)

When we have S we do a check whether or not coordinate S is occupied by any sprite. If yes, then coordinate P should be in shadow.

What this essentially means is that if a wall is far behind the play layer, the shadows will appear far down to the right of the sprites. If the wall is close, the shadows will appear close to the sprites. But it's on a per-pixel level, meaning that she shadows can be distorted by different shapes in the background.

Simple as that! If you want to do some digging through the thread I think I did this stuff back in May, so there are more details to get there  Hand Thumbs Up Right





   JLJac on October 04, 2014, 07:49:39 PM:

Yeah, it's all done from scratch. I'm using Unity to handle input, it has a very convenient framework where you can just ask if a button is pressed. Also I use the unity engine for some extremely basic stuff such as float maths and random numbers, but I think there are probably a million libraries for that, so it's not really Unity specific.

The main reason why we're in Unity to begin with is to use its graphics engine to render sprites through the Futile framework. But that's some pretty basic stuff as well, importing a graphic, declaring a sprite that uses the graphic, that kind of stuff. And I have been digging a tiny little bit into that as well, doing customizations, for example the tails of the creatures are a custom version of the Futile FSprite class.

So yeah, I haven't touched the Unity Editor and it's all written in C# from scratch. That is cool and all, but it comes with its problems. For example I have my own home brewn "physics engine", which is not the best all of the time for all scenarios. So, pros and cons. Because on the other hand, if there is a problem in my code, I can attempt to fix it, as the entire code is accessible to me.

If I got a fresh start at making games, I'd probably not try to learn how to do everything myself though! I think you can achieve really cool results way more quickly by using for example the Unity Editor and presets. It's probably a way more efficient work flow, and the code doesn't end up an obscure nightmare haha!





   JLJac on October 05, 2014, 05:47:08 AM:

Yeah definitely. The ones shown are the standard palettes, and in those I want to keep the shadows from being distracting - but when the game gets some more areas that are focused more on mood rather than action, there'll be palettes with much greater contrast between light and shadow, so you really can't miss it!





   JLJac on October 05, 2014, 02:39:35 PM:

Not that it makes any difference, but x^3 and x^4 are still polynomial. Exponential is e^x or 10^x or anything^x

Oops! I never took maths after ... ugh school systems ... upper secondary perhaps? So I really don't have the faintest what I'm talking about o.0 Thanks for the correction though!

The gif is just a work in progress that looked interesting but was never used. What you're seeing is a dijkstra map being generated with a completely random next-tile-to-expand-heuristic, and as each new tile is added it traces back to the origin point and increments the values along the way, creating the tree-like structure.

I say 200kb per map is OK. That's what, 10-100 megs of RAM for the whole game, considering this will probably end up being the most memory-heavy part of it?

The performance question I'd ask is "will all that data (for the currently loaded map) fit in cache?". And even if it won't fit, nothing you can do about it. You can't compress data for cache, that's like disassembling half your car so it can fit in a parking space closer to home.

Programmer time is the most precious resource, don't hesitate over optimisation: that's what profiling's for.

Then again, you're the guy with your own company, I'm just a chump who hasn't used c++ in 4 years, still hasn't learned the modern opengl pipeline, and never started his own game. Take everything I tell you as personally untested but comforting-sounding hearsay.
Not all rooms will be loaded at the same time, so this is probably not going to be a problem at all. It's just that it'd feel kinda weird to release a pixelly retro platformer that's 30GB big and requires a monster of a computer, haha.

I guarantee you that my chumpness trumps yours! I'm just a kid to whom a kickstarter happened, and I have no idea what I'm doing. But things seem to be going good enough so far, touch wood!

So you're not limited to just floor and backwall shadows! Nicely done! I'd love to see some more complex background shapes.
Unfortunately, for my own game, I can't afford going per-pixel like this. I tried to implement dynamic shadows today in the most efficient way I could think of, and yet it still fell flat on its face at ~30 fps. Guess I'll have to stick to static shadows. I'll give that earlier material a read, though.

Edit: oh, and thank you, of course, for replying! I really appreciate it!  Beer!
Technically I'm actually limited to only back wall shadows, but all surfaces are built out of several layers of back wall Wink I think that if you're doing anything per-pixel, it has to be done in a shader. If you do that stuff on the processor, it's just too slow. Oh and you don't need to thank me for bragging about my game haha!   Crazy





   JLJac on October 06, 2014, 12:38:55 AM:

Thank you so much everyone! Really means a lot to know that the tiny little details I spend hours on are actually noticed!

Answering a few questions -

No UI won't be a new game + feature, because it's the default mode. Maybe we'll have something like that you can hold down a button and see how many flies you've caught so you don't have to count them, but we're definitely aiming for an entirely clean screen during gameplay. Inverted RW, heheheh, idk... really breaks canon, that one. But if it's fun it could be included as a secret or something.

Shortcuts - yes, super unclear where they lead at the moment. They are not graphically finished to look like they did in the lingo version, where it was a little clearer because they had little arrows at the entrances and the actual shortcut consisted of black somewhat visible dots, but even back then it was hard to know. This one definitely needs some thinking.

Environments - nope, I've decided that the environments are going to be completely static. A bit boring, I know, but it was a sacrifice I had to do in order to have the shadows. Also it would have been a technical nightmare. The third reason is that as it's only me doing animation, it feels reasonable to focus the energy on creature animations. If some flower wiggles as you pass it that might be cool, but it can never convey personality or narrative like creatures, so it feels like more bang for the buck to put my hours there.

Update 322
Now when everyone is excited about the latest kickstarter update, I take the opportunity to do boring stuff! Sneaky like a ninja!

So today I fixed some lizard-getting-stuck scenarios. And made blue lizards able to climb slopes that are in the ceiling. Maybe when James wakes up he can undo some of the boring by posting one of the gifs that didn't end up used in the kickstarter update - where there any cool ones, James?





   JLJac on October 06, 2014, 02:19:21 AM:

That could be added, but I think I won't, because it'd be inconsistent to have some such things be static and others be interactive. You never know though, if there is some way to do it stylistically in line with the rest of the game... As for whether all environmental components are in the game - if you mean stuff like plants and chains and other such decorations, of course not! Lots to be added when we get to the Art Phase.





   JLJac on October 06, 2014, 04:34:23 AM:

Ah! Yeah ok so with that stuff I'm preeeetty happy to keep it simple - I'd rather have a few solid, understandable components and then use creatures to make it interesting. That said we plan a pretty big game world, so it would be weird if not one or two more environmental elements like that snuck in. But it's not going to be a huge plethora of tile types, rather tiles will be kept pretty plain to set the stage for a plethora of creatures.





   jamesprimate on October 06, 2014, 04:02:35 PM:

Nice, some Rain World coverage on Rock Paper Shotgun!
http://www.rockpapershotgun.com/2014/10/06/rain-world-new-engine/

ah thats awesome theyre even paying attention to updates! i dont have the heart to correct them on the game maker thing, but fortunately commenter doomlaser knows whats up!  Hand Metal Right





   JLJac on October 07, 2014, 01:03:00 AM:

GifCam!

Update 333

Lizard strikes!





There's quite a lot going on here. In the morning I did the crouch-and-strike behavior you can see, which is also graphically communicated by the head turning black as they're charging. This is intended to look cool, but is actually mostly a liability to them - if they try this against a moving target they'll most likely miss, and even though the lunge itself is fast there's the charging and a speed penalty after as well, making the net speed gain negative in most situations. The lunge is a little bit different between breeds, the green one has more of a bull rush, and the blue one has something akin to a proper jump which it only uses very occasionally (as it's a pretty safe bet it'll result in falling to death on any level without a floor).

The great technical challenge of the day was something you might not expect though - placing the slugcat between the jaws of the lizard. Now there's a huge complex system in place where a graphics representation can contain sprite containers as well as sprites, and a system for moving objects into and out of those containers. So the lizard has essentially an entire sprite layer between its upper and lower jaw, and when the player is bitten every player sprite is moved into that layer, while still being moved around by the player object.

These Futile sprite containers also nest, which is pretty cool - in theory I think a lizard could be biting a lizard which is biting a lizard which is biting a lizard...

Now that the system is in place I think it's going to be pretty easy to implement similar stuff for other creatures, so if a creature is supposed to eat another, or contain an object nested in its sprites in some other way, there's a framework for that. One creature can even have several sprite containers, why ever they'd need that. Maybe something with two grabbing hands or something similar.





   jamesprimate on October 07, 2014, 01:11:25 AM:

Good lord! That is brutal!





   JLJac on October 08, 2014, 12:46:20 AM:

Thank you thank you thank you thank you! I'm really pleased with how things are coming together as well Smiley Keep in mind though that I hit record until it looks good - there are some ultra wonky or problematic recordings before I get a really good one, so there are still problems to sort out before the game looks good every time.

Jamming lizard mouths open - yeah, the idea has come up a few times, and I do like it. It's a really classic trope, putting a vertical stick in the mouth of some beast. But gameplay-wise I'm not so sure ... like, if you have the spear, why wouldn't you just want to spear it? And if you could do both actions, how would the game know which one you wanted? I'm not introducing a new button for that specifically, and it could get annoying if there was some context sensitive thing going on that didn't always line up with your intentions. We'll have to see if a natural way to implement it shows up.

Update 334
The goal I set out for today was making lizards carry their prey back to their dens, but that led to a million other things, so now I'm just generally sorting out all sorts of stuff with that original goal in the back of my head. Mostly I've been doing stuff that has to do with creatures carrying other creatures. Making it work with shortcuts was somewhat tricky, as well as having it happen between rooms, but those issues are sorted out now.

I've started on a framework for creatures carrying other creatures in abstract space, which might be pretty cool. For example it means you might be able to enter a room and see a creature carrying another, or have a creature pass through your room with some prey already in its jaws, disinterested in you.

To me personally I think this is the most interesting aspect of Rain World - the "terrarium" or living world aspect. The player is a main character in the way that the simulation is run at a finer granularity close to where the player is, but the entire world will be alive and eventful all the time, if you are there or not. This is obviously going to be hard to make into a balanced game, but we'll try, haha. Dwarf Fortress has a similar philosophy and works pretty well because the game isn't about winning, but about the stories that develop through the unexpected interactions. We can't really fall back on that as much because Rain World is more of a traditional game that you play to win, but also we have astronomically fewer moving parts than DF. This is a balance issue we'll really have to give some close consideration though. Any way I'm really excited that we're getting closer and closer to having the eco system simulation up and running.

One thing that hints that the dynamic food web is getting closer is a little test I did today. After having tested the lizard biting behavior exclusively on the slugcat, today I fired up a green and a blue lizard and told the green one that it finds the blue delicious.



Everything connected flawlessly. The bodies connected, the blue lizard was not allowed to move, it was placed between the jaws of the green lizard, green can grab on to any of the body chunks and keeps its grip there, even the terrain impact bubble effects showed up to give the scene some extra flavor. I'm really hoping this isn't becoming too brutal, I'm not intentionally trying to make it dark and gritty, I'm just implementing the mechanics and this is how it happens o___0

The point is this though; any creature can eat any creature - it's just one line of code in the relationship declarations away. In the old version something like this would have been a two day nightmare, if not impossible. It's going to be so much fun when we have more species running around!

Edit: This works equally as well apparently :D A bit over the top shaking for such a small prey perhaps ...



Note that I'm not intending to have lizards hunt flies, I'm just trying my "anything can eat anything" setup Wink





   JLJac on October 08, 2014, 05:47:17 AM:

That's a really good point ~ I did lower the effect of the weight of the carried creature quite some because otherwise it looked awkward when carrying around the slugcat, but yeah, the blue lizard should be a bit heavier. Maybe I can do some polynomial thing which makes low weights be really low but higher weights increase steeper than linear progression.





   jamesprimate on October 08, 2014, 04:48:52 PM:

give us the  Hand Money Right Hand Money Left Microsoft!

our plate is already pretty full with platforms, but down the road obviously the more places you can play rain world the better. first things first though: make actual game





   JLJac on October 08, 2014, 05:18:12 PM:

Could someone with some programming expertise help me out here? I'm having some weird frame rate dips if I add a lot of lizards that have relationships to each other (smooth if they don't) and I want to know what's going on.

Unity's profiler says that 98% of the processor power was spent on "RainWorldGame.Update" which is about as helpful as a physician telling you that "Yes you are sick" -.- So I tried using Visual Studios profiler and attaching it to Unity, and everything was really complex in there so I got confused for a while. Then I noticed that the one thing eating all the processor power was something called mono.dll and after trying to research a little bit I kind of think that this is my entire game baked into a single file... Meaning I have the same problem again. I want to profile inside my solution.

Building the project as a stand alone and profiling that doesn't seem to work either - it still just refers to mono.dll. The function in mono.dll that's called a million times is actually mono.dll, does this mean I have a call stack problem? Some recursive stuff going out of hand? Or is it just that because all my game logic is recognized as mono.dll?

And Dear Visual Studio Wizard, when you are reading this, please also tell me why the VS debugger refuses to stop on exceptions? It does stop on break points!





   JLJac on October 08, 2014, 07:02:59 PM (Last Edit: October 08, 2014, 07:37:36 PM):

That might be it ... but the point isn't as much this specific problem (I probably could hunt it down manually if I really tried) but that I want to be able to profile my game for the future. It can make the difference between finding some weird frame rate issue in 3 hours or 3 minutes. So even if I could do the 3 hours approach right now, I'd rather think about the long run.

Edit: My problem looks similar to this, so maybe the issue is that I don't have the symbols, whatever that's supposed to mean. Haha I've really been trying to find out what those "symbols" everyone in VS debugging is talking about is, but... Wikipedia didn't really help me this time ...





   JLJac on October 09, 2014, 04:07:25 AM:

Sorry, no update today. The morning I spent talking to James (and we did sort out some pretty important design issues, so that's a big step forwards!) and the rest of the day was mostly trying to get Visual Studio to comply. At the end of the day, I had managed to make it break on exceptions, but still not take me to the code for proper debugging.

@DarkWanderer, yeah, we've been thinking about having some corpses as distractions, and it would definitely be a cool mechanic. The question is whether we want to introduce dragging corpses around - it might make the game tedious to be dragging heavy creatures after you half the time. As for attacking injured creatures, that's a really good idea - I think it could be implemented pretty easily by having the creature's "scaryness" variable go down with its health. That way some creatures might perceive a specific other creature as scarier than delicious - ie not worth it - until its health drops, and the utility comparer suddenly gives a positive for hunting.

@Sebioff, THAAAAAANK YOU, that was the trick! I had clicked on that thing, but while the game was running or something I guess? So when you tipped me off I went back and tried again, and it worked! Also thanks for the article on symbols, now I actually get it! :D :D :D I guess I'll run Unity for profiling and keep monodevelop up for breaking on exceptions, and then edit my code in VS. One day I dream to do it all in one tool, but now I'm fine with whatever works for a while haha.

In case anyone was interested, the frame rate dip was because of the blue lizards fleeing from the green ones. As blue lizards are wall climbers, they have a lot of tiles that are accessible to them but that are not accessible to the greens. Every time they tried to evaluate a tile like that for how dangerous it is, they'd try to ask for the tile closest to that one which was in fact accessible to green lizards. The Find Closest Accessible Tile To This Creature method used a spiral - like, I'd start at the specific tile you wanted to get close to, and move in a square spiral from there until I hit an accessible tile. That'd take quite a few iterations in some cases. Times quite a few path finding ticks every frame, times quite a few blue lizards, times quite a few green lizards... I'm not really certain how to solve it just yet, but now that I know what it is at least I know what to solve! Awesome!





   JLJac on October 10, 2014, 04:29:22 AM:

Today's update isn't very exciting, so instead you get a ramble on game design! Yay!

I think all of these points on dragging are totally valid. In the end I think it wouldn't do thaaaat much of a difference, because it's a very slow and deliberate action in a very chaotic game. Any cunning plan like that is pretty much doomed. It's like that guy who'd try to punch a crate across half the map to block a door in a halo match - cool idea bro, but a million rockets and grenades and burning vehicles are going to wreck your day, and the rest of the game plays in 100 times the pace of your plan and will already have played out when you get there. Rain World is about planning and analyzing, but it's mostly on a 0.5-5 second scale rather than up in the twenties, or minutes. There are some minute-scale decisions in single player, such as "which area will I go to", but once those are taken the sub-goals will be much smaller chunks of decision making.

Also the game is fairly unpredictable. I know I've mentioned this as an issue before (I want the player to be able to feel at least somewhat in control of a situation) and I will work on it, but on a bigger scale it's such an integral part of the game design that it will just have to be dealt with. Which is something I don't necessarily view as a bad thing, because I think fun stems from a good combination of random and controllable. Think about tetris, it's random what blocks you get, but how they behave is completely deterministic. Rain World has a similar dichotomy I think, what creatures are where is hard to know, but how they behave and interact can be learnt and manipulated (or, it will be like that, once I clean out some of the weirdness and randomness).

I'm kind of aligned with fizmats idea of animal-level and human-level intelligence here, and that kind of reflects what I mentioned above - the slugcat is intelligent in split second decisions, but doesn't necessarily prepare elaborate traps. Definitely not crafting. That said though, the slugcat is the player's avatar, and whatever the player is able to think of the player is able to think of, you can't get in the way of that.

The third factor is something I think of as "world self containedness". Hmmmm examples. A self contained game world would be Pac Man. In pac man the little pac man creatures are what they are, and they are what they do. Ghosts chase, pac man eats. You don't really question why they don't do anything else, because they are what they do and all they are is what they do. You don't ask yourself why pac man doesn't try to talk to the ghosts for example, that's just not in the scope of that world. A non-self contained game world would be GTA. GTA attempts to mimic the real world, and thus its canon suggests more possibilities than its mechanics can provide. In GTA you can find yourself thinking "god why doesn't he just push the box with his hands" or "if I just had the option to say this thing to this character I could've solved this mess" or "why can't I open the trunk of the car! I want to open the trunk!" or an infinite amount of other things. GTA suggests a world where you could become a painter and spend your days painting abstract art (namely our world, where you can do that) but it doesn't provide the mechanics. Pac Man suggest a world where only eating is possible, and eating is also what you do.

I get the point of both ideas, when doing something movie-inspired like GTA the latter option is obviously preferable. But personally I prefer self-contained worlds. A computer game object is only its actions, and in a self contained game world it should ideally only represent those actions as well. Pac man eats, ghosts chase. I have a bit more technical resources than pac man, so I can make a slightly more complex world, but I want that same tightness of design. I want my creatures to be the things they do, and to be pretty much only that. The slugcat is quick, jumpy, climby, stealthy, nervous, always on the move, hunting and desperate to stay alive at the same time. The lizard is lazy and slow until it spots prey, then suddenly determined and persistent, making every single move in order to achieve the goal of reaching the other creature. The fly is a bit goofy, concentrated on its own business which is kind of obscure what it is, but suddenly panicking in order to preserve itself, especially when the behavior is amplified throughout a group.

Those concepts are realized through the actions - jumping, climbing, running, flying, chasing. The animation is then intended to amplify these hinted personalities further, but is always based on the actual game-relevant interactions. The slugcat for example has a nervous gaze switching from object to object, similar to the personality its behavior suggests - never really focused on a goal, but always determining the situation in this very now. "Was I one millimeter from death half a second ago? That's irrelevant now, because now I have a 0.3 second window to catch this prey, so I better give it a shot!" The lizard on the contrary is goal focused - staring down its target with tunnel vision, only giving other creatures a quick glance as they appear in order to make a swift calculation whether it might be worth it to switch target.

The idea is that interactions added should be in line with these personalities - further defining the creature using the things it does as building blocks. The slugcat shouldn't play basket ball, craft a gun or run for president. It would be out of character. And worse, it would break the self-containedness. If you can craft a gun, why can't you make a car? Suddenly it becomes obvious that the limitation is not the edge of this world, but of what I could be bothered to code when making this game. Willing suspension of disbelief punctured!

Dragging a corpse as a bait? Maybe! It could definitely be a part of the slugcat skill set. It's not vastly out of character, just maybe a little, as it suggests thinking several minutes ahead, which we haven't seen much of so far. But if it does add to the game, or if it could be done as a more on-the-spot action rather than a lengthy and deliberate one, it could even be a welcome nudge in a new direction for the character. Giving it more depth! But, as you can tell if you made it this far, there are several things to take into consideration when adding something like this.

That's what's going on in my head when I think about what new features might be like!

Update 335
Sent an email to UnityVS guys and got an answer that they simply don't support break on exception, so it wasn't that weird after all  Tired

In other news, creatures carrying other creatures (and inanimate objects) through abstract space, into abstract space, and out of abstract space, is now done! It's actually a pretty huge step, but it's not really the gifable kind - it looks like leaving a room and then when you go back into it everything is where it was and nothing has happened. 
Hand Shake Left  Cheesy Hand Shake Right

The system supports carrying of creatures carrying creatures carrying creatures etc. So you might see a lizard carrying a lizard carrying a slugcat carrying two flies hahaha!

There was some trickyness to this, because when a creature carrying another creature exits a room, it pulls that creature with it. This means that I wasn't able to resort to the classical iterate-over-the-list-backwards solution when updating creatures in rooms, because they were not certain to only remove themselves, but could pull any random chunk of other creatures with them from both before and after themselves in the list. You code people, if you could give my solution a quick glance and tell me if it looks OK?

Code:
    private List<AbstractWorldEntity> entities;
    private bool evenUpdate;
    private int roomIndex;

    public void Update(int timePassed)
    {
        evenUpdate = !evenUpdate;

        bool allEntetiesUpdated = false;

        while (!allEntetiesUpdated) {
            allEntetiesUpdated = true;

            foreach (AbstractWorldEntity ent in entities) if (ent.evenUpdate != evenUpdate) {
                    ent.evenUpdate = evenUpdate;
                    ent.Update(timePassed);
                    if (ent.pos.room != roomIndex) { allEntetiesUpdated = false; break; }
                }
        }
    }

This is in the room class. What I want to do is update each entity in entities once, but what I need to account for is that the update call might remove the entity and any number of other entities from the list.

In English, my solution is this: I iterate over the entities list and update each entity, setting a bool in them so I know I've updated them this frame. After each, I check if it's still in this room, or if it has moved out. If it has moved out, I break the loop, and start it all over again, once again iterating over all the entities. But because those already updated has the bool set, they don't get a second update command. I repeat this until I have been able to iterate over the entire list without any breaks.

Should about do it, right? Let me know if there's any problem I didn't think of.





   JLJac on October 12, 2014, 04:06:49 PM:

The slightly weird mechanic is because I've been prepping for a potentially very large world. Each room will keep track of what time it was when it had its last update command, and when it get a new one it'll calculate a delta which is passed down to the abstract creatures. The creatures will use that to increment their counters and to calculate some chance-based stuff, such as the probability of two creatures in the same room encountering each other. For example, if a creature wants to move out an exit it needs to wait a corresponding amount to the distance to that exit before it can do the move. This way the idea is that the abstract world will be able to function even at a very low or irregular update rate, which might be cool if the world is large and we want to update areas close to the player with a finer granularity. This is also why the room owns the "evenness" parameter - all rooms are not updated at the same time with the same evenness, that's the idea of this whole architecture.

Yeah, carried creatures might or might not get an update - but as you say, they don't have much agency so that's perhaps not a big problem. What's worse is the other one you mention, that a creature could potentially surf a wave of updates by moving between rooms. From a strict gameplay perspective I don't think it would matter all that much (all of the abstract space feels pretty fuzzy to the player) but from a purity standpoint it feels pretty bad, yeah.

Maybe I could move the "keep track of how long ago I got my last update" down to the creature level instead... That way they could get two updates quickly after each other, but the second one wouldn't really have any "juice" to it as the calculated delta would be very small.

What is it, saving the milliseconds since 1970 is just a long int right, and that'd be just the same size as 2 regular ints? So saving time as 40ths of a second would be pretty mild on the memory and without any risk of the ints actually hitting the ceiling?





   JLJac on October 13, 2014, 12:21:43 AM:

Update 336
Den awareness! The lizards (and other future creatures) can now keep track of a home den. If they don't have one, there's a routine that looks for the closest one throughout the world map. Whenever the lizard re-maps movement territory ("it seems I'm in a tile that I had mapped as inaccessible, I should do a new flood fill to check what tiles are actually accessible to me") it also restarts this routine. If the routine runs out of options, it'll tell the lizard that it's stranded - in an area from where it can not reach any den. I think it could be pretty cool to have creatures panic if they're in this situation when the rain comes. Otherwise, it finds a new den and remembers that one as its home base instead.

Here's a lizard catching a slugcat and heading back home with it. Excuse the slugcat being on top of the lizard's snout in the later rooms, I haven't gotten around to moving it in there for situations where the grasp exists on spawning the creatures.



As always in Rain World it's assumed that the AI entity is omniscient about the level geometry - having them be unsure of what's where would be a nightmare to program and it would pretty much only amount in obscuring the intelligent behaviors I've painstakingly put in.

Also, I now theoretically have support for fleeing from rain! It was really simple, I just added another Utility to the lizards decision making machinery. Currently I have it following this Urgency/Utility curve over time as the rain approaches:



But I think that in the future it would probably make sense for it to take distance from the den into account instead of only time. It should probably be a simple division, how far am I from home / how much time is there left. So, more refinements to come, but the basic behavior is in.

What's not in though, is creatures actually being able to be in dens. Now they just weirdly pop in and out of them over and over again. I think this won't be a huge task though (touch wood), I'll just keep them in "shortcut mode" while allowing them to interact with some sort of Inside Of Den class, which can allow them to drop off some food, wait for a bit, or whatever it is they want to do.

It seems it's not far away that we have the player hunting and fleeing, and AI creatures hunting, fleeing and taking cover from the rain! That'd be the most basic gameplay mechanics, all working and interacting with each other!





   jamesprimate on October 13, 2014, 06:45:08 AM:

if you think that's wonky you haven't seen nothin yet!  Wink

Don't worry, that one is just the "abstracted room" overlay showing activity in adjacent rooms. For game "debugging" purposes (seems weird to say that), there are a LOT of ad-hoc HUDs hooked up for showing various information, but there won't be HUDs of any sort in the game (if we can do our jobs right!), so no reason for them not to be ugly and wonky  Hand Thumbs Up Left





   JLJac on October 14, 2014, 01:18:09 AM:

Outline is because of the re-sized screen, there occurs some kind of rounding error in the shader that makes that happen.

Yep, rain clouds grow as the rain approaches!

Update 337
Cleaned up some den stuff, including a bug where a lizard would believe it had access to a den despite that not being the case.

The afternoon I've spent working on the lizard tongue, if you remember? It's turning out pretty cool! But I'm not quite happy enough to show it just yet though. The basic functionality is in - lashing out, latching on to another creature, reeling it in. Also graphics are more or less there, I applied the triangle mesh code from the tail and am working on making the tongue a little bendy this time around, contrary to the straight line of the lingo version. Tomorrow I'm hoping to have some cool gifs of it!





   JLJac on October 14, 2014, 07:41:55 PM:

Thanks Smiley Sorry man, music's covered!

Update 338

Lizard tongues!





That second one took sooo many takes  Shocked But it made me notice some details that needed fixing, so that was a plus!

As the white lizard is the most notorious tongue hunter, I implemented the white template in order to get some tongue behaviors in place. I've not done any graphical work on it what so ever though - as some of you might remember the white lizard is supposed to have a quite unique look too it - but here it's just like the others but with a white head. Don't look at that, look at the tounge Tongue

In the game it's just represented as a point lashing out, but the graphical module for the lizard improvises some rope physics-ish stuff on top of that, with the triangle mesh code from the tail. The tongue gets slimmer if stretched, and is allowed to curl up a bit when very relaxed. As it's spit out each point along it is given a slightly random vector, making it initially come out curled up as a package, to then later straighten out. I'm very happy with this effect, it looks "nature documentary" as James put it, and a little organic and weird. Good times!

What's worse is the actual gameplay implementation. Lizards are a bit less good at biting you now compared to the lingo build - they used to pretty much be "kill on touch", but now they have to have a more reasonable position to get a bite in. It seems that when dragging you in with the tongue, they generally don't tend to get that position in order, meaning that it's quite easy to get away in the time between the tongue releasing you and the jaws actually biting you - as you can see in the top gif.

I could make it so that they automatically get a grip of you if they've caught you with the tongue, but I like that you're not necessarily 100% doomed once they get you. It should be a serious situation though, so maybe they'll get a little bonus in their bite check right after releasing a tongue grip, or something similar. You shouldn't be able to count on getting away.

If they miss you and hit a wall, there's a chance they'll get stuck there, which looks kind of fun. Each frame has a certain random chance that they'll get loose again, so they could be there for no time at all, or quite a while.

The blue lizard also has a tongue, but much shorter and less effective. While the white lizard will stay still once it got you, and try to reel you in slowly, the blue lizard (which is not considerably heavier than you) will rather use the tongue to let itself be dragged after you, which is almost more annoying because it gives you less time to think. However, the blue lizard doesn't use the tongue quite as much, and will miss you most of the time it tries.





   JLJac on October 14, 2014, 09:39:08 PM:

@Christian, oh yeah, that's true o_0 I'll move the connection slightly outward within the jaws so it doesn't show outside the head like that.

@DarkWanderer, the tounge is kind of weird, because in the game logic it actually only exists at its tip, so that one would be difficult. But the idea about having them bite each other and get into a fight is rad, totally implementing that one  Grin Hand Thumbs Up Right





   JLJac on October 15, 2014, 03:48:09 AM:

Thank you :D I'll do what I can to actually make it fun though  Wink

Here's a somewhat precarious situation I found myself in when testing around:



Gives you some perspective on your own problems in life, no?





   jamesprimate on October 15, 2014, 03:54:25 AM:




Gives you some perspective on your own problems in life, no?

AHAHAHA





   JLJac on October 15, 2014, 04:01:47 AM:

Hahahaha yeah, towards the end I just wanted to be eaten and get it over with, but I wasn't even granted that  Addicted

Actually they both have a "reel in" counter ticking, which is pretty slow (over the course of 10 seconds or something), so in the end the one latching on to me first would've gotten me.

It could definitely happen in-game, it pretty much did! There isn't really anything such as a solid "no win state", because the game engine is too floaty and unpredictable for something like that to be 100% decided. Something weird can always happen, where you're just sliiiightly out of the correct biting angle for the lizard or something like that. But a situation can definitely be really, really bad, such as this, hahaha!





   JLJac on October 15, 2014, 04:32:08 AM:

Yeah, definitely! But one spear or rock would just break the deadlock though, and the deadlock is kind of what's keeping me alive here :S





   jamesprimate on October 15, 2014, 10:35:52 PM:

getting world region stuff down to room-scale granularity. out of context these are utterly meaningless of course, but you would be shocked how many months of mental effort it took to get here Tongue

here are 3 of, like, 20:







I've been cryptically posting these on ello and now everyone seems to think im some sort of minimalist painter hahah





   JLJac on October 16, 2014, 12:59:33 AM:

Look at this guy trying to pass for not being a visual artist... That's some harmonious compositions right there!

@DarkWanderer, yeah, I could very easily put up a system that keeps track of "annoyance" with other creatures, and as accidental damage happens between them those numbers would be incremented. The tracker would be hooked up to the utility comparer, and when the annoyance with another creature got too bad it'd flip to an aggressive behavior (given that there's nothing more important to do, such as fleeing). The attack would in turn cause annoyance in the other creature, and there'd be a fight! Weighting in how scary the other creature is definitely doable as well~

Update 339
Spears, spears, spears. A loooot of trigonometry going on today, with how the spears are supposed to get stuck in a certain angle, and then keep that angle as the creature is rotating.

Also, gluing one object to another in a way that didn't render them apart when moving at high velocities demanded a pretty deep dive in the game engine. What had to be done was separating updates of graphical modules, putting it after the game object updates, and also pass down a parameter to all objects so they could be asked by other objects whether or not they had been updated this frame. And a lot of other stuff, haha. But now one object can be glued to another, and it will stick snugly to the right coordinate even if everything is moving at a high velocity.

Further spear stuff completed today includes ability to stick spears in walls, and lizards having their spear-reflective heads implemented to much annoyance when play testing. Nailing lizards to walls is also in, I had fun this morning dodging around a courtyard as a poor white lizard sat impaled on a wall and tried to hit me with its tongue. What's new from the lingo version is the ability of spears to hit decorative body parts, such as the limbs or head in the case of the lizard. The spear doesn't really hit those parts, but the chunk they're attached to - but it gets it rotation and a bit of its placement from the decorative body part, making it look as if it's stuck there. With lizard legs I also implemented the disabling of limbs from a while ago when they get hit by spears - it looks pretty tragic, but also pretty cool.

The actual spears still look like red sticks though, so you'll get to see them later!





   jamesprimate on October 16, 2014, 01:28:21 AM (Last Edit: October 16, 2014, 01:34:56 AM):

yep! that was in the lingo build even. were thinking of maybe taking it a bit further too and making them part of a (very) loose "level progression" mechanic thing, where perhaps spears are more of a scarce resource and you have to put some thought into how you use the ones you find: you find a spear. do you use it to try to get to new areas OR defend yourself against predators?





   JLJac on October 16, 2014, 03:59:12 AM:

 Cheesy Cheesy Cheesy I'm just having way too much fun with this  Who, Me?






   jamesprimate on October 16, 2014, 08:58:45 AM:

oh wow, i reallllllly like the squiggly wiggle walk the blue does right after it first hits the ground! is it just the physics of it reorienting itself after it frees itself from the tongue? i wonder if that could be how the blue just walks in general, it has such a perfect creepy snake-like flow too it. SO COOL.





   jamesprimate on October 16, 2014, 01:26:54 PM:

you recall in the lingo there were dotted lines and blinking arrows that illuminated when you were close to a shortcut, showing where it went? joar just hasnt gotten around to implementing that stuff yet or the "travel" animations.

that said, its still something we want to highlight and polish more in this version, but will prob take some thought and design work. weve even talked about this as recently as 2 days ago, but basically just "not there yet" etc etc





   JLJac on October 17, 2014, 02:39:01 AM:

Actually there was a spitting lizard in the lingo build! So that's going back in! It wasn't sticky though, just pushed you around. But sticky would be way cooler! This is the red one though, the yellow one is the one hunting in packs.

Losing their tails... I think it would make them too much of a lizard, perhaps? They're a lizard-like... thing, not an actual reptilian.

James and I are hoping for bodies of water, for those exact reasons - it'd give some ways to control progress. I'm super particular about aesthetics though, so a graphically complex thing like water kind of depends on whether I'll be able to make it look good enough. I'd rather not have it than have it looking sub par compared to the rest of the game.

So the bottom white is hunting the blue lizard, the top lizard was hunting slugcat. Once the slugcat got out of range, the top lizard shifted focus to the closer, easier prey
Actually I don't know what's going on in their heads at such detail... But yeah, they're constantly re-evaluating their targets, so they could easily do a shift like that.

Update 340
Yesterday I did all the fun stuff with spears, today I proceeded to get the boring stuff done! Such as having them disappear with creatures into short cuts, and then reappear (not duplicated!) and so on and so forth.

This in turn forced me to get to some other interesting stuff. I set up a "health state" class for creatures keeping track of their health, and what spears they have stuck in them (yes, I know this is macabre, but it has to be coded haha!). In order to keep track of what spear is where, I implemented an ID system, which also applies to creatures. It's really simple, every single object in the game (which is an actual interactive object, I don't label water drips and sparks) has a unique integer ID. This is accomplished really easily by having an integer in the main game class, and each time an object is created it asks to be assigned an ID, and the integer increases. No two objects will ever have the same ID! The upper limit for an int is more than two thousand million, so you'd have to eat a lot of bats for it to run out.

Unique ID's are cool for a few reasons! First of all, purely technical stuff, such as when spawning a spear, the game can look through a list of displaced spears "is this particular spear actually somewhere else" and if it's displaced, refrain from spawning it. That way object consistency can be created - one object exists in one place, and one place only.

But it's with creatures that the possibilities get really interesting! Just off the top of my head - relationships between individuals could be saved. "I'm very scared of creature #6911!" Or, and this one I know will make James happy, the ID can be used as a random seed for individual variations, cosmetic or behavioral. These would probably have to be pretty clearly communicated for them to be noticed, but they could be cool even if they're subtle, just knowing that the creatures are in fact individuals would perhaps making your interactions with them feel more personal.

Last for the day, I made a James friendly build so he can try out his level editor work! It seems to be running nicely, but some of the levels are not loading, so we'll have to troubleshoot that. All in all, a good week! Thanks for hanging around and talking, see you guys Monday!





   JLJac on October 20, 2014, 04:41:41 AM:

Hahaha woooow! So many ideas! I do like the fungus idea, but it seems like that is a mechanic that should be a game itself, rather than something you slap on top of a finished concept. Haha and as Jimbert points out, Halo Did It! But if you had a game that was more focused on containing (or spreading) the contamination and built mechanics around that, it'd be really cool.

Update 341
Gggaaaaaaahhhhh shaaaaader heeeell revisited!

The coloration is obviously not the real deal (just gave it some colors that made it easy to see, won't use gradients when in the final look), but I'm happy with the surface movement and how it exists in the 3D-environment. The surface is a triangle mesh, so I'm hoping to be able to do some cool manipulations on it when stuff interact with it.



Here comes the funny part though - unity won't build with it (I use a screen coordinate passed down to the fragment shader, and that won't fly, apparently. There HAS to be some way around it though, they can't reasonably expect people to write fragment shaders without being able to ask about what pixel on the screen is being handled -___-). And even more funny, I wrote the entire thing imagining that it was snugly lined up to the level pixels, but when I resized the unity window - everything was suddenly fifty pixels to the left of where it should be! I had built it dependent on my unity window size... Well, the two problems are pretty much just one actually - getting screen coordinates (of the game area, not the goddamn Unity editor) and I feel pretty confident there has to be some solution for that. Hitting the forums tomorrow I guess, unless someone has any idea?





   JLJac on October 20, 2014, 08:12:04 PM:

I have already hard time parsing the problem in my mind given your description ... what's the build error message?

'variable/member "pos" has semantic "POSITION" which is not visible in this profile;'

To make my shader work I was cutting and pasting code I found on the internet, so have no idea exactly where this "pos" variable came from - but it didn't do any damage until I actually used it in the shader. Then it stopped working. Now it seems to at random sometimes not work in the editor either, hehe.

What I used it for, and what I actually want, is a screen coordinate of the fragment I'm handling. So if there's any other way to do that, I'd be happy to switch away from this troublemaker.





   JLJac on October 21, 2014, 05:09:11 AM:

Thanks!

Update 342
Solved the problem with the offset, but the problem when publishing the build persists. Added distortion effect below the surface and correct perspective on the surface. Also started a little bit on having the physics react to the presence of the water.



Color still WIP.





   jamesprimate on October 21, 2014, 08:55:42 AM (Last Edit: October 21, 2014, 09:02:07 AM):

Thanks!

Update 342
Solved the problem with the offset, but the problem when publishing the build persists. Added distortion effect below the surface and correct perspective on the surface. Also started a little bit on having the physics react to the presence of the water.



Color still WIP.


hnggggg this looks so damn good. ill have you all know that just 2 DAYS AGO, Joar was saying water effects were probably impossible, yet here we are and these are some PRETTY NICE WATER EFFECTS :D





   JLJac on October 22, 2014, 01:37:37 AM:

Update 343
Messing around with slugcat swimming... James and I are discussing this from a game design perspective as well. However, diving is turning out to be so much fun that I think it'll just have to be in the game... But maybe in a limited way - like, you can dive down, but you'll have to be skillful about it or you'll drown very easily. It all needs to make sense with the "rain kills you" theme as well, if the slugcat is perfectly comfortable under water that whole thing seems a little less viable. But, all those questions aside, the simple aspect of controlling the slugcat in the water is turning out pretty good! I'll gif you when I have some bubbles.

Also, the shaders keep messing with me -.- Sometimes when I open the editor, they work, sometimes not. Now it's
'variable/member "scrPos" has semantic "WPOS" which is not visible in this profile;'
does anyone have any idea how you make something "visible in the profile"?





   jamesprimate on October 22, 2014, 09:16:37 AM:

Haha these are great questions and discussion! Jusst so Joar doesn't have to go back through and answer all of them:

* Yes, the concept is that rain kills by battery, pummeling and smothering anything that gets in its way (like a huge natural power sprayer is kind of the idea), but its def true that does seem to not be terribly extreme since the game playing audience is used to "acid poison lava void levels" sort of thing. So we'll need to make sure the threatening "water = dangerous" theme is carried through to this new traversable form to.

One thing is that you will often encounter light rains in the game as a warning, building up very obviously to the deadly downpour, so we are thinking of keeping that same mechanic with the water: safe when relatively calm, but then can build to deadly rough waves and storm when the Death Rains come, before being pummeled AND drowned.

* as for the another world style tentacles, prettttty much? unless we want CRAZY feature creep, we'll want to have a "reason" to limit the scope of what the cat can do in the water to a fairly shallow reach (for now at least), so we've talked about having some SCARY WEIRD SEA THINGS lurking down there to do just that. There have been a few loosely defined water region creatures in our "design document" (LOL) for a while, but this will be more of an elemental, unspecified thing im guessing. Unknown things moving around deep under the sea is probably the scariest thing ever, so I feel like this will be amazing for mood. Joar's water distortion effect already terrifies me, so im SUPER looking forward to seeing what he can do with this.

Im SO excited that the water regions are working out. You dont even know. It's been something we've been talking about for a long while, and from my perspective its necessary to complete the rain cycle motif. It ties into a few other things which are now possible because of this, like a puzzle piece being put into place. Got big plans for this!





   jamesprimate on October 22, 2014, 09:28:01 AM:

^ indeed! dont want to spoil too much, but there are a number of aerial regions.







no not Ariel Tongue






   jamesprimate on October 22, 2014, 12:15:51 PM:

A flooding mechanic is in the works! But let's finish this one first, lololol





   jamesprimate on October 22, 2014, 04:10:55 PM:

no mouse controls, just up down left right A B stuff. want to keep it simple and feel equally good on both controllers and keyboard  Hand Joystick  Hand Any Key  Hand Any Key





   jamesprimate on October 22, 2014, 06:27:23 PM:

^ real talk





   JLJac on October 22, 2014, 11:07:11 PM:

Hahahaha hi everyone! I think my idea for the rain has been that it's like... yeah, the "fire hose to the face" analogy is pretty much it - like, a combination of pummeling and drowning. And yeah, water totally have a lower terminal velocity than that  Who, Me? I think that you can't even call this a "fantasy" universe though, it's way more removed from our reality than that. It's more of a "cartoon" universe, or something like that.

Update 344

Swimming!



This has turned out to be quite fun - to the degree where my productivity suffers because I just have to fill this and that level with water and swim around in it.

When swimming you have a "swim power", some sort of momentum, which can be made to increase by doing certain movements, such as changing your angle. This means that just holding a direction isn't always the most effective way to move, you need to work with the water a little bit. If you bump into a wall you lose your momentum - so generally when you're under water you want to stay clear of the walls, which is trickier the faster you're going.

Swimming comes in two modes - surface swimming and deep swimming. The surface swimming is generally pretty lame, the slugcat will just keep its head up and you can steer left or right. What it does have is the ability to do a little hop by pressing the jump button, enabling you to maybe reach for some pole or ledge above you. Underwater swimming is faster (if you work up momentum) and more fun, but will be dangerous in one way or another. You have some buoyancy pulling you upwards, so you can do some pretty fun stuff by swimming down and then come up through the surface fast. If you have really good timing, you can manage to press the jump button during the few frames you're in "surface mode", get a little extra momentum from the mini jump, and do a pretty sweet jump up into the air.

I still haven't gotten around to doing anything about the coloration of the water, but I think it's going to be pretty straigh forward as the entire underwater environment is basically just a gradient between two colors - so it's just a question of picking two colors that fit the above-water palette.

As you can see the slugcat is made dark when submerged... I have tried a few other things as well, such as having it be the original color but with a multiply overlay, or similar. Any solution with the actual colors visible turn out to be less cool though, for some reason. I think it's because when everything under the surface has the same colors it really feels like a different "realm", whereas if the original colors are visible it just feels like a blue overlay. The problem here is that it's harder to see your player character, and also that in a multiplayer scenario it might be hard to keep them apart, if several players dive down simultaneously. Still it kind of is that visual obscurity that makes for the effect, so idk... What do you guys think?





   jamesprimate on October 22, 2014, 11:33:40 PM:

so perfect! dont change a thingggg. I can hear the sploosh clearly in my head when the cat dives into the water, it looks that good





   JLJac on October 23, 2014, 07:17:50 AM:

Thanks! Smiley

so perfect! dont change a thingggg. I can hear the sploosh clearly in my head when the cat dives into the water, it looks that good

That's really good, as it's you who's gonna do that splash sound, mate! Hahaha!

I've never really been a fan of (wavy) water in 2d platformers, it feels like the world just ends at a glass pane or something to me. You managed to make it look pretty though, so I'll get over it Wink My only gripe would be that the water behaves very rubbery when you dive in, like it's jelly you're swimming around in rather than water. The swimming itself looks really cool, and I think the slugcat being darkened while submerged works well.

Yeah, me neither - and for a while we did talk about having the water extend towards the bottom of the screen - as if you were watching the level stick up above the surface, from a distance. It gets weird very quick though, because this whole platformer perspective thing doesn't really work if you try to think of it in 3D. If you saw the surface, and the level stick up out of it, you'd all of a sudden feel like you're viewing the creatures from a distance - which is weird, because it uncomfortably places the viewer in the scene - and 2D and 3D spatiality collide. Also, when looking at a normal level, you're kind of seeing the inside of walls, maybe? Doesn't really make sense to have a cut-in-half building like that stick out of an ocean and view it as through binoculars...

Then come the practical stuff - if what you see was the surface of the water, you wouldn't be able to see what was going on beneath it. And when the surface is above the horizon? (Yeah, the game has a "horizon" it uses for the pseudo 3D stuff, it's 1/3 down from the top of the screen). In the end, the aquarium approach was only the really thing that made sense. And I've kind of learned to like it, it makes it feel like you're looking at a little model of a room or something Smiley

I love the effect. One thing I noticed: The impact when the character jumps into the water is very heavy, which makes it look a bit like a miniature world. Don't know if I can explain it correctly, but right now it feels like in a bathtub, very small.
Yeah, I've really been struggling with the jelly-ness of it. That's the least jelly I've managed to get it to, but now when I've tried to rewrite the thing to work with multi-screen rooms the jelly wobble is worse than ever  Tired If anyone can point me to a nice and simple description of how to actually simulate a water surface I'd be really happy. Haven't managed to find one myself - the wikipedia article wasn't easy enough to work with.

Oh and maybe if lizards are underwater, only their flashing colors would be visible, like the bioluminescent nature of deep sea creatures. Imagine how tense that would be. You dive underwater, and don't realize a lizard is nearby because it's hard to see and kind of camouflaged against the other dark things underwater. And then a flash of color in the darkness and a dark shape starts rushing towards you...
I haven't had a proper talk with James yet, but I'm kind of leaning towards not having many creatures that are both land and water dwelling - it's easier and feels cleaner to have some separate (vicious!) water fauna that will eat whatever falls down there. But it's all open for discussion right now - currently I'm just trying to get the damn water to work haha!

I love the effect. One thing I noticed: The impact when the character jumps into the water is very heavy, which makes it look a bit like a miniature world. Don't know if I can explain it correctly, but right now it feels like in a bathtub, very small.
I think the main thing here is the distortions close to the surface. And also the jelly like qualities of the water, making it seem as if surface tension is really strong. The jelly I'm not so happy about, but I kind of like that the water looks like it's small and close, a little bit of confusion over the scale of things seems fitting when you don't want to pin stuff down too much. Obviously the slugcat isn't half an inch tall and taking a bath in a droplet, but that little effect serves as a reminder that we don't actually know all too well what we're looking at.

By the way - and maybe this has been answered before and I missed it - what is the penalty for dying in the game? Do you start all over from day one with no flies?
The classic idea, which we're still holding on to, is that you'll be allowed to restart the "cycle" - a cycle is basically a level, except it's not geographically contained, so more like a "mission" or whatever name you want to use for "chunk of play". In a cycle you wake up from hibernation, go out and try to hunt for food, and need to return to hibernation before the rain gets you. Hibernation acts as save points, meaning that if you die you get to retry that cycle.





   jamesprimate on October 23, 2014, 11:56:05 AM (Last Edit: October 23, 2014, 12:13:01 PM):

Quote
I'm kind of leaning towards not having many creatures that are both land and water dwelling - it's easier and feels cleaner to have some separate (vicious!) water fauna that will eat whatever falls down there.

totally agreed! i like the idea of water creatures being so nasty that even lizards are like NOOOOOOPE


On the subject of jelly water: this is probably some crazy fantasy alien planet or whatever, that "water" could be liquid helium or methane where the viscosity is higher than h20. same with the "rain". in my mind, subtle weirdness is an asset. as long as it looks cool!





   jamesprimate on October 23, 2014, 12:17:19 PM:

LOL, you guys are so ahead of the curve. getting it all BEFORE its on Destructiod: http://www.destructoid.com/slugcat-gifs-slugcat-gifs-282920.phtml

 Cool





   jamesprimate on October 23, 2014, 02:21:20 PM:

On the subject of jelly water: this is probably some crazy fantasy alien planet or whatever, that "water" could be liquid helium or methane where the viscosity is higher than h20. same with the "rain". in my mind, subtle weirdness is an asset. as long as it looks cool!

i'm fine with the color being weird! alien planet's all great and i'm down for it. but on a purely aesthetic level i think the color being so saturated is at odds with the rest of the game/areas, which is pleasantly desaturated + has excellent color use

also that thing i said about gradient background etc etc

63

yeah totes! i was talking more about the physics. the water color is just temporary, and pretty extreme contrast just so he can see whats going on. In any case, we are looking at a number of regions which will have water elements, and so the color of the water in each will be adjusted to fit the palette of the region, etc etc.





   JLJac on October 23, 2014, 11:49:46 PM:

Update 345

Finally I got to color - I needed to rewrite my way of handling palettes (and thereby also my shaders) so that each palette is its own png. Feels much more reasonable. I think that we can also do gradient changes between palettes using this system without writing a shader for it - the palettes are 32*8 textures, and I think that a palette swap effect could be achieved by just doing copy pixels on the currently active one in the CPU, the GPU wouldn't even know anything was happening.

That said, I'm feeling a bit weird, because everyone has been telling me that performance is super important when writing shaders... And my experience has been that I can get away with anything. Maybe my computer has a very fast graphics card? Pretty much whatever I do they seem to run perfectly fine, the only problem is that they tend to sometimes not work at all, which seems like a different issue...

Anyhow, messed with the palette stuff, and made it so that the palettes contain positions for water coloration as well. I also added an option that the water can be "behind" the foreground, as James requested being able to do puddles and pools without necessarily having the entire level look submerged:



Water colors are still WIP, but at least more reasonable. Creating palettes is for some weird reason one of the most time consuming activities in making this game hahaha! I can tweak those colors for weeks before it feels right - so I'm pretty sure that the water is going to go through a few such iterations as well.

On top of that I managed to make it so that Unity is more comfortable with my shaders - it doesn't give error messages or anything, and it actually agrees to build the standalone! But the shaders are still all white, so that's going to need more messing around.

I've also tried to look into some wave equations in order to make the surface less jelly-like, but it's all written in physics or math language that I'm not really literate in Sad Maybe if I give it a serious go I can achieve some sort of breakthrough - after all I'm not trying to do an accurate physics simulation for calculations or anything, I just want it to look somewhat correct.

Happy weekend!





   JLJac on October 24, 2014, 05:36:17 AM:

Hahahaha thank you thank you thank you  Cheesy

cat gives the water a weary eye


...keep projecting! That's the juice this entire machine runs on! Cheesy Cheesy Cheesy

You guys seem so enthusiastic I'm gonna give you another one today ~

Update 346
Worked some on drowning mechanics, and I'm pretty happy with it! Basically, it's an interaction between two paramaters, Air In Lungs and Lung Exhaustion. The air meter is just an air meter, when it reaches zero you die. At 2/3 air left, the slugcat will give a single bubble, which can be spotted by an attentive player and is basically your cue that it's time to stop doing whatever you're doing under water. At 1/3 air, the slugcat will start to move its arms more and faster, emit a lot of bubbles, move a bit slower, the input direction will involuntarily tend upwards. This is the panic mode, now it's really time to just get up to the surface.

Here's the thing though, when in panic mode, your lungs get exhausted. This is bad for several reasons - when your lungs are exhausted, you take in air more slowly once you've gotten up. If you dive down again with your lungs still exhausted, you lose air faster. Once your lungs have become exhausted, you need to get up, fill the air meter (which is now slower) and then when the air meter is full the lung exhaustion meter will start to tick down. You can see that the slugcat is exhausted because it's closing its eyes and breathing heavily - once it opens its eyes it's safe to go down again.

This sounds complicated, but when actually playing it the implications are pretty simple: go up for air every now and then, and you'll be fine. If you really try to stretch your stay under the surface though, you'll need to stay up longer the next time you get up, to get rid of the exhaustion. This means that if for example some creature is harassing you above the surface, you can't stay away for ever by just popping down and up - if you're down for a long time, you'll need to be up for a long time as well.

If you dive down with fully exhausted lungs, you get only half as much time on the air meter, 4.5 seconds instead of 9.

I have implemented a mechanic which is that if you're in panic mode, and the only input you give is straight up, the air meter will deplete slightly slower. Basically I'm just cutting the player some slack - you're moving straight up towards the surface, it just feels unnecessarily unfair to have you die 40 pixels from the surface, especially as rain world death is a binary switch.

The entire system means that if you're just like, in a pool swimming and diving, it's perfectly comfortable. You can be confident you're not going to die. But as soon as you're trying to do anything under the surface it becomes tricky as you'll really have to work with the swimming mechanics and the air meter. Especially anything that involves swimming in under a ceiling separating you from the surface feels super uncomfortable - which is just the way I want it.

Here's the slugcat almost drowning, but getting up, recovering and continuing its dive.






   JLJac on October 24, 2014, 05:48:12 AM:

Here's how I imagine you're supposed to work with the water - quick in quick out operations taking advantage of the physics and controls, and drowning won't be a problem.



I should really stop swimming around and get to work on making those shaders function Who, Me?





   jamesprimate on October 24, 2014, 09:10:56 PM (Last Edit: October 24, 2014, 09:23:04 PM):

good question! Joar and I have discussed this quite a bit. Like you, I also dig a lot of the sounds in the lingo version, which have a pretty cool "industrial but videogame" feel. The ones we use we'll definitely want to spiffy them up a bit, give them all a nice sparkle of hi-fi, much like the visuals here where you can clearly see the "simple pixel platformer" origins, but there is a little more high tech zazz to them.

But don't worry about it turning into mass effect cut-scene "bwaaaah" hi fi audio or something. All the sounds and music in the game are synthesized from or processed through low bit hardware audio sources like vintage moogs, oberhiems, waldorfs and actual old videogame console sound chips (hey thats me!) Nothing goes above 16 bit, and its mostly just weird use of additive, formant and wavetable synthesis, which i feel complement well the otherworldly industrial beauty Joar creates so clearly with the visuals.

Actually, the whole reason i emailed Joar about this project waaaaaaaay back 2 years ago was that i had a nightmare (really!) that someone came along and ruined it with goofy vidya game sounds and music that completely destroyed the mood. So I have devoted my past 2 years 1000% trying NOT to do that!

also:

Flocks of piranhas.

Just sayin'

totally on the same page as this  Hand Thumbs Up Left Hand Thumbs Up Left Hand Thumbs Up Left





   jamesprimate on October 25, 2014, 07:47:05 AM:

Sheesh, believe me, we have quite a long way to go too  Waaagh!





   JLJac on October 25, 2014, 07:43:39 PM:

PARTICLES

It's really strange I forgot this hahaha! Getting to it now... Hard to make it look good though - will take some tweaking.

JLJac what are the spec of your machine? which modern game run on it?

Here are my specs:



As for games, I don't know as I don't have any installed. The computer is an HP envy laptop, very new, but not the most expensive power monster on the market.

@Rojom, on the subject of fur, we kind of have schrödinger's slugcat here... I'm not confirming that it's furry, but I'm also not confirming that it's not furry. You'll just have to float around in uncertainty, sorry  Tongue





   jamesprimate on October 25, 2014, 08:31:39 PM:

Christian knows what's UP





   JLJac on October 26, 2014, 07:39:41 PM:

Unity, C# and Cg shaders Smiley

@JIMBERT, as always, thank you sooo much :D It might be the case that I'll have to write some alternative shaders and include graphics options... We'll see how it works when we have an alpha we can try on a couple of computers.

Update 347
I had enough of the jelly, so I scavenged the internet for some 1d wave equations. After a while I found one in some kind of academic paper, but they had also included some mathlab code - somehow I managed to lift that without necessarily understanding much of it. A lot of tuning later, we have correct(er) wave motion on the water surface:



I even faked a bit of interaction with the walls - if you look carefully you might see that the waves bounce off the walls a little bit. They don't do that if the water is in the "in front of terrain" mode, so the difference has actually been upgraded to not being strictly cosmetic. I also did a bit of optimization by having it not simulate the entire surface when in this "behind terrain" mode, instead it looks for the leftmost water tile and the rightmost, and create the surface between those.

Other than that I've done a very slight little vertex shader on the surface of the water, which you're probably not noticing but which is giving it a bit more depth. If you can kind of see the waves on the surface a little bit, that's it. Earlier the surface was just a flat color blob, now it has some small amount of shading depending on angle. I'm always hesitant about that sort of stuff, as the art style I'm trying to roll with here is flat colors, but I think that if it's subtle like that it can get a pass.

Hm, what else... I tilted all the polygons in the water mesh, so that in the darker palettes (like the green water) you get a bit of an impression of light coming in at an angle through the water. And I added some droplets, which I'm not perfectly happy with, I'd like some more impressive splash, but a more impressive splash seems like it'd take yet another custom shader, so they're good enough for now...

Now I can't really claim I need to do something else, so I better get those shaders working, haha~





   JLJac on October 26, 2014, 09:49:09 PM (Last Edit: October 26, 2014, 11:38:32 PM):

Thanks! No, that's not the problem any more - now the build builds, but the problem is that the shaders are all white. Even if I replace their content with the code from the one shader that is working (level coloration). If I give the sprite a color, the sprite will have that color instead of whatever color the shader tells it to have. So things kind of seem like that the problem isn't that the shader isn't working, but that the shader isn't there. What I'm currently thinking is that the problem is this - ie that the shader is not included in the build because unity doesn't find a material using it.

Do you know of any way to force Unity to include some element in the build?

 Gentleman


Edit: Nah, that probably wasn't it as everything in a resources folder SHOULD be included. Now I've isolated the problem to the following: Whichever shader has the name "Additive" works, regardless of content. No other shader works. Hahahaha shaders  Cheesy

Edit edit: Wooooho! Working shaders! I wish I could describe what I did to help people in the future, but it pretty much comes down to Fiddling Around. By accessing the shaders from another place they ... idk, probably that Unity noticed the reference to them. So now it works! Also, under project settings -> graphics you CAN actually create a list of forcefully included shaders. This wasn't the solution for me, but it might be for someone else. I think I'll put my shaders there in either case, because the game can't play without them either way.





   jamesprimate on October 27, 2014, 12:45:08 AM:

playing the water build now and its pretty dang amazing. especially amazing is how well it works with deep / multi-screen rooms. i'll do some little videos in a day or so, because the atmosphere from it is really something youve got to see.





   JLJac on October 27, 2014, 10:46:54 PM:

Yeah, breathing animation needs some work... I think the lizards will somehow boil to death in the water, we'll see how it ends up looking!

Some dripping... yeah perhaps! Worth a go!

Update 348
James and I are really happy about the water, so now we set the next goal to get some rain cycle stuff in order to take steps towards a playable alpha. As I'm already in shader land messing with the palettes, I decided to do the palette fade effect today.



In the game, I doubt there'll be any scenario like this, fading from green to orange. I'm just showing it off using palettes I already had. Rather the idea for the actual game is that each palette will also have a darkened "rain is coming" palette, which it'll start fading to as a warning to get back in your shelter. There might be some intermediary areas between two areas that could use faded palettes as well, but I think we'll keep that at a minimum because the straight color lerps create some pretty desaturated and boring palettes.

The effect is accomplished by doing a copypixels operation on the texture the level coloring and water shaders use - meaning that the shaders themselves are not bothered by this at all. The palettes are fairly small (32*8 px) so I haven't noticed any frame rate drops.

All the objects are also told to update their colors, so things that use for example the "black" color of the palette will fade with everything else. As a new fade instruction is called, it copies the current palette into the From texture, meaning that a fade can start in the middle of another fade with everything remaining smooth.

I've also re-introduced the slight wetness distortion on the geometry that I had to remove when working with the water - now I just pass a float to the shader letting it know the water level, and don't do the distortion below that. Distortion + water didn't work because the water needs to mask itself against the level geometry, and if that geometry moves around there'd be weird little gaps. Also, I updated the cloud shadows passing over the level to make them moving rather than just a static scrolling image.





   jamesprimate on October 28, 2014, 09:20:21 PM:

ohhh, good suggestion! that does look Quite Nice





   JLJac on October 29, 2014, 12:29:54 AM:

Oh wow, you threw that together just like that? That's amazing! Yeah, I see what you mean, the scale definitely does seem a little weird. The reason why I have it looking as it does is mainly that I'm trying to keep the color count down in order to give it a "pixel art" look rather than "shader mania", but that's obviously a battle that's slowly and surely lost. You do have a good point in that multiple layer water would mimic how the backgrounds are constructed, which might give some consistency to it.

The scale issue is actually not that big of an issue to me personally. Might look a bit too small at times, but this is a weird cartoon universe where things aren't really that pinned down. I honestly couldn't tell you how tall a slugcat would be next to a human, which is kind of the point, because it never is next to a human - it lives in its own realm. The weird scale of the water reminds you of that a bit, which I'm not entirely opposed to. Then again, I'd prefer it being ambiguous to it being visually well-defined that the slugcat is small as a raindrop, because if you forced an answer I'd probably have to say that it's closer to an earth-mammal in size than a droplet of water.

Difficult stuff. But yeah, note taken. Right now I'm pretty happy to leave one week in shader land behind for a little while, but I'd be surprised if I didn't return to it. If we're doing some ocean-inspired areas your water would obviously be much more fitting, and I think James have some plans like that.

I've also been thinking about maybe having some reflections in the water surface - by now the body of water below the surface has gotten much more shader love than the surface, which is basically just a colored sheet. So... we'll see. Water round 2 might bring some changes. Thanks for your input!

Update 348
Made it so that creatures can be in dens. I had to mess around a bit with this because it means that a creature is in a room, coordinate-wise, but also not in the room as in that it can't interact with other creatures in the room. It seems like things are working out fine though, I've been able to have a lizard enter a den in a loaded room, as well as move to an off-screen room and enter a den there, in abstract space.





   JLJac on October 30, 2014, 12:14:30 AM:

Thank you! We're not through yet though  Shocked

Update 349

Shortcut visualizations coming along.



Most things are still missing - there should be little indicators at the exits, the entire length of the shortcut should blink when you get close to it to make it apparent where you'll end up, etc etc. More tomorrow!





   JLJac on October 30, 2014, 10:47:21 PM:

Our genetical engineers are on the task!

Update 350

That age old rain world question - Where the hell will I appear if I go in this shortcut!? - has been given some clarity.



Some feedback, what do you guys think? Am I overdoing it? To me it feels a bit too modern with the color fading - I'm thinking about if it might be possible to have it look more old school somehow. Right now I'm lighting the entire path up, and doing a "wave" of slightly lighter dots on top of that so you can see the direction it's moving in. And also I'm having the destination arrow blink like crazy.

Note that in most scenarios you won't have any idea where to look for the destination arrow if you're playing the room for the first time, so I don't really think this can be communicated too clearly - however, it shouldn't be too visually distracting either.





   jamesprimate on October 30, 2014, 11:37:59 PM:

Las Rain Vegas World!

i think the mechanism probably works fine if done subtly. a little pulse of grey or something when you get close?





   jamesprimate on October 31, 2014, 01:09:15 AM (Last Edit: October 31, 2014, 01:14:22 AM):

Maybe instead of the trace of the shortcut, you just keep the arrows. Because, I think, that's the only important info you would need at a glance, the exact path doesn't seem to important. Maybe when you get close to a shortcut entry, both the arrows just lerp to the same color

this is basically what was in the lingo build and it seemed to work fine. when you'd get close to a shortcut, the arrow and corresponding destination arrow would pulse subtly. i still think thats the way to go, not just for visual sensibilities but also because you'd sort of have to be looking around to figure out where you'd end up, kind of as a gameplay element. felt like "hunting" (and also, much more importantly, it didnt clutter up the view.)

but that said, no reason not to explore some possibilities!

maybe in a tutorial level if that kinda exist it would be good to point them out (if at all)

 Hand Thumbs Up Left






   JLJac on October 31, 2014, 03:40:59 AM:

I'm not sold on the idea of having only the blinking arrows, because it's not in all scenarios where it's only the player alone triggering those things. Multiplayer can have 4 slugcats running around, and then you can't just look for where it's blinking. But I totally agree with you on it being too saturated and bright, it does look a bit too much like neon lights. Maybe if the wave motion stays, but is toned down some? That would make it more about the blinking arrows, but there'd still be some motion to follow in order to get to the right arrow.






   JLJac on October 31, 2014, 06:57:55 PM:

Maybe have the entrance and exit highlight in the color of the entity that walks past it? For example, when a green lizard walks up to a tunnel, the entrance and exit arrows slowly turn green, while for the player they would turn white. I assume in multiplayer slugcats will have different colors, so that might fix that issue.

I also think it would be nice if the arrows aren't (extremely) visible when you're not close to an entrance. That way you really have to be close to a tunnel in order to 'discover' it.

Just throwing in some thoughts  Durr...?
The color idea is really interesting! It's a ... weird one though, so I'll have to think about it.

Not a fan of the arrow or lights, maybe have some other environment indicator for the player to show where the entrance / exit is. As the slug cat gets closer, maybe some blowing weeds, plants, wires or water drips...? I don't know I'm just rambling now.

I kinda preferred it when it wasn't obscured, you just saw the tunnel and the slug cat / lizard climbing through it. Also what happens if a lizard comes the other way while you're in the tunnel?

What do you mean "when it wasn't obscured", do you mean the shortcuts or do you just mean like, an ordinary tunnel made from level geometry? Because those are different elements - one is not replacing the other Smiley I could try to do some kind of more "in-world" visual cue, but it'd be so incredibly forced that I'd prefer to just not try to go there. I don't know if you guys remember my post about how I think of in-world coherency from a few pages back? Basically the shortcuts are already a huge, weird exception from how the physical reality of rain world otherwise works, and as such I think it's way less awkward to embrace them as exceptions rather than try to shoe-horn them into some kind of more realistic representation.

For those of you who suggested more muted arrows, I tried toning down the color a bit and going back to the smaller size of the lingo build:



This is the size and color they were when I stood on the PAX floor and put my finger to them saying to people "THERE IT IS DO YOU SEE THE ARROW" and people were like "NO I DON'T SEE A THING", buuuut, I think that the expo floor was probably a pretty stressful context, where most people were playing the game for just a couple of minutes while standing up. Playing the game at home, sitting closer to the screen, people are probably able to pick up more subtle visual cues. What do you think, is it better?

Those of you that want to indicators at all - I totally get your point. Aesthetically they are a bit of clutter that we'd perhaps be happier without. But, the end product here is a game, not a bunch of gifs, so playability trumps aesthetics if all else equal. What the game looks like will appeal to you for a few minutes, but what it plays like is what's going to keep you for several hours, so I'll have to go with that. Then of course, if we can have both that's obviously the best alternative Smiley





   jamesprimate on October 31, 2014, 07:08:36 PM:

looking Quite Nice  Gentleman





   jamesprimate on November 03, 2014, 05:09:58 AM:

Yo! So I'm meeting up with Joar in Seoul for the next few days, meaning that probably nothing at all is going to get done while I force him to play tour guide, hehe. No that's not true of course, one of the main reasons I'm here is so he can teach me some of the more arcane ways of the level editor (tile, palette, lighting aspects, etc), plus we'll be planning out some more of the long-arc / business stuff. But in the interest of full disclosure, we'll mostly be eating samgyeopsal or kimbap while doing so  Toast Left

Talk to you guys in a few days!





   JLJac on November 06, 2014, 09:58:12 PM:

Most of our talk has been about business stuff and how we will handle the logistics of the project - maybe not the most exciting but very necessary, and it feels good to have a more defined idea about how things are going to go. However we've also talked a little bit about how we want the world you play in to work. As you've seen James has made some pretty extensive maps, and we've been trying to flesh out the first areas a bit more which is definitely easier sitting at the same table. On top of that, James has had a crash course in the more intricate workings of the level editor, and we're hoping to be able to switch up to a new gear in actual content creation.

I think this division of work (I use the term loosely as we're both obviously going to be involved a lot in what the other person is doing) feels really good. Ever since the start I've mostly focused on the small scale - how the creatures actually look and interact. The game design issues of the larger scope - how the world will look and how you'll progress through it - I've generally been thinking of as something I'd get to "later", but I've been worrying that this might not give it all the attention it deserved. With James giving those aspects some serious attention, I feel secure in that they will be just as good as they have potential to be.

So, all in all, good productive talk. We're sorry about the gif sparsity though, promise to get right back at it next week when things return to normal!





   jamesprimate on November 09, 2014, 02:31:46 PM:

^agreed on all counts





   JLJac on November 10, 2014, 01:04:10 AM:

Update 351
Back at it! Today I added tools for creating and adjusting water in the level editor - I have high expectations for what's going to come out of that when James gets his hands on it. As so far we've only added the water to already made levels, we haven't created a level designed for water yet. Going to be pretty cool to see what comes out of that.

The rest of the day has been spent trying to get the AI to have some basic understanding of the water's existence. Both flies and lizards are pretty hydrophobic, so in those cases it's just a matter of of marking wet tiles as illegal (which isn't as easy as it sounds, as there are a million references to asking about and setting the legality of AI tiles all over the code). I've also created a marker for creatures that enables me to give them a somewhat more sophisticated relationship to water, for example they can be air dwelling but accept touching water at the surface though not diving into it, or water dwelling, or completely amphibious.

Somewhere in the process I managed to break some parts of the code that saves AI data to the level file, which really was the last thing I wanted to revisit this week, but it doesn't seem all that bad so let's keep our hopes up. I'll probably sort it out pretty quickly as it doesn't seem to be about the hexadecimal data storage, which would've been the true nightmare situation...





   JLJac on November 10, 2014, 11:49:42 PM:

Thanks :D

Update 352
Finally managed to make the AI understand water, and patch up everything I broke during that process. There are a few things still that need to be addressed, such as some system for saving whether a node in abstract space is submerged. Without knowing that, a room that exits abstract space could end up spawning a bunch of fish on land and a bunch of flies under water, or similar. Also it would be necessary in order to avoid weird off-screen diving by creatures that shouldn't be able to dive.

Other than that I've added a health state to the lizards, finally enabling them to be injured and die. The injured state is handled by a per-frame chance of getting a bit stunned, which increases with how damaged the creature is. This works pretty well in my opinion, as it means that a very injured lizard will be mostly incapacitated, but if the random numbers line up it can get a sudden burst of movement, making sure that you never feel completely safe around it.

For death condition I'm doing a similar thing, the lower under 0 the health is, the greater the per-frame chance that the lizard will finally shut down. However, there's also a 50% chance of death when reaching 0 health, and a 100% chance when health reaches -100%. It looks good so far, with some lizards collapsing immediately when hit by a spear while others manage to crawl a step or two.

Lastly I've finally made sure that spears don't duplicate when off-screen, but thinking of how many time I've written that already the gravity of the wording "made sure" seems to be dropping quickly. Well, at least the spears seem to stay un-cloned in the situations I can create right now.





   JLJac on November 12, 2014, 12:34:37 AM:

Hahaha ok, I'll post a gif for you!

Update 353
Polish, polish, polish. I'm trying to wrap up the mechanics I have to a playable state now, before moving on. That means a lot of tiny little things that needs fixing. Today I revisited spears - how they stick, how they do damage, etc. The new spear stuff in combination with the lizard damage stuff means that the game is much more of a game recently, which feels kind of cool.

The player has also finally got a throwing animation, if you look closely you can see the slugcat lean into the throw a bit, and some hand movement as well.



Other additions of the day include lizards being able to understand that they should return to their holes when injured, and the ability for lizards to casually attack some close by creature they're not actively hunting if they think the creature looks tasty, or are just generally pissed.

As it's becoming more of a game the differences in difficulty between Unity and Lingo version also becomes more obvious, and I've been trying to tune that a bit. The difficulty was way too low, and now it might be a bit too high - but I've implemented it so that it's dependent on a few breed-specific variables in the lizards that can be tuned up and down very easily, so we'll get there.





   jamesprimate on November 12, 2014, 01:29:39 AM:

Hahaha ok, I'll post a gif for you!

Update 353
Polish, polish, polish. I'm trying to wrap up the mechanics I have to a playable state now, before moving on. That means a lot of tiny little things that needs fixing. Today I revisited spears - how they stick, how they do damage, etc. The new spear stuff in combination with the lizard damage stuff means that the game is much more of a game recently, which feels kind of cool.

The player has also finally got a throwing animation, if you look closely you can see the slugcat lean into the throw a bit, and some hand movement as well.



Other additions of the day include lizards being able to understand that they should return to their holes when injured, and the ability for lizards to casually attack some close by creature they're not actively hunting if they think the creature looks tasty, or are just generally pissed.

As it's becoming more of a game the differences in difficulty between Unity and Lingo version also becomes more obvious, and I've been trying to tune that a bit. The difficulty was way too low, and now it might be a bit too high - but I've implemented it so that it's dependent on a few breed-specific variables in the lizards that can be tuned up and down very easily, so we'll get there.

WOOOOW! That GIF looks like a quicker, smoother version of the classic lingo ones. Suuuper impressive!





   jamesprimate on November 12, 2014, 02:41:05 AM:

throwing is just forward. keeping it simple! rain world is no twin stick shooter  Hand Joystick Hand Joystick





   jamesprimate on November 12, 2014, 01:13:21 PM (Last Edit: November 12, 2014, 01:34:32 PM):

we've been working on the next gen version for so long, you forget how it used to be. its crazy to see the same sorts of scenes side by side. The frame rate difference is RIDICULOUS. And the gif is only at 30fps i think? in game its like 100fps+, laser crisp and smooth. Plus notice how much more depth and detail is present in the backgrounds?

The lizards in the new version are still lacking a lot of the "personality" behaviors that were in the lingo, so they look a bit "im running straight towards you to bite you", but other than that WOW what a difference! The arm motions, the limping, the escape behavior. There is still TONS more to do with that stuff and it compares well already.

Still feel the throw motion is a bit off somehow. Maybe not quick enough arm? Also the spear rebound animation is pretty wacky, haha. BZZZOOOM! Could probably be slowed down if possible.

Yep, the lizard heads are armored to various degrees. The point being that you shouldn't REALLY be taking them on head to head unless as a last resort.

ANYWAY!

I just got back from a week in Korea studying rain world tiling with Joar, and i think the results are looking pretty nice:



non horribly compressed version here: https://i.imgur.com/55PL17h.png

Finishing up the first tiling pass on the initial area of Rain World proper: the ~25 room "suburban" region that will be teased in the first build... which we are planning on having ready pretty soon!

Gentlemen, it looks like this might actually turn into a videogame after all!  Gentleman





   jamesprimate on November 12, 2014, 04:58:02 PM:

None yet. Despite my enthusiasm above, I should note there is still quite a way to go!





   JLJac on November 12, 2014, 11:52:23 PM:

Update 354

Today's gif is pretty monstrous, so I'm actually gonna link it rather than embed it.

http://gfycat.com/EvenCircularDevilfish
http://giant.gfycat.com/EvenCircularDevilfish.gif (gif version, warning! 40 MB!)

Effects for approaching rain!

Other than that, today has included a lot of polish in various areas. Added screen shakes for when heavy objects impact the terrain, sparks when weapons hit the walls, fixed a bug where the player's hands were invisible, and so on an so forth.

Oh, and maybe more important than that stuff - I made the picking up / throwing / putting down of items work. It's a pretty complex system that takes a lot into consideration - the basic idea is that you have two hands and can carry a thing in each (fly, rock, spear), but there are many special cases. For example, you can't dual wield two spears, but one spear and one other object is allowed. And flies have lower priority - if you are standing on a weapon holding a fly, the fly should be released in favor of the weapon, but only if you don't have a free hand to use instead. If you hit the throw button and are holding a rock and a fly, you probably want to throw the rock, not the fly... And so on. Basically a huge amount of special cases where the game should cater to the player and try to be user friendly.





   JLJac on November 14, 2014, 12:51:27 AM (Last Edit: November 14, 2014, 04:44:03 AM):

Anyone second switching to gyfcat? I don't think they can be embedded, so I'm afraid the devlog might look a bit boring if all the animations are hidden behind links... Maybe for the bigger ones?

Update 355
Painstakingly re-added effect colors to the Unity Build! This took me on an epic journey through the two things that are my cryptonite - Adobe Director and Shaders. But it worked out in the end!


(that little red stuff along the edge of the wall... No idea what that is! Have to hunt it down.)

Each effect color is actually no less than eight colors:



The upper four pixels of one of these segments are: The color when it's close, and lit. Then close, and shadowed. Below that, distant and lit, distant and shadowed. Under each such block is the same thing repeated, but for the dark palette when the rain is getting closer. Here the left and right columns are the same, because there shouldn't be any light around anyways.

For the distance factor, the shader simply lerps between the colors depending on the depth of the specific pixel, making the colors a bit more washed out if they are further off into the fog.

The difference between the first and the second color here is that the second one is glowing in the dark - its "shadowed" colors are the same as its lit colors. I'm pretty happy to have that amount of control - it means there's a lot of potential to fine-tune the aesthetical experience.

The colors themselves are not tuned yet though, and very much subject to change, but the system is up and working!

Going into the level editor I also fixed a few things in the level save method - now it saves fly hives again. Another thing that made a comeback for the first time in the unity version is that the level recognizes "back walls", ie terrain that is behind the "play layer" but close enough for wall climbers to crawl on.

Other changes include some polish of swimming controls. Now you can get into the "wall slide" position while in the water, which allows you to do a little wall jump. The lack of this feature had annoyed me for a while. There was also a weird glitch where you could exploit the water physics by rapidly tapping the jump button while swimming at the surface, the slugcat would somehow build up a wave and ride it, going faster and faster. I messed around with that a bit, adding a delay on the jump from the water surface, and balancing its forces a bit. While I was in the swimming code, I also added a potentially fun little feature - if you press the jump button while under water, you can get a little speed boost in exchange for a small amount of the air in your lungs. It isn't really worth it in most cases, at least not with my play style, but I always enjoy giving the player some extra options to make choices have even more depth. In some situation it might be just the thing.

Last for today, I got started on having the game recognize bat hives, grouping them properly etc. After that stuff is done, I hope to get to bat swarm behavior.





   JLJac on November 17, 2014, 12:14:59 AM:

Hm, ok... Maybe I'll hide the gifs behind links if they surpass 20 or 30 GB or something? Again, if anyone else has an opinion on this, speak up. I know there are quite a lot of lurkers ~ and as no one has said anything yet I've assumed that people are happy with the format, so I think I'll have to keep it the same unless more than one person wants to change it.

Update 356
James and I have decided to do a push on adding back the core features to the game - we want to "catch up" with the lingo version ASAP. Catch up is a weird wording, as the unity version is insanely more advanced and complex than the lingo version already, but some of the more mundane features have been lagging behind. So, today I present to you: fly eating!



It's interesting how many things you forget has to be implented - for example I spent a couple of hours today adding the ability for flies to be dead, which was pretty necessary to proceed haha. The amount of weird little things like this, that seem to be so obvious that you tend to overlook them, has also increased further with the addition of water. Basically everything I do, I have to do twice now. How does a fly move? And how does it move when in water? How does it move when dead? How does it move when dead and in water?

For most land creatures the water behaviors are reduced to just a couple of lines that basically describe "panicked writhing" so it's not really as bad as it sounds. The problem is that there are a lot of these scenarios. A few days back I made spear and rock behavior for underwater conditions, and the flies and lizards seem to be handling it OK as well though the lizard AI really needs to be more careful not to fall in. The scary thing is that whenever I think of something that was in the old version, or something we've promised to put in the new version, there's also the big question mark of how it'll interact with water. Pups + water? No idea, haven't given it any thought yet o___0

I think keeping most of these interactions simple will be the best route. And despite all this, James and I are super agreed that adding the water was worth it - it does add a bit of extra work, but it adds way more in terms of gameplay depth.





   jamesprimate on November 17, 2014, 07:39:50 AM:

As for pups, I had always envisioned them as kind of helpless. Maybe they can't swim? So you'd have to carry them underwater, or it could lead to some tense scenarios where you have to make a desperate dive to save a pup that fell into water.

totally agree!





   jamesprimate on November 17, 2014, 02:13:40 PM:

hahah i love RPS! why do they always talk about game maker though??? we've never touched game maker, rofl. (not that im going to complain about awesome enthusiastic coverage though! they can call it whatever they want)

thanks Graham Smiley





   jamesprimate on November 17, 2014, 06:15:58 PM:

Joar could answer this way better than me obviously, but basically everything is custom Joar work. Engine was build from scratch TWICE, first in lingo and now in C# using the code-centric futile framework for unity (so you are right, no unity workflow at all.) the level editor, also hand rolled, is still in lingo actually and has to run instanced from inside director haha





   JLJac on November 18, 2014, 12:21:39 AM:

It's not too obtrusive but I still don't feel like it fits with the atmosphere of the game. It feels artificial in a game that (as far as I've seen) is entirely organic.

I'd like to revisit the idea of bugs to show a player there's a shortcut nearby. It might be interesting to use a swarm of bugs settling or being agitated as a player gets close to designate a shortcut.

A main theme at play here is the contrast between artificial and organic. You might have noticed how the environments are very industrial, but the creatures living in them are not. So the digital vibe from the shortcuts are not a problem to me because of that reason. What is a bit problematic is that we want to keep working machines to a minimum - you're supposed to look at old machinery, but not interact with it a lot. The shortcuts as they are are obviously an exception to that.

I'm not the hugest fan of the bug idea because it would introduce a living element to every room, always. The palettes of moods we can create is limited if we can't have just an empty room with nothing living in it. As the world is rather barren, and creatures are generally the only objects allowed to move, creatures become natural focal points with a lot of gravity to them. I want to keep it that way - if you spot something living you should be cautious and intrigued - living things shouldn't be scattered all over every level.

Update 357
WIP death rain. Doing it as a shader this time around, which is kind of difficult.



Hm, the gif capturer really went hard on this one... With the full framerate, it appears denser, and has a downwards movement going through it - making it look like it's falling rather than flickering between different images, hehe. The unpleasantness of it comes through though!





   jamesprimate on November 18, 2014, 06:06:10 AM (Last Edit: November 18, 2014, 06:15:01 AM):

death rain is looking suitably brutal! you seem to be all in on shader black magick, very nice. Wizard

as for the long going shortcut debate, i think it will make a LOT more visual sense in actual game context than in the default rooms Joar is using for test purposes. wait and seeeeee! coloration and brightness is certainly something worth considering though.

Seeing the youtube with music adds very much to to the experience of this devlog. I read the log often and I am used to seeing the gifs only. I would love to read (or hear) a bit about the development of the music. It gives so much depth to the scenes.

thank you! i feel the same way, ahah. yes there is a lot to talk about for that O_O, but we will probably wait until we have the audio engine implemented before going too much into it here. right now i have about 100 tracks in various stages of completion, but they are kind of on the shelf for now until we have the regions constructed and the specific scenarios / narrative stuff all nailed down tight. dont want to put TOO much cart before horse, etc.

But long story short for all of that, the focus is going to be on atmosphere, audio being a blend of ambient textures and "music-like" elements woven through, with more "song-like" elements used to set mood for specific locations / scenarios. I imagine "washes of sound and strange music" that weave in and out of the gameplay. Also we have a notion for some procedural-esque properties with how the audio is handled, so perhaps you never quite hear the same audio environment twice.

Anyway, hope that answers the question a little, or perhaps tantalizes for future interest!





   JLJac on November 18, 2014, 05:50:00 PM:

James, I know you're kind of in the zone with the level editor stuff now, but once you re-surface I'm pretty sure people would be interested in a more in-depth description of your creative process with the music. Like, I tend to describe how I make everything down to the tiniest detail, but with the music we've pretty much only published finished results so far. Would it be possible to make some step-by-step display of how a piece of music/ambience comes into existence? I'm not all that sure how you'd display something non visual like that... But it would be cool to provide a bit more detail in that area too!





   JLJac on November 18, 2014, 11:47:03 PM:

Update 358

Game over screen finished enough for now!



The sound is pretty important for this one. As the level becomes darker, there is a violent rain sound that becomes louder and louder. When the screen suddenly turns black, there's a drum-like sound, and then everything is quiet. This contrast makes for a pretty dramatic effect! Then, in the quiet, you hear the first couple of rain drops hit the ground, and then the real death rain comes very suddenly, with a deafening noise. In the lingo version this transition was really sudden, but here I have given the transition to the death rain a little more build up - I don't really know which one is preferable. It was kind of cool to have the wall of white rain suddenly just be there, but this build up approach seems more organic.

The next thing I'm moving on to is flies swarming behavior. The bad news about this is that I need to re-visit the dreaded Prebaked AI Code, because flies need to save the distance to their hives within the same framework as they use to save distances to room exits. Going in there again this time the code has been behaving mostly civil though, so with some good luck it might not be too bad. If I can just create a special case for the fly creature template to make it store a few extra dijkstra maps per room, that ought to do it - and I see no reason why that shouldn't work out.





   jamesprimate on November 19, 2014, 08:14:18 AM (Last Edit: November 19, 2014, 08:25:07 AM):

PRETTY BIG NEWS: the first region of the game world actually is up and running!  Hand Metal Right

For the past few months I've been planning out and constructing the first playable area of the game world, a somewhat self-contained 30-ish room "suburban" region. Joar and I have been calling it "vanilla rain world", as its all about the vibe and scope of the original rain world game concept, before the game branches out and begins exploring interactions with new areas, mechanics, creatures, etc.

Anyway, the process to get it all rendered and connected and working with the new engine has been a bit tricky (to say nothing of the work actually constructing it!), requiring multiple updates to the level editor and tons of fiddling with fussy details in the individual rooms etc. But this morning after a new build and some time fiddling, it booted up smoothly and OMG IT FINALLY WORKS:



See those colored squares at the top? That means the whole region, all 30 rooms, are up and running and interconnected and talking to each-other, just like they're supposed to. You can move fluidly from room to room and it all works without a hitch. It's one thing to know that *theoretically* it should work, and totally another to have the pieces come together and it actually happen. If I had ten bottles of champagne i'd pop them all right now.

There is still quite a bit of polish to add, some of the rooms are still connecting a bit funky, but this is some solid progress. And now Im going to go get a meatball sub to celebrate!





   jamesprimate on November 19, 2014, 01:42:08 PM:

its probably been a while since we actually talked about the function of the rain huh? the rain is a perpetual cycle. "Rain World" and all that. basically you have X amount of time to go out into the world, gather food and return to your shelter and hibernate before the the rain strikes. if you dont gather enough food for that cycle, you starve. if you get caught in the rain, the above happens. if you get eaten by some other hungry creature... well thats obvious. but that is the basic game mechanics in a nutshell!

Any chance we could get a video of the death rain? Sounds like you really need to hear it to get the full effect

audio engine isn't implemented yet, but certainly we will post video when it is!

I prefer the build-up version of the rain!

the black screen rain is the kill screen basically ("game over! continue?"), with the build-up being the indication of impending doom while still playable. So 2 sides of the same coin!





   jamesprimate on November 19, 2014, 05:39:11 PM:

Yep! The bat nests that are your main food source deplete as you consume them, forcing you to journey further into the world each cycle in search of new things to eat.





   JLJac on November 20, 2014, 02:48:42 AM:

Update 359
Running around in the world James has been working on was amazing! I put on some rain world OST and just ran around exploring, and that's a pretty cool experience just that - no lizards or anything added yet. It's a lot of fun to for the first time play the game without having made the levels myself, the anticipation and curiosity obviously becomes much greater. 30 rooms feels big, I spent quite a lot of time just running around and trying to create a mental map of the place.

In other news, bats can now dive down and disappear in their weird "bat grass", only to pop up in the grass somewhere else. The animation isn't really gif-worthy yet, but the basic mechanic is in there. Next up would be room-to-room migration, I believe. Saving extra dijkstra maps to the level files proved to be less of a horror than feared and anticipated.





   JLJac on November 21, 2014, 12:25:33 AM:

Update 360
Started on a big scary thing called Flies World AI. This entity is supposed to coordinate flies on a world level, through abstract and realized rooms alike.

What it can do so far is create dijsktra maps in the abstract world, mapping the distance to each swarm room for each room. Any room (or node actually) can ask the world AI for a "migration direction", ie a neighboring room that flies in this room should migrate towards. Depending on what mode the World AI is in, it will calculate this migration direction depending on different criteria.

Right now I have two such modes set up: spread and swarm. In the spread mode, the migration direction of any room will be the neighboring room with the least flies in it. This means that the flies will spread evenly throughout the entire world. The swarm behavior has flies move towards the nearest swarm room.

Both of these seem to work nicely! I can have a lot of flies gather in a room, and then go to the next room and start the "spread" behavior. Soon flies will come out of the swarm room, and spread out in every direction. Then if I switch back, I can see them emerge from all over to gather in the swarm room again.

Next step is to create some swarming behaviors that actually make sense, and tie them to the rain cycle.





   JLJac on November 23, 2014, 06:04:02 PM:

Update 361
Did some work over the weekend - mostly revisiting the Quantified Creature stuff. Quantified creatures are creatures where the individuality of the creature is irrelevant, meaning the game doesn't save health and stuff like that for the critter when in abstract space. Right now bats are the only quantified creature. Basically the game does not save these creatures in the abstract creature framework, but just saves the amount of creatures per room (actually node) as an integer.

The problem was that there were some loop holes when changing between the realized and quantified states - meaning that the populations weren't consistent. Sometimes bats would disappear or appear in the transitions between the states, and there'd be situations with schrödinger's bats, bats existing and then suddenly not existing, or the other way around. After re working the system, it seems it's water tight; 50 bats is 50 bats, and they only disappear or appear when eaten or spawned.

With that down, I could actually get started on bat migration patterns.

Right now I have a pretty simple system. Bats spawn in their swarm rooms, and hang around there. Every now and then the game checks all the swarm rooms, and finds out which is #1 and #2 in amount of bats.

#1 is assigned a "spread" behavior, where bats will move out of the room and spread into neighboring areas. When they get close to another swarm room, they'll start gravitating towards that one.

#2 is assigned a "migrate" behavior, where another swarm room is picked at random and the bats start moving towards it. On their way there, they'll most likely hit another swarm room's proximity, and start gravitating towards that one.

As this goes on for a while, #1 and #2 will be more or less emptied, while other swarm rooms will gain bats. Then the same process hits again, and a new #1 and #2 will be assigned.

The effect is that bats seem to move around between swarm rooms at random. If you're out in the world, between swarm rooms, you'll sometimes see little flocks of bats passing through your room on their way to some other place. This is the key feature, as it'll allow the player to follow those stray bats and end up in an active swarm room.

It will take some playtesting before we know the system really works. But I'm happy with the fact that the system can potentially lead the player towards swarm rooms without necessarily catering too much; the bats are not trying to help you actively, they're just going about their own business and if you're clever you can take advantage of that behavior.

Today I'll fine tune it a bit further, and see how it plays out. Maybe if stray bats become too sparse, so you very seldom have any to follow, I'll add a phase at the very start of the cycle where migration is more common.





   jamesprimate on November 23, 2014, 06:41:52 PM:

^ super excited about this. we'll have to do a bit of testing how it works in-game, but having such an elegant, natural solution to the "how do we unobtrusively push players toward swarm rooms" problem would feel like a real victory for the mood were trying to create.





   JLJac on November 24, 2014, 04:43:30 AM:

Update 362
Huuuuge step. Got the entire world up and running, with migrating bats and lizards spawning in their dens, later emerging to hunt, and then returning as the rain approaches.

Good news and bad news. Good news are that YYYAAAYYYY it's up and running! Everything basically seems to work - the creatures spawn, move about, you can encounter them, they don't disappear or randomly appear, the ai seems to be able to somewhat handle most situations.

Bad news are not really anything unexpected, it's just that in this new - vastly more complex - context every little glitch and lack of polish becomes more prominent. The lizards getting stuck, the AI throwing missing reference exceptions, the AI not always making the best decisions, all of that is now way more visible. In my previous test environment there was just a single room, or a few interconnected ones, and I'd hit restart over and over while testing stuff. Now we have way longer sessions of gameplay, making every error stick around for a longer time and becoming more visible. This, in combination with the environments and situations being generally more complex and error-prone, makes for a generally more glitchy experience.

But, as I said, this was pretty much expected. Now the glitchy stuff is there, all visible, and I'll just have to hunt the issues down one by one. Everything essential and important is working.

It's probably too early to say anything about the game design implications of this new environment, I just haven't had enough time to play the game. I've noticed a few things, such as despite sprinkling the world with what seemed like quite a lot of lizards, lizard encounters seem sparse while moving through the world. Maybe this has to do with the amount of lizards, but I rather think its about their mobility. I might want them to move more between rooms.

Gonna play the game a bit more! Brb!





   JLJac on November 25, 2014, 03:11:33 AM:

Yeah that was the original idea, but I think James have had some other thoughts since then. James?

Update 363
Another significant step - the room loader. This is the thing that loads rooms that are near to you and unloads rooms left behind. Right now it'll light up all neighbors to where you are (there is a limit, so not infinitely many rooms), and if too many rooms are active it'll start shutting them down. Then it goes by stuff like how long ago the room was viewed, and how many screen transitions ago.

Neighboring rooms that are activated and then never visited are unloaded on the next room transition. The system seems to run well! Performance wise it's smooth enough so far, and having all neighboring rooms loaded creates the nice effect that whatever room you're entering has been loaded a little while. Earlier the creatures would display a few frames of "I've just been loaded and will now try to act like I was here all along", but now when you first encounter them their animation states are already looking natural.

Other stuff of today's progress include:

* James requested being able to define some rooms and room connections as off-limits to bat migration, in order to be able to exercise a little more control over how bats move in the world. So I got some functionality for that in.

* The dripping water from the ceilings would be much more intense in small rooms, because it worked by picking a random ceiling tile every now and then and creating a water drip at it. Smaller ceiling, more concentrated dripping. I fixed this so the ceiling dripping appears a bit more even.

* You could wait at a shortcut entrance and eat an infinity of bats as they popped out of it. This obviously kind of broke the game. The hack I put in place is that bats now shoot out of shortcuts pretty fast, and have a few frames of "uncatchability" - the in canon idea being that they're swishing out of there too fast to catch or something.

* There was an error with effect colors (colors on plants, signs etc) where the last room's effect color would carry over when moving between rooms. Fixed that.

* Some minor animation quirks with the player character ~ there are more of those, but they're not really game breaking so they don't have the absolutely highest priority.

* Made the debug stuff (ugly map and ugly mouse cursor) hideable with a button. Long time coming, this one!

* Made it so that you can start the game in any room in the world, hopefully making level design a bit less painful for James as he won't have to actually walk all the way to the level he's working with in order to try it out. 

So, that's one chunk of quirks down! The most scary stuff though, the lizard related glitches, I haven't gotten around to yet. Maybe tomorrow!





   jamesprimate on November 25, 2014, 07:19:14 AM:

So I take it the challenge rooms you can play in single player or multiplayer (after having had discovered them) will be tied to the "swarm rooms" then? I remember James I think saying the challenge levels are based around rooms with bats in them. 

still planning on that! though it looks like we are having some multi-screen swarm rooms, which would be impossible to do 4-player multi on, so im thinking rather than "every swarm room is also a multiplayer room" we maybe just choose the best ones (we will probably have QUITE A FEW to choose from) and make a bunch of multi-player specific ones down the road as well.

Many of the rooms seem to be open (as in, no ceiling), are bats capable of leaving one room this way and entering through another?

we just talked about this actually! i think it would be really cool for mood, but Joar rightly points out that it might break the usefulness of migration as a "guide". So we'll see? Maybe there is a clever way to do both. But I think we'll aim to get the build fun and functional first. (it is getting there though!)





   JLJac on November 26, 2014, 12:47:40 AM:

Update 364
Messing around with glitchy lizard behaviors. Introduced a few countermeasures against different getting stuck scenarios, and they do seem a little bit less prone to end up wiggling in some corner. Still a lot of those to hunt down though.

When I made levels, I'd keep the lizard AI in the back of my head and adapt the layouts quite a lot to cater to lizards. James, who hasn't programmed the lizards, made a bunch of levels that were more free-form, and he naturally gravitated to adapting them for slugcat platforming rather than lizard movement. This meant that the lizards would oftentimes end up isolated in sub sections of the rooms, because the intended connection to get out of there was designed for slugcat jumping and not accessible to the lizards.

Yesterday we had a little talk about this issue, and decided to work on it from both ends. So James has been adapting the level layouts a bit, and I have been doing some additions to the lizards movement. Among those additions are a few new ways for lizards to move between tiles that are available to them. For example, earlier a lizard could stretch across from one tile it was allowed in to another, across a third empty but non-allowed tile. This was very blocky though, as it would only be allowed in perfectly vertical or horizontal cases. Today I added a connection that goes 2 tiles vertical and 1 tile horizontal, or vice versa (like the knight in chess). These kind of additions enable the lizards to traverse more different kinds of terrain, and opens up the maps to them.

With James' level design adaptions and these changes, I think the lizards are going to become quite mobile throughout the world. However, we noticed that the isolated lizards had some benefits as well, as they gave us more control over lizard encounters. So now we'll try to find the perfect balance between penned-in and free roaming lizards.





   JLJac on November 26, 2014, 05:03:40 AM:

Update 365
Not been many gifs lately, so here's a little bonus. After digging in the lizard AI all day I decided to do something more fun, and implemented this hanging animation for the lower end of vertical poles:






   jamesprimate on November 26, 2014, 09:55:39 AM:

Update 365
Not been many gifs lately, so here's a little bonus. After digging in the lizard AI all day I decided to do something more fun, and implemented this hanging animation for the lower end of vertical poles:



oh man i love this so much hahah

SOME NOTES FROM THE LEVEL GEOMETRY SLAVE-PITS:

doing this first batch / region of rooms has been a really interesting process! in the previous build, the game was pretty simple structure-wise: gameplay was limited to 1 room at a time. those rooms are either platforming rooms or swarm rooms where you hunt bats. lizards were placed in a room and would stay there, sort of like a hazard, or they would be in swarm rooms to chase you around.


(from lingo build)

but now the lizards (and everything else) can move freely between rooms, so choices have to be made in level design to either box them in to certain areas (to create "an encounter" scenario) or to just let them do their thing and run amok. there is definitely a discussion like  "whats the point of this open-world "terrarium" concept you've been working on if you just box them in?", but probably for the first region at least we want to have SOME semblance of a difficulty gradient! we have a bit of a halfway mark in this first region because the species of lizards you encounter there have somewhat limited movement compared to the ones encountered later on, some of which can climb on structures that arent even accessible to the slugcat, etc.

But still its pretty funny because if you change ONE tiny thing in a room geometry (extend a pole here, or switch the order of room exits, etc), suddenly lizards over-run a whole new territory that you hadn't predicted:


(new build 141125)

So you have to make a tiny little change, then play through the build a few times to get a sense of how they are reacting to that change, then repeat. over and over. lizard herding! they are stubborn and temperamental just like cats! if you build them some nice room to play in, instead they go climb your drapes, hahaha!





   JLJac on November 27, 2014, 03:17:51 AM:

Update 365
Item placement in the world... Made it so that the level editor saves item placements, and the game then puts the items in the level. The system isn't entirely done yet, as it can't differentiate between rocks and spears. What I have been able to finish is some re-working of the entity ID stuff. The reason this was needed was that for items, I wanted to be able to delete the item entirely, and re-create it, having the game still be aware that it's the same item.

My solution for this was to assign items ID's based in their placement in the world. So the item ID is just an integer that's 10 000 times the room index, plus the item placement in the room. I calculated that the 32 bit integer range should be larger than 10 000^2, meaning that the system would allow for ten thousand rooms with ten thousand items in each without mixing them up. Am I correct?

Then the ID also has the old system running in separate, which just ticks up as new objects are instantiated, and for an ID comparison to return true both the "original spawn location number" and the "ticking upwards number" have to match, meaning that the game can't mistake some spear for some bat or something because of random chance.

Ok, so why create this elaborate system? The idea is that now I don't have to save the position of every rock and spear in the entire world, I can just save the fact that they're moved when they're moved. The system works like this~

As a room is realized, it goes by all the rocks and spears that are supposedly in that room. It creates an instance for each of them, giving that instance an ID based on the spawn position. Then it adds them all to a global Misplaced Items list.

When the room is again abstracted, it checks all the items in the room - from the item's ID it can calculate the item's supposed spawn position. If the item is on its spawn position, the item is removed from the Misplaced Items list, and then the instance is removed as well. But say one item has moved, a spear picked up by the player. As that one isn't on its correct spot, it will remain on the Misplaced Items list. The room is then unloaded.

Later the same room is loaded again. As it goes by the items that should spawn in the room, it checks the missing items list for each one of them. The spear is on there! So the spear is not placed in the room. Instead, the game is keeping track of the spear somewhere else.

There's one of each item, and only one, but always one! At least that's the idea, after all the bugs have been squashed. The cool thing is that as the random seed for the items' look is based on the ID, the same item will always look the same.

Other than that, I've done a little bit more of lizard behavior cleanup. It really gets to me not being able to save and load the state of a lizard. Whenever they do some buggy behavior, I have to guess what they're doing, and then guess the solution, and then hope that whatever I did actually solved it. In the lingo environment (which was worse in every other way, but this one thing was cool) I could save every variable in a lizard object to a text file, meaning that when I saw a lizard doing something stupid I could hit a button to save that stupidity, and then have that little moment captured. I could then load it and diagnose it, and mess with it until it worked again. Really nice!

I know that in theory I could do that here too, if I made the lizard class serializable. Problem is that last time I tried serialization, every object that was referenced by the serialized object also had to be serializable. And my game is super interconnected, so I see no way of accomplishing that without making exactly everything serializable, and just save the entire game state.

Maybe that's a good idea? Is that how quick save works? Is there some quick way of trying that out, that doesn't mean pasting [Serializable] in every single class?





   JLJac on December 01, 2014, 12:48:49 AM:

The difficulty of distinction between rock and spear makes me interested in the underlying system, code-wise.
As they share basically all behavior, except from some getting stuck stuff with spears, I didn't bother with any inheritance or stuff like that, but just made them have a parameter deciding which one they are.

Your text editor doesn't do multi-file search/replace?

Also it looks like C# has a [NonSerializable] attribute, so you could mark only a couple of fields serializable, and expand it later...?
Hm... you mean I should search for "public class " and replace it with "[Serializable] public class " everywhere? Seems a bit risky, but if I do a backup of my project first it might be worth a try!

Update 366
Got rid of a weird bug where a lizard would get stuck on top of something, typically like a box, and never jump down. The code was meant to make it so that they shouldn't jump off ledges to places from where they wouldn't be able to get back to their den - but they should only be concerned about getting back to where they are if there's actually a den where they are, the barren top side of a box should be left behind without second though. It seems to have worked out, now they don't hesitate to jump down and continue hunting you.

Also did some work on their behavior in relationship to going into their dens as rain approaches. Basically what happened was that they have a simple AI for when they're abstracted, and a complex one for when they're realized in the room - these two would disagree some times. The "actual" AI would tell the lizard to go home to its hole, but once there the abstract AI would spit it out in the world again, and so it would continue. My solution was making it so that the abstract AI asks if there is a realized AI at play, and in that case outsources the decision to it. Only if the creature is fully abstract the abstract AI makes the decision itself. It seems to work, but I haven't done enough observation to know 100% just yet.

Oh, and the stunned face/dead face are back in:








   JLJac on December 02, 2014, 05:10:50 AM:

Update 367
Remember the bat chains? They're working their way back.



A tad too elastic-looking, probably? Will need some tweaking.





   jamesprimate on December 02, 2014, 09:53:48 AM:

Update 367
Remember the bat chains? They're working their way back.



A tad too elastic-looking, probably? Will need some tweaking.

looks great! i dont mind the elastic quality at all. LOVE the ceiling to pole chain transfer though! WOW





   JLJac on December 03, 2014, 12:18:24 AM:

Update 368

The little blinking number is back:



Together with a whole bunch of other stuff. We're working on a somewhat playable alpha, so I got some introduction screens in, as well as the game recognizing when you've died, displaying a message and restarting if you hit enter. There's also a win condition that's as simple as can be - return to the starting room with a certain number of flies eaten.

Also, flies + rock/spear collision finally in, that was a long time coming! Still don't have it so they can be impaled on the spear, but there are so many little details like that so it doesn't really feel smart to get caught up in them. Game relevant mechanics first, then details.






   JLJac on December 04, 2014, 03:08:49 AM:

Update 369
Messing about with the lizards for most of the day, just trying some stuff and fixing little details. Then I moved on to drawing some sketches of a new creature (!) but I still don't feel ready to start implementing it. However, I do feel ready to start implementing leeches in the water, because I basically know what I want them to be like - so I got started on that. No gifs yet as they still just look like red swimming boxes, but maybe tomorrow I'll have something fun to show you Smiley

The next area James is moving on to is one with some water stuff going on, so I might do a few water related things now for a couple of days to give him the tools to play with that.





   JLJac on December 04, 2014, 07:47:48 PM:

Yeah, the idea of leeches came up when James and I discussed the implications of the recently added water. We really liked swimming around, but we wanted the water to be an exception from ordinary gameplay - we didn't want the game to become a Swimming Game. So we decided to add some creature that is in most of the water, and makes it a bit uncomfortable and dangerous to be there.

Update 370

Swimming just became a whole lot less comfortable  Shocked



I originally planned to make them more as a fish/leech hybrid, with a bit of a head, but when I got the triangle mesh for the body in I liked the leechy softness of it so much that I went with a more conventional leech. Too boring? I could spice them up a bit with some more alien element as well.

They're not entirely done, but pretty much so. I want to have them crawl along floors if they end up out of the water, and they should air-drown after a little while as well. Also they need to respond to the rain cycle, and they need to forget targets that have been out of the water for a little while. They should also probably give up on a target that has been dead and leeched for a while, or one single dead creature will make an entire body of water safe for ever.

Aaaand the big, boring thing - I need to write some kind of framework for "a thing being stuck to another thing" in order to have these leeches follow you between rooms. That same framework would then be applied to make bats stick on spears, and then it'd probably make sense to throw out the old "spear stuck in creature" hack and use this new thing instead.

I thought I could make a special case for only spears, but I've come to realize that the game has quite a lot of things being stuck on other things, so the engine probably needs to be able to handle that.

Back to the leeches - they don't actually hurt you themselves, they just weight you down. If enough of them attach you'll drown. On one hand I like this, because it creates a very visual "health" system where you can see how many of them are attached - 4 or 5 is usually enough to do you in. Once you get out of the water your "health" is reset by the leeches detaching themselves. The problem with this system is that 1 or 2 can never be an actual threat, only an annoyance as they impede your movement a bit.

Maybe that's not too big of a problem though. Especially as I imagine a situation with 1 or 2 of them as being pretty rare, in most cases I imagine a body of water as either having leeches or not, and if it has them they'll appear in schools of 10-20 or the like.

Catch ya later, I'm off to feed some lizards to the leeches  Evil





   JLJac on December 05, 2014, 02:07:54 AM:

Update 371



Leech land behavior is in now, though very simple. This creature really has no AI, it just works on some very simple rules and has some swarming behavior going on. On land it moves either left or right, hoping to fall back in the water. If it hits a wall it'll reverse its direction. After a while it'll dry out and die.

In the gif you can kind of see how I'm having trouble getting out of the water. This is the main danger of the leeches, they'll weight you down. The effect gets a bit of a bonus in water, but is also present when you've gotten out - jumps are a little weaker, you glide down poles, etc.





   JLJac on December 05, 2014, 02:36:08 AM (Last Edit: December 05, 2014, 02:48:53 AM):

That sounds like a good setup!

Hahahaha yeah, the bats sometimes play at the water surface, and several times I've seen the leeches get them  Cheesy
It's really funny, because the bat will try to fly a little bit but the leech is way too heavy. I should probably add a weak "afraid" relationship between then bat and leech.

Edit: Gif! Added the little afraid relationship, as you can see by the first bat which almost gets caught and then freaks out and gets out of there.





   jamesprimate on December 05, 2014, 03:05:05 AM:

OH MY GOD. leeches eating bats. this is amazing.





   JLJac on December 08, 2014, 03:20:04 AM:

Thanks Smiley

Update 372

Waterfalls! Note, work in progress ~ I could still be happier with how it looks under the water line. Things are becoming tricky, as I have like 4 different shaders colliding and overlapping here. The dark bubbles under the surface would be a lighter color if I could choose freely, but I have to draw them in the default sprite layer, and then they'll also get the default underwater color. I'll try to mess around with it some more in the future, but this seems good enough as a place holder to get James started with the new watery area.



The left one is a standard waterfall, as I imagine most of them will look. The right one is a weaker one that's a bit broken up, I want this for cosmetic purposes. The standard one looks very square, so the weaker one can be used to make a room look more alive. Both of them could use some more work though! Let me know if you have any tips Smiley

Right now the waterfall affects you while you're in the water - if you're close to the surface it'll pull you in and push you down, further down it will push you down and away. Above water it's purely cosmetic, you don't collide with it but move "in front of it". I'm contemplating making it so that the waterfall hits creatures above water as well, and pushes them down. There are a few things to consider here though. First of all, could I make the creature/water interaction look good enough to be happy with it? It'd want some kind of water splatter, and that seems very difficult to implement in a way that looks good. Also the waterfall should probably be affected somehow. This could probably be accomplished by breaking the sprite up in two where the creature breaks the waterfall, and use the weak shader (right in the images above) below that point. But there are also gameplay implications. Waterfalls generally cut rooms up horizontally, and if they are (somewhat) an obstacle, rooms might feel claustrophobic as you'll find yourself locked into little cells without freedom of movement. This might be okay for the player, but lighter creatures such as bats will get pushed around more by the waterfalls, and be even more limited as a consequence. Bat movement might be incredibly limited if the room is cut up by vertical barriers that the player can move through but the bats can't. So, still thinking about that one. Will consult with James and get back!

In shader news, you might notice a some water glimmer on the walls. Adds some atmosphere according to me! I'm really going crazy with the shaders here, but this one is actually not baked into the main shader, it's just a sprite that's placed on top of everything. So some graphics options can easily be implemented where that sprite is simply not created, and the GPU can be spared some pain and suffering. The effect is not for an entire room, but only above water surfaces and extending a few hundred pixels upwards.

And yeah, I made the leeches red!



An artistic decision I guess. Almost every creature is black already, and it felt nice to spice the leeches up a bit. I really like the contrast between the red leeches and this green water here - it feels a bit more fun and unexpected than just black. Also, the leeches spend most of their time deep under water, where you won't see their color, so it becomes a bit of a surprise when they get closer to the surface.

When they're out of the water for a while they slowly turn black before dying of dehydration.

We were talking about perhaps having both black leeches and red leeches, and giving them slightly different properties, and that's not entirely out of the question, but probably a later issue.





   JLJac on December 08, 2014, 04:34:53 PM:

Hm, well, rather the opposite in that case. When the cycle starts all the rain water would be draining away, so then you'd see a lot of running water, but later it'd be less and less during the dry spell. This would require the waterfalls to be no-collision though, as we took the decision to have static terrain a couple of months ago when the AI started using pre baked map data.

Bringing the update to the next page.

Thanks Smiley

Update 372

Waterfalls! Note, work in progress ~ I could still be happier with how it looks under the water line. Things are becoming tricky, as I have like 4 different shaders colliding and overlapping here. The dark bubbles under the surface would be a lighter color if I could choose freely, but I have to draw them in the default sprite layer, and then they'll also get the default underwater color. I'll try to mess around with it some more in the future, but this seems good enough as a place holder to get James started with the new watery area.



The left one is a standard waterfall, as I imagine most of them will look. The right one is a weaker one that's a bit broken up, I want this for cosmetic purposes. The standard one looks very square, so the weaker one can be used to make a room look more alive. Both of them could use some more work though! Let me know if you have any tips Smiley

Right now the waterfall affects you while you're in the water - if you're close to the surface it'll pull you in and push you down, further down it will push you down and away. Above water it's purely cosmetic, you don't collide with it but move "in front of it". I'm contemplating making it so that the waterfall hits creatures above water as well, and pushes them down. There are a few things to consider here though. First of all, could I make the creature/water interaction look good enough to be happy with it? It'd want some kind of water splatter, and that seems very difficult to implement in a way that looks good. Also the waterfall should probably be affected somehow. This could probably be accomplished by breaking the sprite up in two where the creature breaks the waterfall, and use the weak shader (right in the images above) below that point. But there are also gameplay implications. Waterfalls generally cut rooms up horizontally, and if they are (somewhat) an obstacle, rooms might feel claustrophobic as you'll find yourself locked into little cells without freedom of movement. This might be okay for the player, but lighter creatures such as bats will get pushed around more by the waterfalls, and be even more limited as a consequence. Bat movement might be incredibly limited if the room is cut up by vertical barriers that the player can move through but the bats can't. So, still thinking about that one. Will consult with James and get back!

In shader news, you might notice a some water glimmer on the walls. Adds some atmosphere according to me! I'm really going crazy with the shaders here, but this one is actually not baked into the main shader, it's just a sprite that's placed on top of everything. So some graphics options can easily be implemented where that sprite is simply not created, and the GPU can be spared some pain and suffering. The effect is not for an entire room, but only above water surfaces and extending a few hundred pixels upwards.

And yeah, I made the leeches red!



An artistic decision I guess. Almost every creature is black already, and it felt nice to spice the leeches up a bit. I really like the contrast between the red leeches and this green water here - it feels a bit more fun and unexpected than just black. Also, the leeches spend most of their time deep under water, where you won't see their color, so it becomes a bit of a surprise when they get closer to the surface.

When they're out of the water for a while they slowly turn black before dying of dehydration.

We were talking about perhaps having both black leeches and red leeches, and giving them slightly different properties, and that's not entirely out of the question, but probably a later issue.





   JLJac on December 09, 2014, 12:25:31 AM:

Update 373

Making tiles for the new region. It's very time consuming, because of of the several layers of each tile.





   jamesprimate on December 09, 2014, 12:46:59 AM:

Update 373

Making tiles for the new region. It's very time consuming


SOOORRRRRYYYYYYYYYY





   jamesprimate on December 09, 2014, 02:15:33 PM:

CHRIS!

You've been doing hard work and we appreciate it man  Toast Right





   jamesprimate on December 10, 2014, 02:51:58 AM (Last Edit: December 10, 2014, 03:06:07 AM):

Little update: bad week edition

Had some minor disasters hit the rain world team the past few days. Joar is out sick, so he's taking some time off, and I got a little taste of rain world in real life with... my apartment flooding Cry Yikes! All is well now, but things may be a little slow this week

So anyway, in the mean time let me go into what I've been up to with the levels and world design. We've made some solid progress into the second region of Rain World, "Drainage System", which as the name implies is a kind of pervasive sewer that spans the near-surface subterranean and connects a few key regions. It is huge rusted pipes, aqueducts and contained water elements, etc., to creep and crawl through.


(Larger: https://i.imgur.com/iJ1i7MC.png)

We've been spending some time getting the mood right, showcasing Joar's work with the water physics, ambient water lighting, the new waterfall element, etc., and i think it has paid off hugely, producing a really distinct vibe


(Larger: https://i.imgur.com/Y8rQ4JO.png)

and then of course we infest the area with nasty leeches!


(Larger: https://i.imgur.com/2phC9zC.png)

Lizards will also be in this area, but probably confined to the parts closest to the surface, as they are afraid of water. (with very good reason  Evil)

Heroically, even after getting sick Joar was able to send me a new tileset for larger "inside pipe" environments, so I'll be experimenting with them the next few days. This is the principle area that will have "water surrounded by tiles", so Im trying to make the most of it!

edit: after posting one of the screenshots and then previewing the post, i noticed a tiling goof and corrected it. so thanks???





   jamesprimate on December 10, 2014, 03:29:23 AM:

no way man, thats gross





   jamesprimate on December 11, 2014, 09:54:54 PM (Last Edit: December 11, 2014, 10:04:53 PM):

Yep! thats the idea: each region is a little open-world metroidvania, usually with a few thematically linked sub-regions, and then the layout of the world is laid out in a similar fashion: world -> region -> sub-region -> room; mazes within mazes! there are 36 rooms for the first region, "suburban", and thats probably a bit more than they will be on average. This drainage area im working on now looks like it will probably be in the 20-something range, and a few might be even simpler than that. We'll see!

as for release date: only timelords know, but it certainly better be in 2015





   jamesprimate on December 11, 2014, 10:51:06 PM (Last Edit: December 11, 2014, 11:17:36 PM):

Yep! thats the idea: each region is a little open-world metroidvania, usually with a few thematically linked sub-regions, and then the layout of the world is laid out in a similar fashion: world -> region -> sub-region -> room; mazes within mazes! there are 36 rooms for the first region, "suburban", and thats probably a bit more than they will be on average. This drainage area im working on now looks like it will probably be in the 20-something range, and a few might be even simpler than that. We'll see!

as for release date: only timelords know, but it certainly better be in 2015
Awesome. That approach just sounds so good

Does one screen equal one room? Or can a "room" be larger, multi-screen areas?

a room can be (and often is) multiple screens, yes!

currently were hitting an integer limit at around 4 screens per "room" and only with certain dimensions, so down the line a bit Joar is going to be doing the tedious job of reworking the level editor to accommodate sizes beyond that (among other things), which he is understandably not looking forward to at all. the really large rooms only come into play later in the game, so we should be totally fine working within the current limitations for the next few regions at least.





   jamesprimate on December 13, 2014, 12:29:41 AM:

Hahah yes now imagine BUILDING it all  Epileptic

Regions should be fairly easy to tell, as not only are they built out of different materials/tiles (so they have their own look) and explore different gameplay aspects ("horizontal", "vertical", various flavors of "water region", "underground", "mazes", etc etc) but they will also have their own color distinct color palette! Joar just sent me this one for the Drainage System region, and man it is GORGEOUS:


Larger: https://i.imgur.com/P6FtdD2.png

Rusted pipes, weird greenish murky water, it sets the dank underground mood perfectly and adds so much to the atmosphere. Sometimes with all the programming and development nonsense, I forget he is originally a damn talented visual artist Tongue Im sure he'll talk about that palette a bit more when he's back in action (Feel better Joar!!)





   jamesprimate on December 13, 2014, 09:07:43 AM:

that is a really good question. the fluidity of the animation is tied to everything being per-pixel and attention being paid to that level of details, so scaling is pretty much out. plus, the unique way the rooms are created (30 layers of topography stacked, each with its own lines of perspective, which gives that kind of diorama-esque false 3d look) means that we cant just re-size the camera either, like you might do in a unity or game-maker type engine. so the solution we (eh, Joar) came up with is that basically were designing everything around a few key 16:9 and 4:3 resolutions simultaneously as to accommodate things like the PS Vita. Thats a bit tricky since it would necessarily include constantly taking that aspect into consideration for super basic things like object positioning within level geometries and even the screen switching mechanism, but seems to be working so far!

As for the soundtrack, I cant wait to start talking about that  Well, hello there!, but we need the game content to catch up first! Seems like we are getting there though. Im putting together what might be the last few rooms for the second region this weekend. Then only 10 more regions to go!  Droop





   jamesprimate on December 14, 2014, 08:53:54 AM (Last Edit: December 14, 2014, 09:00:30 AM):

We know two regions already: "Suburban" and "Drainage System". So there'll be 12 regions in the game?

thats the plan at present! in my mind, 12 regions allow exploration of all the permutations of mechanics (wont be too specific, because id like to surprise you with some of them!) but its a long way to go, so who knows if things might change Wink Right now my idea is to get the first few regions together (maybe the first 4) and see how it all feels connected, how much time it takes to get from place to place, etc., then take stock and use that info to tighten up the ideas for scope of the greater world. Then after I get the world all stapled together, of course Joar is going to do another pass to add some REAL ART CRED, hopefully some dynamic set pieces, etc etc.

There is still one potentially significant element, darkness, that we haven't even begun experimenting with how it will be implemented. So if/how that plays out will significantly effect the number of regions and the shape of the game world. BUT... honestly at this point its just "a thing ive been nagging Joar about", so who knows if it will actually pan out.

Please tell me we can get a playable build by Christmas  Beg
It would be the perfect present to the world

Wink





   jamesprimate on December 15, 2014, 08:19:43 AM:

i know you guys are gif starved...



html5: http://gfycat.com/DeadlyBaggyBluefintuna

showing off the new palette in action. check the ambient water lighting, new pipes, leeches, DS_A05 has it all. Kind of gives off a nice "terrarium" feel. Also on the right with the water coming out is a tile ive been begging Joar for: the spigot!!!!! behold its glory.






   jamesprimate on December 17, 2014, 03:03:10 AM:

Yeah how about releasing a terrarium screen saver before the end of the game Shocked
Free asset on unity to do that painlessly:
 https://www.assetstore.unity3d.com/en/#!/content/770
Who, Me?


I LOVE THIS IDEA!! Great suggestion!

I wonder if the leeches should have a lurking state, where they are more hidden, so you never know if the water is safe or not.

This is a good point. Are leeches always going to be hovering right around the surface of the water closest to the player? It doesn't seem like the player would even have a chance to venture far into water without immediately being weighed down by leeches. Maybe there could be a few more sluggish ones around the surface, & when they get their first bite the rest of the swarm is made alert to the player's presence in the water. All of the sudden a mass of writhing silhouettes appears from the pool floor ascending towards the player's location. Currently I wouldn't even think of water exploration knowing a mass of leeches is already prepared to sink me.

ah yes fear not! we've only been showing clips of the leeches once they are aware of your presence, as otherwise they are below the surface doing their thing and hard to make look good for the camera. unless they know where you are they just happily swim along and maybe hunt a bat or two.

also its not like the leeches are insta-kill! they are dangerous, but if you learn their behavior you can quickly, carefully swim through them (at some risk of course.) They wont be in every body of water either, just placed as hazard elements for rooms or if for some reason we want to limit a players time spent in a certain body of water. take this room for example:



the leeches only have access to the center tank, so in addition to navigating a series of underwater tubes without drowning, AND wall jumping challenges while racing the rain clock, you also have to deal with the possibility of falling into a vat of leeches which would slow you down further.

We're trying to avoid things like "dont fall into the spikes" and instead go with hazards that, while dangerous, you still can wriggle or fight your way out of.





   JLJac on December 18, 2014, 06:24:30 PM:

Hi everyone! I'm up and at it again!

@cwearly1, woooooooow  Shocked Thanks so much for the awesome work! That wiki is looking ace! I hope we'll be able to provide you with some more content to fill it with soon, hehe!

@tortoiseandcrow, yes, I agree very much on this. In the version from which the screenshot is taken, 3 layers of depth were allowed to render in front of the water, since then I've changed it to only 1, getting rid of most of the plants that show up in front of stuff. Other than that it's just about messing with the level renderer until the RNG decides to not place any plants in the first layer. When it comes to the brown color, that's because there's some light down there ~ we've talked about this and when we pass over the rooms again we'll make sure to get rid of that, but there's a lot of rooms so stuff end up lagging behind. But yeah, the idea is that it should be very dark down there, to further create the impression of a cross section rather than water being held in by a magic wall.

This is a very awkward situation graphically, as it's a prime example of 2D/3D colliding and not making sense together. But as I think James have mentioned this "water contained behind terrain" thing is going to be pretty much exclusive to this area, so we basically only have these 20 something rooms to handle making me think that we can try to mess around with the level renderer to solve the individual cases rather than try to come up with some huge universal solution.





   JLJac on December 19, 2014, 01:25:39 AM:

Update 374
Mostly maintenance work today ~ worked around some weirdness between shaders and futile unloading textures, and added the ability to place leeches in the world text file, enabling James to get to leech placement.

Other than that, some deep diving in the lizard AI. Sometimes I do some sort of aimless problem solving, where I just put the game in some situation and see what problems I can spot. When I spot them, I try to hunt them down and fix them, and in that process I generally spot around 6 200 881 more, so it's generally a process that can just go on for however long I allow it to.

This session I messed around with lizards looking for dens. For some reason they all started searching for dens immediately on spawn, even though they were literally crawling out of one, and I didn't like that as the den search is an expensive path finding operation. On top of that they also searched for a new den every time they entered a new room, which seemed pretty unnecessary. So I restricted that some, and noticed that the den finder wouldn't find a den that had the same coordinate as the creature searching, so I fixed that. And then I noticed that this new special case fed the critter a den position that had some nonsense tile position info as well, making it impossible to get to the den, so then I fixed that. You get the idea. This sort of stuff is not the most exciting, but by just combing over the game like this again and again I'm able to untangle it, make it run smoother and generally work.

In slightly more fun news, I added some water light flicker under water as well - thought it was missing below the surface:






   jamesprimate on December 21, 2014, 04:49:07 AM (Last Edit: December 21, 2014, 06:10:13 AM):

Joar would you be able to answer my question about how rain would work in subterranean regions? Would those areas progressively flood, forcing the player to seek shelter as the water is rising, all the while they're constantly facing the risk of drowning? I'm really curious now as to how the mechanic will be implemented for these unconventional level types. 

I think thats basically the idea, though any "flooding" would be somewhat superficial. There are some strict limits to how dynamic we can make the terrain using the current engine and toolset, so were just going to have to make it work as best we can. I think with some time spent, the effects will be pretty cool though.

Joar and I have talked about it, and it seems like there are a couple of ways we can do "rain kills you" underground, flooding being probably the most compelling of the bunch. Since we'll be doing a few non-standard environments, it stands to reason that each will probably have their own slightly different environment-specific way the rain kills you: perhaps flooding for underground regions, some combination of deadly wind and rain for aerial regions, crashing waves and surf for watery regions. Regardless, they will basically behave like the "rain killscreen", just with a different flavor of buildup. I think thats something that we'll want to do once the world is more stitched together, as it will probably mostly effects, shaders, dynamic lighting, screen shaking, etc.

On NeoGAF someone commented:
Quote
I really hope these guys put as much time into designing the levels and objectives as they have into the animation and game engine.
Perhaps Joar/James, you could talk a bit about how you go about designing the gameplay elements and level design? How objectives might work?

Hah, thats a pretty dang huge question! I guess one of the most important things for me when trying to conceptualize the world / level design is trying to keep the balance between the open world "terrarium" aspects and the need for, uh, actual gameplay. Like, sure there are platforming challenges and puzzle-esque rooms, but its not "stage 1 complete! now go to stage 2!" sort of thing. What we'd LIKE to do is make the game playable however, rewarding whatever way you can survive within the game mechanics. Like, you could run around the map and follow the various trails of breadcrumbs, or you could just get really good at hunting bats and finding shelters and both would be totally valid ways of playing, each with their own narrative path.

Another thing we are trying to do is keep "fetch" style gameplay to an absolute minimum. With platformers, if you want to move a character around an open map there has to be a touch of that, but we want to keep it very organic. So, ideally what we'd like to do is have the progression be mostly skill level based. I dont mean "level 21 slugcat", just that as your knowledge of the world and your skill with the character improves, more areas open up to you, you know this or that trick to getting to a higher ledge, or have learned enough about how some challenging creature blocking a path behaves to be able to navigate through it. So an experienced player starting a new game from scratch would have access to a much wider area of the world from the get-go.

BUT... honestly this is just game design philosophy rambling at this point. We have it mapped out on paper, but until its actually implemented and plays well, its all subject to change. Right now we are just finishing hacking together the terra firma of region 2! Our idea right now is to get 4 regions assembled into a nice large chunk, see whats working and what isnt, then plan it from there.

Hope that sort of answers your question!





   JLJac on December 22, 2014, 02:40:30 AM:

The rain is actually a timer and a game over screen, there's no way to get around that haha! I do try to work with it cosmetically, and maybe I'll do something context sensitive for underground areas making it look more like death by flooding rather than actual rain fall - buuuut it'd be a cosmetically different game over screen, not really different in terms of game mechanics.

When it comes to priorities, the chosen path here is prioritizing creatures and creature interactions rather than rain stuff. The rain exists as an important background motif in the world, but is not really a prominent mechanic, if that makes sense. That said, I wouldn't rule anything out. Theoretically we could do rising water, for example. But in order to have a flooding room that looks really good there'd have to be some actual water physics going on, and that seems like it would be the main focus of a game (McMillens "Spewer", for example) rather than just a side feature.

So, yeah, I'll try to make the rain and water stuff cool, but it's not my main priority - I'm more interested in creatures.

As for level design / objectives, that's as much James' desk as it gets, and I don't really have anything to add to his answer. We're really just starting to get a feel for it - James is slaving away with the level editor and is getting close to finishing a second region (if finish is the word, we'll probably re-visit pretty much everything as the actual big world starts to come together). There are pretty significant differences between how the first region he made played and the current one, so things are moving quickly and changing fast right now. The first region is obviously a bit of a special case by virtue of being the first - it's more of a canvas to try the brushes on so to speak. So yeah, as James says, when we have 3 or 4 regions playable we'll know way more about that stuff than we do now.

Update 375
Spent the morning making a dev tool that has been a long time coming - a "accessibility visualizer" which is basically a flood fill using a selected creature's movement specs. You select a creature, say Blue Lizard, then you click a tile, and it flood fills out from there to everywhere that is reachable from the original tile if you move as a blue lizard. I think this will come in quite handy, as you can now get a very clear visualization of whether certain areas in a room are reachable to a certain creature, and even get a hint of what to change in the geometry to open it up. Often quite minor changes enables the creatures to reach much larger areas.

With this new tool, some of the lizards' stupid movement restrictions became too jarring, and I had to spend some time with that. So now lizards can move diagonally between tiles if necessary, and also drop down to surfaces that are not perfectly below the drop point. This latter change means that a lizard can drop from a platform to a platform below it that is aligned with the above platform, if that makes sense. Like, steer back in under it's previous position a little bit while falling. This opens up quite a lot of new terrain to them.

Lastly today, I started on a new creature - the first backer suggestion actually! It's a snail inspired creature, which we though would work well with this watery region we're working on. Don't know exactly what it'll look like yet, but the basic framework is up.

It has become quite a process to create a new creature! It's almost 15 minutes of work to just introduce the  concept of a new creature to the game, with all the components that need to connect. But, once that's done, the modular design pattern I've got going seems to be working (I've really only gotten a glimpse of how usable it is today) and things start moving very quickly as powerful chunks of already written code are set in motion. Exciting stuff!





   jamesprimate on December 22, 2014, 02:37:13 PM:

oh yes! i should probably post links to the BIG EXCITING HOLIDAY UPDATE!

https://www.kickstarter.com/projects/rain-world/project-rain-world/posts/1070310

it has:
* new video
* details on the alpha
* slow mo button
* more info on the new region
* leeches recap
* a slugcat in a santa hat






   jamesprimate on December 22, 2014, 07:39:19 PM:

oh you guysssss... well im glad that the progress is looking good enough that mozart is the most contentious part of the update, haha! ;]

the video initially had another audio track, but i wasnt happy with it. after all the video updates we've done, i dont have many "trailer suitable" rain world tunes laying around! didnt have time to do another before posting, so i switched it to a little wolfgang amadeus! i agree with gimmy though, i thought it was nice Tongue






   jamesprimate on December 22, 2014, 08:48:33 PM:

I forgot you have a copy of the old alpha OST! Haha. Well this is a good question for you then: which tracks do you like best from the alpha music?  The scope of the game has changed quite a bit since then, so who knows how much of that we'll wind up using, but always good to hear what people like :D





   JLJac on December 23, 2014, 02:07:59 AM:

Update 376
Snails are coming along. Now they can crawl on walls, avoid each other, and otherwise mill about. I have given them shells, and decided that for this creature I want to start trying out the idea of randomizing some features using the creature ID as a seed. So right now shell color and size are randomized ~ don't know how much of this will make it to the final game, mostly just experimenting. Randomized colors look nice, but a bit "computery" - you can sort of see that it's a computer generated color scheme. I'll bring in more weighted randomization into the equation I think, and hopefully the color selection will get more artful qualities. In either case I'm happy with having a creature that's a bit more colorful, as quite a lot of the creatures in the game have dark color schemes.

Also, the snails' niche in rain world as a game has started to take shape. When you (or any other creature) move close to the snail it'll pull into its shell, and then start to vibrate and click. The vibrating and clicking gets more and more intense if you continue closing in on it, until it finally gives a kind of super sonic click, a little sound blast or tiny explosion. This pushes creatures away a bit, and can stun them. Could potentially be fun in multiplayer as well, if you manage do throw (maybe? Don't know yet to what extent you'll be able to pick up living creatures other than bats) a snail at another player, you could possibly create some trouble for them. Snails that are affected by other snails' clicks might decide to click themselves if they slam into a wall or something, so there can be some chain reactions going on.

But the real interesting part is how this interacts with water. The snail is amphibious, moving in and out of water as it wishes. The click is waaaay more powerful under water - right now I have it set to 5 times the radius/strength, which feels about right. This means that an irritated snail that's dropped into a body of water can stun pretty much everything that's unlucky enough to be swimming in there. And this brings us to the actual utility for the player - leeches hate these clicks. I have only just started on the snail/leech interaction, so I don't know yet if the leeches will actually flee from snails or if they'll just stupidly try to attack and then get wrecked, but in either case a snail should be able to clear out leeches pretty effectively.





   jamesprimate on December 23, 2014, 03:20:23 AM (Last Edit: December 23, 2014, 03:32:35 AM):

...so who knows how much of that we'll wind up using...

So practically all of this won't be making it in?




That's a shame. Will the newer music be thematically similar? What would the greatest differences be?

From that preview probably most will? A few of them CERTAINLY will, such as the last track which will be a reoccurring theme. Also multiplayer might wind up being a catch-all for the best of original OST tracks that for whatever reason dont make the jump to the new single player.

**WARNING: JAMES AUDIO RAMBLING AHEAD**

Idk, its a bit hard to talk about at this point since we dont yet have the the audio engine in place or the timing for the rain cycle decided on, we wont know that or the distances between shelters until we get more of the world built, etc etc. Things like "tempo of play" and "how much time it takes for the player to get from here to there" are huge factors in writing effective game music.

When I recorded the original batch of tracks (2 years ago!?), the game was pretty simple. everything happened by room: there were a few platforming rooms, then once you found a swarm room all the real action happened there, lizards, bats, etc. rain came every 2 minutes, so it was basically "write short tracks that would play when you got to a swarm rooms and while rushing back to your shelter, until the deafening rain sound overtakes it." The layout of the world map was even hub-and-spoke style, so we didnt even have to worry much about the musics replay-ability, as once you cleaned out that swarm room you'd likely not see that room again.

For the current version, while that essential mechanic is still fundamentally there, exploration has become a much larger component of the game. To capture the terrarium style and properly show off the AI, you now encounter creatures unexpectedly and bats migrate throughout the map. Swarm rooms arent locations at the end of a spoke, but nodes in a much larger network, etc etc. All things that alter the pace of play! Now we have a concept for a much more dynamic system for the music and audio based more by region, narrative and "event" than by swarm room.

Also *super important* is that the aesthetic of the game has evolved pretty significantly! It's easy to forget when you are watching the gradual shift of the devlog (over years 0_0), but I'm sure you could see how music that would work perfectly well for something like this:


would feel completely out of place for something like this:


even though the second is basically just the evolved current-build version of the first.

Long story short is that from my perspective, the music needs to be what takes into account the scope and pace of the game, adding a final layer of narrative and coherence, tying it all up. I would be totally derelict in my musical duties if I were to try to fit old music into a new game just because it was already written!





   jamesprimate on December 23, 2014, 03:48:30 PM:

Haha, I was just about to say that the humble email cannot come soon enough. Still waiting, betting others are too. Hope I see it before bed time Coffee

Man, after all this time, waiting for that Humble email is agonizing

Anyone play the alpha yet? Any impressions?

is out! if the link in the email gives you any trouble, try the one from the actual update page it should work: https://www.humblebundle.com/resender






   jamesprimate on December 23, 2014, 07:38:06 PM:

Welp, didn't take too long to figure out how to manipulate the game...

10-second rain cycle. Bahaha.
Oh, also made it that I didn't need any bats to win, soooo, wooohoo! Tongue

OH MY GOOOOD!
If you put "1" in the setup text file for each color, you spawn with one of each lizard! AHHH!

ROFL, here it goes  Cheesy

I'm sure there's some way to balance it.
Are bats supposed to get impaled on spikes? They keep shooting down out of a shortcut onto a spike pit & dying, despawning moments later.

Wait, it appears they touch the spikes on one side of the room & spawn out of the spikes on the other side of the room.

i was wondering what you meant by spikes... thats "bat grass"! its like their nesting grounds. and as you have observed, they can travel through it. clever bats...





   JLJac on December 23, 2014, 11:20:21 PM:

Glad you guys are having fun with the build :D It is pretty rough, as I'm sure you've noticed, but I'm glad you're finding some enjoyment in it!

@Christian, thanks for the feedback! Agreed on pretty much all points. Addressing some of your concerns ~ the controls for grabbing a pole is actually only up, not x+up. Hope that makes it easier for you! Grabbing mid air is supposed to be a bit tricky, but both James and I have gotten really good at it so it's possible that we have too much of that element in such an early area. You can't enter the "standing on pole" animation from the air, you have to grab the pole with your hands and then get back up. Eating bats - yeah... The idea is that you shouldn't be able to eat them in the heat of battle, making them feel more like prey rather than "collectible". I like the animal-like feeling of scurrying to some safe corner with your collected food to quickly munch it down. But maybe the eating should be a bit faster to make it less intrusive on the tempo. White shader bug will definitely be fixed! When I have final versions of all the shaders I'll write light versions of them for older machines.

Wall run is something I'll consider.

If you put "1" in the setup text file for each color, you spawn with one of each lizard! AHHH!

There are also other numbers except from 1 ... Also, the level name at the top of the file allows you to spawn wherever in the world. Not that I encourage shenanigans with setup.txt, but have fun  Cheesy

As for lizards camping at room entrances, I actually have a fix for that in the pipeline - there'll be a timer that keep them from biting you right after they spot you for the first time, giving you a split second to get back into the shortcut again. The lizard will pursue you, but it won't be an inevitable insta-death. When it comes to stuff like this in general, things that make the gameplay smoother, there are like a million things to add, several of which I have solutions for in mind but haven't gotten around to implementing.

Update 377

Don't antagonize the snails!



The body/animation of the snail isn't done yet, still working with the head / tail / limbs / pretty much everything. Animating creatures really is the big time sink in RW development, but creature animation is also our main selling point, so I guess that's OK.

And in slow motion:



The game is screaming for audio at this point! Would really like to see what these effects feel like with some juicy samples to go with them.





   jamesprimate on December 24, 2014, 03:05:42 AM:


Don't antagonize the snails!



The body/animation of the snail isn't done yet, still working with the head / tail / limbs / pretty much everything. Animating creatures really is the big time sink in RW development, but creature animation is also our main selling point, so I guess that's OK.

And in slow motion:




OH MAN! that shader (?) sonic shockwave is sooooooooooooooooooooo awesome :O

Quote
The game is screaming for audio at this point! Would really like to see what these effects feel like with some juicy samples to go with them.

ok lets do it! hell, if we get the audio engine in, i could probably get a good amount of the basic audio stuff done just while im waiting for these multi-screen rooms to render Tongue





   jamesprimate on December 24, 2014, 08:41:33 AM (Last Edit: December 24, 2014, 08:51:10 AM):

The controls are something we'll definitely want to spend some solid time on down the line, once we have a good sense of what will be needed. There will also be a bunch more "slugcat moves" as well, which will factor into all that.

But also I think its important to retain a degree of difficulty when navigating the environment. There should be a sense in the tactile experience of the game that life as a slugcat is *difficult*. Everything should be slightly to big for you to comfortably climb up, slightly too far to jump to without sufficient skill. Minor mistakes should potentially have consequences. You should constantly feel out of place, outnumbered and out gunned. And if you can't get up to a ledge comfortably, then perhaps you dont want to encounter whats beyond it yet! Then as you get used to the timings and rhythm, develop the more advanced tricks and techniques, then the world naturally begins to open up to you.

Buuuuut were not quite there yet Wink





   jamesprimate on December 24, 2014, 11:15:47 AM:

Is there any way to survive the rain at the moment?

yep! simple win condition for this alpha: just eat 7 bats and make it back to your den before the rain.

In other news, chugging along in level design toward some of the more industrial / urban inspired areas:






   jamesprimate on December 24, 2014, 11:33:24 AM:

yep! just the one for now. we haven't implemented multiple dens yet, as its one of those "bunch of puzzle pieces coming together" bits. i think we'll want to do that for our next milestone when we start to connect up the multiple regions? but first we have to MAKE those regions and maybe sort out one or two design things.

for the alpha, all bat nests are raidable and possible to "beat", though you may have to discover some tricky paths back and forth Wink





   jamesprimate on December 24, 2014, 12:05:18 PM:

awww poor shader bug Sad Might as well make it count: Christian, whats your GPU specs? Which shader model does it support? http://compactiongames.about.com/od/systemrequirements/a/How-To-Determine-Direct-X-Version-And-Shader-Model-You-Are-Running.htm

and yes, falling offscreen to death is intentional





   jamesprimate on December 24, 2014, 12:56:02 PM (Last Edit: December 24, 2014, 01:06:00 PM):

HM, well SUPPOSEDLY those cards can go up to shader model 4, so maybe try to update: http://www.intel.com/p/en_US/support/detect

but yeah, those intel "hd graphics" cards... Sad

Talked with Joar about this last night, and he is going to try to do a lighter version of the shaders down the line a bit, but probably not until the game is nearing completion. sorry! :/





   JLJac on December 26, 2014, 05:30:26 AM:

Hi everybody! Took a day off yesterday, but now I'm back at it  Hand Thumbs Up Right

@shader bug, my theory is that it's a rounding error - I had much agony before because the shaders rounded differently depending on some arbitrary factors. If it is as I think, the leftmost row of pixels in the palette texture, which are the black colors, get their references rounded down to -1, and then the coordinate wraps to the right edge and grabs some white color over there. If such is the case, some other stuff should have weird colors as well because of a consistent one pixel shift of the palette - for example the water should look really crazy. Alas, until I have my hands on a machine that is actually producing the error it's not easy to fix it Sad

@slugcat corpse being thrown across the room bug, I've noticed it! Because it happens after you're already dead and doesn't really have gameplay impact it hasn't ended up on the top of my list, but I'm on it!

@slugcat posthumously eating flies, I'm on it >___< Though note that you don't always die just because a lizard grabs you. It's a 50% chance I think, if the text at the bottom of the screen doesn't show up you're not actually dead yet. In the old version it was a lot of fun in multiplayer to rescue each other from the lizards, but I don't want you to feel totally comfortable and in control when lizards bite you, why I added the wheel of fortune aspect.

@christian, the first row in setup.txt defines what room you'll spawn in - you can go in the levels folder and get the names of the rooms. Thought you might want to have some more space when doing lizard arena fights. Yeah, red and yellow, and maybe we throw in some surprise. Also, white as it's implemented in the game currently is actually nowhere close to where it will eventually go - in the lingo build the white one was fundamentally different in its behavior using camouflage and a passive hunting technique rather than chasing you. Now it's basically just a variation on the blue one. Yup, spear option creates rocks because of some debug stuff I forgot to comment out Sad Try changing spawn location to a room with spears instead. You can't dual wield spears, they occupy "one and a half" slots, meaning that you can carry a spear and a small item, but not two spears.

Update 378
A lot of miscellaneous messing around with the snails today. Gave them some eyes, and the ability to look at other creatures, which added a lot of personality to them. Made them able to seek shelter in dens as the rain approaches. Created the entire snail/leech interaction, which took a bit of fine tuning, but I think it's somewhere in the neighborhood of where I want it by now. Basically, snails prefer not to be in water if there are leeches, but in many situations it's possible to make them fall in and interact with the leeches. Craziness ensues as the leeches try to flee from the snail's warning clicks, but don't get away quickly enough and get blasted by the sound wave thing. The funniest thing is when leeches flee towards the surface, and are then blasted from below making them fly all over the room.

Also, this weird issue:



Basically, the snails are supposed to be able to climb on some of the view-perpendicular walls that are not too far off into the z-dimension. All works fine, except from when the light angle is very slanted, in which case the shadow is offset to the degree where it's completely separated from the actual creature, making it look very distinctly like the creature is flying.

My horrible hack of a solution for this was to make the shader respect a specific color when asking about what pixels should be shadowed, but not when asking what pixels should be masked out. This means that every sprite of that color becomes a "ghost" that only exists as a shadow.

So, when the snails are climbing on walls I create an ugly blob on them and color it in that color, and then I extend it upwards at an angle and distance that matches the slant of the light. Now there is a piece of shadow connecting the snail and its shadow, making it look slightly more believable that it's actually holding on to that wall behind it.

In most situations the angle of the light isn't this extreme though, making it way less of a problem. But, the reason I'm mentioning this, is because I can imagine some other fun stuff that could be done with this.

Imagine for example if we have some flying creatures - by just recoloring them they could be made into shadows only. So then you could have like, the shadow of the creature move over the level in a super unnerving way, before it actually arrives flying itself. Theoretically all sorts of insanity could be created, such as having creatures in one room cast shadows on the wall in anther room and whatnot, but I don't know how far it's reasonable to go with that stuff. But obviously we should do something with it, as it's no more difficult than just changing the color of a sprite.





   jamesprimate on December 26, 2014, 05:54:04 AM (Last Edit: December 26, 2014, 06:00:16 AM):

Craziness ensues as the leeches try to flee from the snail's warning clicks, but don't get away quickly enough and get blasted by the sound wave thing. The funniest thing is when leeches flee towards the surface, and are then blasted from below making them fly all over the room.

i cant stop laughing at this XD

For those of you who want to mess with Christians sandbox lizard battle royale, i suggest going into the setup.txt and entering in "SU_A01" where it says "level:", that should give you more space for your shenanigans!

Quote from: chris

James, I hope you don't object, but for those of us in Alpha I'm creating a reference map of Suburban. Here's what I got so far: http://i.imgur.com/K9WYz00.png (very large image, fyi, and will be bigger when finished).
After the official release, probably after 2-3 weeks, I'll upload this and the others to the Wiki for everyone. I think they'll be a nice addition. Shows the vastness, the detail, and can help new people navigate if they get hopelessly lost

YES! i would love love love to see this! i was hoping someone would. in addition to maybe helping players, it will be a good measure for us to see how much of the region people can uncover and make sense of. we've been debating if/how we want to deal with an in-game map (if any), so this would give us some good info.

Also, this region will likely be trimmed and cleaned up quite a bit in second round, so all the above would apply there too.





   JLJac on December 26, 2014, 06:01:37 AM:

Hahaha yeah, I'll send you a build soon! Should just make it so that you can place snails in the world first.

Also, programming architecture question:

I'm doing kind of a modular thing here, mostly when it comes to AI, where there's a pool of AI plugins that creatures can pull from - for example, path finding, threat tracking, prey tracking, rain clock, etc. The creature AI classes have some stuff going on in them, but mostly they act as a coordinator for these modules. "My prey tracker says there's some juicy prey over there! Path finder, find a path to there!" ~ like that.

Recently I've found myself wanting to give each of these classes an interface to go with it. Example. Today I implemented a class that allows a creature to look at other creatures - basically direct its gaze for cosmetic purposes. So it'll do a little evaluation of what other creatures it can see, which ones of those are the most interesting, etc.

So now I have the CreatureLooker class, and then a critter such as a lizard can have an AI that owns an instance of CreatureLooker. LizardAI can of course call functions and get publics in CreatureLooker, so communication that way is no problem. But sometimes CreatureLooker wants to ask LizardAI something as well ~ such as "As a float, how interesting do you find this particular creature?" to which the LizardAI can respond "I'm actually currently hunting that creature, so give it a super high value in the evaluation because I should probably turn my head towards this creature as I hunt it".

Please excuse the super silly dialogues, I find it easiest to explain that way.

As I have it set up now, there is the CreatureLooker class and the ILookingAtCreatures interface, and if LizardAI wants to own an instance of CreatureLooker it has to implement ILookingAtCreatures so that CreatureLooker can call HowInterestingIsThisCreature on it.

This works fine, and I keep the CreatureLooker and ILookingAtCreatures in the same file so it feels decently contained. But I just feel that there should be some even neater way to create two-way communication between classes. It bothers me to create both the class and the interface when in fact I never want the one to exist without the other. Is there some way to contain this functionality in just one single unit?





   jamesprimate on December 26, 2014, 06:42:27 PM:

i dont think so! for Christian's suggestion that line should just read "level: DS_A01", which will start you in that room but keep the rest of the world map. you could also edit the world to "world: 0", which would place you just in that room without the rest of the world existing.

but cmon we dont want to tell you TOO much about how to break the game, haha





   JLJac on December 27, 2014, 02:28:13 AM:

Looks like a nice day for a swim!  Hand Thumbs Up Left





   JLJac on December 27, 2014, 06:29:03 PM:

throw encapsulation out the window, make everything in lizardAI public, implement the method HowImportantIsThisGuy in the CreatureLooker itself, using the freely available contents of the LizardAI as the parent AI container. this way every helper method for particular AI modules can be implemented in the modules themselves, provided they have a reference to the AI container and that container allows these modules to access its data.

might not be the prettiest way, if you're making a well encapsulated library or smth, but, fortunately, you're not.
Hmmmm encapsulation is slowly but surely making its way out said window either way, but I don't necessarily want to speed that process up. At this point the project is becoming big and complex to the point where I have no chance to wrap my head around all of it at once, and the somewhat encapsulated modular design helps me with that. It enables me to think like "OK, this is the path finder. The code I look at here should find paths, nothing else."

For example, when the path finder work it asks the lizard AI about a travel preference for each tile. If the tile is close to a creature the lizard is scared of the AI will return a higher value, and the path finder will subsequently not favor paths through that area. Right now the path finder calls a method on the AI for each tile it evaluates ~ "what do you think about this tile? And this tile?" The AI can then look at the tiles one by one and answer what it thinks of them. Super many things factor in to that evaluation. The AI asks the Threat Tracker about perceived threats, then it asks the Tracker about where those threatening creatures are assumed to be, then it compares to the tile being evaluated. How scared the lizard is of rain at the moment is factored in, as well as how scared it is in general, if it's angry, etc etc.

If I threw encapsulation out the window and had all of that code happen in the pathfinder script the mess would be infinite. Especially as different species of creatures do these evaluations differently - I'd have to switch case on creature type, cast to the class I want, and then have pages upon pages of code in the same text file, haha~

Same with the CreatureLooker, and all the other modules I have. Some of their behaviors are shared, and those obviously belong in the actual class, but some of the behavior is creature specific, and I need some neat way to handle that.

So some degree of encapsulation is pretty much required at this point, or everything will spiral into insanity. I'd just like to know from you guys what degree of encapsulation you think is reasonable/comfortable, and how to best work with systems like that? Is there some go-to design pattern for two way communication between decently encapsulated modules?





   jamesprimate on December 27, 2014, 11:53:33 PM:

ah yes thats the downside of messing about in the setup.txt: one small thing out of place and you get wacky errors like pink screens!





   jamesprimate on December 28, 2014, 12:09:21 AM:

bahahah DS_A01 is nice for swimming, but id think you'd want SU_A01 or SU_B03 for lizard mayhem  Gentleman





   jamesprimate on December 28, 2014, 01:38:49 AM:

im not sure if you'll find this as funny as i did, but here is a room concept sketch done on the subway with my phone:



and then the eventual tiled / effected product WIP:



ehhh basically the same right?








   jamesprimate on December 28, 2014, 11:04:57 AM (Last Edit: December 28, 2014, 11:16:49 AM):

hah! well there ARE reasons we didnt include whites, yellows, reds and blues in the actual alpha gameplay...  Who, Me?

every creature wont work well in every room or region of course. its going to be a combination of that specific creature's AI/skillset and the specifics of the level design / spacing of the region in which that creature exist that will make it an effective "creature encounter". Each lizard isn't necessarily "fight it mano a mano in a room". Some are designed to chase you through multiple rooms or other pop up unexpectedly. Anything done messing with setup.txt is basically "debug mode" and wont take into consideration any of that context we're working to create, SO... I wouldn't take too many things you experience while breaking the alpha as reflective of how the game will actually wind up being!

we are planning on eventually also doing a sandbox mode where you CAN just throw critters (who you have unlocked) into a room to battle, but there will be rooms designed specifically for that too





   jamesprimate on December 28, 2014, 03:01:06 PM:

Sometimes I just watch for 5, 10 minutes as the horde dukes it out over my corpse while Green and White chase down a Blue. It's awesome seeing each lizard using its strengths to steal the slugcat corpse from one another. Purple is super tenacious and tries to retreat into vents and tunnels, White trying to reel the corpse away its tongue, while Green charges in with brute strength.

ok so need to make "slugcat corpse football mode" for lizards, noted! host a rain world version of salty bet. sounds good to me Hand Metal Right





   JLJac on December 28, 2014, 06:17:33 PM:

Hahaha yeah, guys, since you opened that setup.txt you're on your own! Nothing you see from that point were you really intended to see... So have fun, but don't think of the experience as representative.

Cool that you saw a green one hunt a pink one, I've never seen that happen and am actually a little confused about how it would happen o_0 I haven't implemented any such interaction yet. Maybe there's some line of code I forgot in there.

Adding lines to setup.txt won't really do anything more than create bugs, sadly, because the code on the receiving end of the text file does nothing but load the number on each line into an array. Also the game has no idea that there will ever be such a thing as a red lizard, as the creature template isn't defined yet. So, sorry, you'll have to break the game with what you have there already  Cheesy

When it comes to the white lizards knowing where shortcuts lead, I think I mentioned some time ago that I've made the decision to work under the assumption that the AI critters have omniscience of the level layouts. Path finding is really complicated and hard to work with already, and if you also added the complexity of tiles being unknown, and weighting between decisions like taking a known somewhat long path and exploring what could potentially be a shorter path, it would be hell. I literally couldn't do it. Or maybe I could, but in a game that was only and exclusively about that. Also, huuuuuge arrays of data would be required to save what terrain was known and unknown for each creature. And on top of all that I think the player impression would boil down to "the pathfinding is bad", haha!

If the lizard is waiting for you at the exit, why don't you try just popping right back in as soon as you arrive? If you're already holding the direction key to go back as you exit, they shouldn't be able to catch you.





   jamesprimate on December 29, 2014, 10:21:01 PM:

Joar is off to Thailand for a bit (im *quite* jealous), so you'll have to make do with me posting about levels in the meantime


larger: https://i.imgur.com/GcEsoLk.png





   JLJac on December 30, 2014, 06:40:35 AM:

As James is mentioning, I'm in a bit of a vacationy situation here! I seriously doubt I'll be able to stave off workoholism for several days though, so don't worry too much. However I do think that James is in a need for new tiles to work with when making levels, so maybe I'll give that a go the upcoming days rather than programming stuff. Things are chugging along!





   jamesprimate on December 30, 2014, 08:55:50 AM:

abandoned hotdog extraction fields. the desolation of rain world is a cautionary tale of what happens in sausage-based economies post peak-hotdog collapse.

@Gimym: PM'd you!





   jamesprimate on January 05, 2015, 03:32:23 AM (Last Edit: January 05, 2015, 03:40:51 AM):

thank you! happy new years to you guys too :D

nothing terribly exciting going on in rain world land the past few days. in between snorkeling in thailand ( Mock Anger ), Joar has been feeding me some pretty fantastic new tiles to work with plus making moves on a palette for the current region and possibly next one as well.

for me new tiles means a lot of time experimenting to see how they look / interact with previous tiles, figuring out how to best utilize them for the type of geometries were trying to explore in the region, etc. hopefully the end result being a distinct look and mood created just with the tiles. then joar slam dunks it with a unique color and lighting palette, like so:


detail: https://i.imgur.com/C87sCFQ.png

Joar would want you to know that the above palette is still very WIP, but im already in love with it.

the lighting and contrast for this region (now called "Heavy Industrial") is a bit tricky to nail down as many of the rooms blend inside and outside elements, so getting the right balance that will work for both aspects winds up being very dependent on the makeup of the individual rooms. so seems like it might be a bit of a back and forth. lookin good so far though  Hand Thumbs Up Right





   jamesprimate on January 07, 2015, 10:28:17 PM (Last Edit: January 07, 2015, 10:37:09 PM):

whats better than a slugcat? TWO SLUGCATS!



aka co-op multiplayer is now hooked up... in sort of a loose "slap it in the setup.txt" sense. but it works well and feels really fantastic to finally jump around this new world with a friend! even just goofing around with my GF to get footage was dang fun. its been quite some time since i felt that sense of joy when playing (hard to do when you know every single pixel, tick and bit!) so i am suuuuper happy with this new build. Thanks Joar!! Tears of Joy

also note the updated Heavy Industry palette, looks so nice and vaguely toxic Hand Thumbs Up Right



in this region im really trying to give a much larger impression of scale and weight to the rooms. these gifs are some of the earlier attempts, but should give you some indication.





   JLJac on January 09, 2015, 12:07:28 AM:

@AxezDNyde
Hey thanks! Yeah, I'm really happy about the near-surface distortion as well Smiley It's actually just the horizontal distortion that's present everywhere in the water that gets increased with an exponent near the surface. For the caustics (thanks for teaching me that word) - actually they are not the same color as the static highlights, it's just the gif format that bakes them together. So the wall distortion thing you saw is probably not as bad in the actual game. As for the shader cycle speed, I want it to somewhat work with a pretty still surface as well as with an upset surface that you're currently swimming through, so I settled for a medium-ish speed. I could have it change speed depending on how tall the waves are, but I do tend to get caught up in little cosmetics like this forever, so I try to move on from that stuff at a reasonable time and get back to actual gameplay programming. Especially as if I know myself, walking down that road would mean having the speed be locally affected by the water below that specific place, and that seems like trouble :S

@akryl9296
Awesome map! Smiley Bigger it's gonna be - this is one area of like, ten o___0 Remember also that this was the first area James did, so it's a bit experimental. Being the first area, and maybe the most loosely defined theme-wise, I'd bet that this particular one is going to go through some pretty damn big changes before release! Sorry to say when you've spent so much time on that map... Feedback is most welcome! Just remember that everything is super WIP. You can either post it here or PM me, depending on if you think it would be an interesting read to others as well Smiley






   jamesprimate on January 09, 2015, 02:05:15 AM:

I've been working on a map as well, and actually I just finished mine today: https://dl.dropboxusercontent.com/u/53786988/RWmap/map%201.0.png
8.1 MB, 6070x5374px. I like how big and complicated this region is - got myself lost more than few times, but always somehow ended up in region I knew and could get back to lair sooner or later. The way I see it now, it's good enough as it is despite few spots that need fixing. The bigger the better Smiley


ahh this is rad! im really interested to see how people visualize/organize the world geometry. in my head the world isnt necessarily constrained to a 2d flat surface, rather a side-perspective representation of a 3d world, so rooms sometimes connect in varying degrees of weird z-axis. but obviously thats going to be interpreted linearly, so its really cool to see how people make sense of it in that format, and honestly it helps me a lot.

as Joar was saying, the suburban region as seen in the alpha is little more than a starting point for constructing the world at large. i think its super important that the first region be pretty slick and impressive, so we plan on completely re-working it (and to a lesser degree the other regions as well) once we have the complete map assembled and have all of the tiles / effects / creatures at our disposal. it does serve a fairly specific structural function between 3 other regions so the general layout will probably remain somewhat the similar, but yeah the individual rooms are WIP to be sure. Just something to jump around in for a bit!  Hand Joystick Smiley Hand Any Key





   jamesprimate on January 09, 2015, 01:13:33 PM (Last Edit: January 09, 2015, 02:20:18 PM):

whoa thats quite the write-up, thanks for taking the time! as it will probably be for a little while, the answer to most of that is "eh, its an alpha movement demo", but its all good to keep in mind going forward. i'd like the to not to get TOO wrapped in of discussion of the many alpha foibles for that reason (though we'll be all about that sort of thing when we hit beta!) and because we prefer to keep the devlog on things we HAVE done rather than things we WILL do, but let me hit some individual ones:

1. one of the (many) game mechanics that aren't in the alpha is that once you eat bats and survive a cycle, the nest of bats that you caught them from is depleted the next round (possibly permanently?), forcing you further and further into the world to avoid starvation. the little 3 room lair area was kind of designed as "baby's first bat hunt" to let you catch some and learn the controls, but without the enforced scarcity you can just sit there camp bats of course! booooring. BUT then we could be lazy and not have to implement multiple slugcat shelters yet Wink

per some of your later questions on it, the rain cycle in general is pretty much just a mock-up at this stage.

2-7, 20-21. yep, controls are something that we will be spending some serious time on when the world is in a more feature-complete stage. There are a few aspects where we need to make some fairly significant design decisions on, which will inform how we tailor the controls (so no use messing with them until that point), but even from the lingo people have been on us about them XD

8,9. the crawlspaces are one of those design decisions i was walking about. as its planned now, some of the more challenging subterranean regions begin to focus on a more tight crawly maze-like game play style, but until we are there and actually messing around with the creatures and geometries that we'll be using, no use in messing with it.

Only somewhat related, but worth mentioning since were on the subject: crawling will not just be for entering tunnels, but also a "stealthed" silent movement which help you avoid AI detection, letting you sneak past predators and sneak up on prey.

10. no worries on that! there are around 20 notable creatures, plus various NPCs and decorative fauna planned. (though to a degree the bleakness IS an aspect we are going for?)

12,13,15,17,19. Plenty of work to do on the Lizard behavior for sure. Though I seriously doubt Joar will EVER get them to a place that he's 100% happy with them, haha. Although I have to take some of the blame for this, as the lizard AI reacts to the room geometries, and some of these alpha rooms are asking lizards to do things that they dont like to (sloped tiles, drops that are just out of their comfort zone, etc etc), which creates weird behavior.


James & Joar - Seeing it like that (though without having played the alpha), I am curious about the "death drops" that are on some screens.

this is a good question that im kind of dealing with now. right now in the level editor we are limited to rendering rooms of 3 screen heights max. very soon Joar is going to fix that, so i think that "fall off screen" death drops will then only be in certain regions where it's called for (aerial regions, tall towers or deep pits, etc), plus perhaps the occasional scattering of them here and there just to be mean. Then we'd obviously implement death if you fall a certain distance, etc., possibly anything greater than 2 screens. BUT the point being that in most cases the traversable world will be mapped out and visible, death pits and all.





   jamesprimate on January 09, 2015, 02:36:25 PM:

@jamesprimate: thanks for the answers Smiley With the stealth - I already noticed the lizards remember where they saw me last, and approach that region only. Hiding in tunnels helps avoid them until they calm down, but should they find me out - I'm dead, they're faster in tunnels than I am. That's why I mentioned the "tight spaces" - I meant tighter than standard tunnel, one that lizard can't fit into - would help survive, and since it's in map design, you still get to be mean here and there x)

totally a possibility! we will definitely be balancing the tunneling speed of the cat and other creatures for sure, plus possibly adding some sort of tunneling "move set" for the cat (heck, we haven't even discussed regular slugcat moves here yet!), so you can maybe get short bursts of movement in tunnels. another possibility is objects (or creatures) that can be used to block tunnels. but again, this is all a bit ahead of us!


Quote
Will there be more of such "alpha" releases on the way, just to see how the game is progressing?

I think we'd like to do at least one more before actual beta? That is somewhat related to time, as whenever we do a public build it takes planning and a week or so of tying together random things to make it palatable for a non dev, and that time could be otherwise used for actually progressing work on The Game proper. PLUS you get a million emails about things that aren't in the build yet, etc etc. Pretty sure the next one will be focused on the multiplayer aspect though, which I think will be pretty fun to see.





   JLJac on January 11, 2015, 11:00:55 PM:

The feared, the infamous, the in horror anticipated Level Editor Overhaul is here  Who, Me?

Q: What is the level editor overhaul?
A: An attempt to make the level editor spit out rooms larger than 3 screens big.

Q: Why can't it?
A: Because director only has a limited memory, and as is the level editor creates a voxel build of the entire room that's 30 voxels deep. In the case of large rooms, which might be something like 1000 * 4000 pixels large, we get 1000 * 4000 * 30, and then * 4, because each layer keeps track of color for each pixel, shadow status for each pixel, and effect coloration. 1000 * 4000 * 30 * 4 pixels is more than director can handle it seems. So instead I'll try to make the level editor only render a voxel space for a little box around where the camera is for each screen, and get around those huge bitmaps.

Q: Why is it dreaded?
A: Because it's boring. It's a looooot of work, and digging into old code, and the end result won't be exciting at all. In actuality it will be exciting when the game is actually played, because it'll allow us to create really big rooms, but on screenshots you guys won't be able to notice any difference.

Q: Why now?
A: Because the earlier the better - James will have had access to better tools for a larger percent of dev time the earlier this gets done. Also the devlog has been dormant during my winter vacation thingie, and I figured it would be better to have it stay dormant for a while rather than wake it up and get you guys all hopeful, just to shut it down again. I won't devlog about the level editor overhaul, because it basically all boils down to "In frustration I messed around with 3 years old lingo code in futile attempts to solve petty little problems in order to get to the exact same spot where the level editor already was, but this time with support for larger rooms".

Also there will be some other level editor work, such as adding a Prop Editor where James can place some objects (say plants, cogs, chains) in the environment manually instead of trying to make the randomization of the Effect Editor hit the right spot by changing the seed over and over. And make the level loader understand sub-folders, and other exciting stuff.

So, I'm going to just go head first into this mess and try to survive through. Might be a couple of days! So see you in a bit Smiley





   JLJac on January 12, 2015, 11:45:29 PM:

Good news! Talking to James, we decided that I'll do some creatures on half speed on the side of level editor overhaul. I tend to get into big structural projects rather than create content, and the game needs some content, so this time around we'll try doing structural stuff and content in parallel. Definitely more fun!

Update 379
This is going to get spoilery! I won't bother keeping the devlog spoiler free, because then I will be able to post less and less stuff, and the devlog will become worthless at its purpose, a log of development  Cheesy

James is working on the sky region, and I've started sketching on a flying predator to go with it.




The idea is that these arms/tentacles double as wings and it can walk/climb or fly depending on the situation. Seems difficult... We'll have to see how it develops in the actual implementation!





   JLJac on January 13, 2015, 05:04:30 AM:

Oh! I plead innocent, I haven't played metroid! But if the overlap is too jarring, I could definitely come up with some changes. Or you're talking more about the mood than the actual design? If it's more a mood question I think that'll settle when it's rendered in the RW art style, as you say!





   JLJac on January 14, 2015, 04:17:08 AM:

Thank you! Yeah this one is certainly venturing into some more alien territory. It's also pretty technically ambitious, even more than the lizard animation-wise, but it doesn't have the multiple breeds like the lizard does so it should be a bit easier to handle. I don't really have a solution for the devlog spoiler issue, as I kind of use the devlog as a tool for my personal motivation as well - if my progress is recorded somewhere else than just on my own computer it feels more like I'm moving forward...

Update 380
Started setting up the framework for creature codename SKY KRAKEN. There's a creature template and all that now, as well as an actual physical representation that can move around a room with path finding. Everything is as usual just slightly more complex than what I can hold in my head at a time, but by breaking the problems down I keep getting around them. This time around I'm also making a little "setting up a creature instruction manual", which will hopefully speed up the process later by keeping me from doing stupid mistakes like spending 15 minutes debugging why the critter is just lying there, until I realize that I didn't spawn the AI module, etc.

The tentacles will need some physics fiddling. Currently we have lizard tails, but those are completely limp and only 7 segments or so. These tentacles will be way bigger, and as they're not purely cosmetic they're going to need to be a little bit more robust in their terrain interaction. It can't be hand waved that two segments end up on opposite sides of a wall and the like. So now I'm doing a thing where each segment is forcefully kept in the line of sight of the previous one - no terrain can be in between them. I'm veering into Actual Physics Engine stuff here, and I'm a complete amateur, so wish me luck lol! We'll see how it goes, worst case I'll have to simplify stuff a bit to get around the physics issues.





   JLJac on January 14, 2015, 08:19:43 AM:



hhrrrrrrurrrgh this better be worth it!

Yeah, some independent AI per each tentacle will definitely be necessary - not that they're completely autonomous, but some hunting grab positions etc. Lizard feet already do actually, but here it'll be more visible.





   jamesprimate on January 14, 2015, 02:46:24 PM:

With lizards in "alpha", once I got to know the map and movement and where spears are, there's no more feeling outgunned or outnumbered. Actually, I like to stay in areas where I can see one lizard around as a handy warning for when the rain comes

NICE! This is sort of exactly the intention: when you first encounter creatures they are terrifying, but as you learn their individual behaviors, they can become an asset.

My only concern with a flying predator is that I kind of feel it might be overpowered compared to the slugcat. I mean, you're already feel outgunned and outnumbered with the lizards but there you can use your agility to outmaneuver them. A flying creature seems like it would negate the advantage your agility provides. How do you escape something like that?

Flying creatures will have a massive advantage in certain terrains thats for sure, but will be unable to go through tunnels and tight spaces. Basically once you are below ground they arent really a threat. Lizards have much more terrain in common with the slugcat, so the more dangerous of the lizard breeds should actually be way more overpowered than the sky kraken, at least in terms of relative danger to the player.

I mean, to clarify: this creature itself will be a complete terror. Sky Kraken is supposed to be Death From Above. But were thinking that clever level design and some as-of-yet unmentioned game mechanics will be the determining factor in keeping it manageable. (Sorry trying to keep the spoilers down!) Wink





   JLJac on January 14, 2015, 03:36:50 PM:

Yeah, as it's turning out the sky kraken needs a 3 tiles wide space to go in, so as long as James gives the levels some pits and corners to dive into it should be possible to tune the difficulty quite nicely.





   JLJac on January 15, 2015, 05:22:22 AM:

Update 381
Tentacle Hell sounds gross/exciting depending on your preferences, but is actually just standard tedious, fun, demanding programming work. I feel in my element, and am at the same time not sure if I can do it. A nice challenge! After wasting half a day trying a proper physics engine solution that ended up glitching in infinity I decided to try something else, and am now doing the tentacles in tile space instead of float space, with the intention to overlay them with float space physics later. We'll see how it goes. Still nothing much to show, though progress is steady, so no gif yet. Hopefully I'll have some images for you tomorrow! Grabbing tentacles seems totally viable, although I think this critter might use them mainly for locomotion. But by this point I've spent so much time on tentacle code that if this actually does work out, we'll definitely explore some other tentacle critter down the line. Will see how it pans out though, maybe sky kraken ends up grabby as well!





   jamesprimate on January 15, 2015, 05:48:23 AM:

since Joar is all wrapped up in tentacle/code hell, ill drop some screenies from the wrap up of the Heavy Industry region:

a little transition aesthetically towards the Garbage Dump

detail: https://i.imgur.com/7rT5WVi.png

and this one transitions directly into the next region, Chimney Canopy

detail: https://i.imgur.com/CogqqMo.png

over the past few days ive been finishing up the rooms, getting the whole region connected and placing creature dens. one big aspect of this region is that unlike the last two that we did, this one lizards totally run the show. they have access to everywhere here, so it was the first real test of the large scale terrarium AI vibe and... im actually super impressed right off the bat.

Whereas the previous regions were more room to room (intentionally) and platformy, this one finally we get to see Joar's AI work in action with multiple lizard breeds churning, fighting, snapping at each other while chaotically chasing you all over the map. it is DANG fun, and hopefully just a glimpse at things to come!





   jamesprimate on January 15, 2015, 07:44:11 AM:

some day young padawan, you too will possess such magnificent wall jumping prowess:






   jamesprimate on January 16, 2015, 08:34:54 AM:

there have been some good debates about that on various message boards, my favorite one being one guy who argued *vigorously*, using footnotes, wikipedia links and and citations, that slugcat fur was similar to otter fur due to the way the slugcat looks when coming out of the water in one gif. i salute that man!  Beer!





   jamesprimate on January 16, 2015, 07:09:40 PM:

we usually only post game stuff here and leave the business end out of it buuuut....



i felt like you should all know  Well, hello there!





   jamesprimate on January 16, 2015, 11:02:03 PM:

yeah totally. probably pretty essential. im hoping to incorporate it into the opening narrative, but another possibility is to have some progressively more difficult "training grounds" rooms in the sandbox mode. lot of things we could do with that i think!





   jamesprimate on January 17, 2015, 08:21:06 AM:

nooooo stop breaking the alpha LOL





   jamesprimate on January 17, 2015, 06:39:17 PM:

prepare yourselves....








   JLJac on January 19, 2015, 12:18:44 AM:

Update 381



I've spent 3 days now trying to make this tentacle work. I just can't seem to make it work properly... And it's extremely cognitively exhausting all the time. I really thought I was on the final stretch this morning, but that's 6 hours ago and I'm still not happy with what I have.

If anybody has some tutorial, or some tips, or some anything, please please let me know!

This is what I'm attempting to accomplish: Basically super rudimentary rope physics. If the rope sweeps over an island of terrain, it shouldn't be allowed to pass through. The segments of the rope should not be allowed to exist on different sides of a wall - basically the entire rope should be connected in non-solid tiles from start to end.

What I have is almost good enough. In some situations it actually looks okay. In some situations when the tentacle moves around an obstacle it moves so quickly that it looks as if it's sweeping right through, which kind of defeats the purpose.

Functionally it's pretty solid, it's finding paths and have a fixed reach etc. But cosmetically I find it unappealing, the movement is super jerky. Any tips or links welcome.





   JLJac on January 19, 2015, 12:57:22 AM:



Okay I got a little bit of my happiness back. This is gonna turn out pretty scary either way, I believe!
(programming tips still welcome tho)





   JLJac on January 19, 2015, 04:18:40 AM:

@Schrompf yeah I'm doing soft connections, makes things a little less twitchy than if you go with stiff connections in a case like this. I don't exactly get what you're saying about pulling in limbs? I do get that it would be pretty simple to have a tentacle that just contracts and then extends along a new path. It could just make itself longer along the path, and when a new path is found it could easily use its own body as a path home, and then get started on the next path. Problem is that if the base of the tentacle is moving, such as in this case, it'd be always contracted. So I need something that rather tries to align with a path in real time.

@zorg, I pretty much need to animate it all, because the tip and the base of the tentacle are moving simultaneously. But that's not the problem really - the problem is terrain, or more specifically corners. When the rope is pushed against a corner the segments go separate ways, and end up on different sides of some terrain feature, which causes the rope to get stuck.

Update 382

I think I actually solved it to a degree that's far from perfect, but which I'm decently happy with. As marcgfx mentioned, we're hoping for the skinning of the character to make it look better still.



Sometimes the solution was super obvious and sitting there all along. Not so this time. Every part of functionality in this thing was hard won through hours of blood, sweat and tears.



My head is all dizzy from all the actual freaking thinking I've had to do to get to this somewhat okay-ish result.

Contrary to being obvious my solution is even hard to explain. Hmm.

Okay, so you see that there's a semi-transparent "ghost" tentacle? That's the tile space tentacle. It has pros and cons. Pros - it can never be inside terrain, and the segments are always neighbors, meaning the whole thing is connected from root to tip, in non-solid tiles. Cons - it's square looking and lack physics features such as gravity. But most notably, when the path changes, it tends to curl up and get really small before extending along the path again.

Then there's the float space tentacle, which are the round segments. The idea is basically that the float space tentacle should do it's thing, looking cool and physicsy, but also draw from the strengths of the tile space tentacle (which is, as we remember, not getting stuck in terrain all the goddamn time).

Each float space segment has a buddy in the tile space tentacle, as indicated by the little purple lines. If the float space buddy can see its tile space buddy, it's pretty much free to float around.

If not, the float space buddy has been keeping track of every position of its tiles space buddy, like, 60 ticks back. So then it starts to go backwards in that list and raytracing to check if it can see those last positions. The first one it can see, it moves towards.

This means that the float space tentacle generally does its thing, except when it can't see its tile space counterpart. In that case it starts to follow like, the ghost of its tile space counterpart, until it catches up. That's why you can see the float space tentacle kind of mimic the movement of the tile space tentacle, but a little bit delayed, as an obstacle is avoided.

Pew.





   JLJac on January 19, 2015, 04:20:46 AM:

Also, please note the expression of the slugcat in the gif. Constantly when developing the kraken I've been getting that passive aggression. Can someone explain that a game needs some challenging enemies?





   jamesprimate on January 19, 2015, 06:07:47 AM:

this definitely is the face of "fffffff im going to get eaten"





   JLJac on January 19, 2015, 05:21:18 PM:

The gifs shows a long tentacle because the more tentacle I have, the clearer I can see what's going right/wrong. The actual kraken will have substantially shorter tentacles/wings.

Quote
The delayed tile space tentacle looks great, even with the curls it looks very alive. The movements of the float space tentacle look way more chaotic, because the segments clump together (because they are moving in the same direction simultaniously, but the tip moves faster).

I agree with zorg. The "ghost" tentacle, with its curls and swoops, almost seems more natural in its movements than the "real" tentacle following that pathing. I wonder if increasing the tension and decreasing the elasticity of the connections between the pathing ghost and the tentacle nodes would resolve the clumping issue. Right now it definitely looks like it is being pulled, rather than muscular movement.

Also AAAAAAAAAAH that thing is way longer than I anticipated! I really hope that there will be extensive, maze-like warrens of tunnels to hide in when that thing is around...
I also agree, the ghost tentacle looks better. The reason it looks like its being suddenly yanked around is because instead of the acceleration being parabolic, its negative exponential, if that makes sense.

Right now it is: |            |         |    |  | |||

It should be:    || |  |    |       |       |    |  | | ||

If that makes any sense at all WTF
Yes! Noted! I just imagined that step one would be not having it move through terrain, then step two would be making it look pretty. In my more recent implementations I've taken away some of the homing force from the tip, and distributed it more evenly along the segments, and it looks a bit better I think.

The tentacle still looks a bit weird because a) the kraken always knows where slugcat is, even when in a tunnel and out of sight and b) because it moves its tentacles as if it had infinite strenght. I could imagine, if it would only have strong lower tentacles and slower upper tentacles it would first slam the whole tantacle in the general direction of the slugcat and than the tip of the tentacle would slowly "crawl" the rest of the way.=D
The tentacle has no idea where the slugcat is or even that it exists, I'm providing path goals with the mouse??

Wow, that looks really great. Like, seriously, haha.

I think the only thing you might want to do is reverse how the tentacle is moving toward the goal position - instead of attempting to move the tip to the desired position, it seems like it'd be easier to move the root of the tentacle to the desired root point of the path, and then move on to the next node in the tentacle. Repeat until all nodes of the tentacle are close enough to the goal. That way, you won't have so much weird "ghosting through objects" and doubling back on the tip, since it's going from the root forward.

But I dunno, that might be what you've tried already, or maybe it won't work well.

Great work, anyway!

This is pretty much the movement pattern of the "ghost tentacle". Problem is that if you move the tentacle base, you have to start the process over again. I need to account for simultaneously moving base and tip here  Who, Me?





   JLJac on January 19, 2015, 08:16:33 PM:

Update 383

Started on climbing behavior.



As you might remember, this creature is supposed to be flying/climbing. Generally it will prefer flying in open areas and climbing in narrow areas, but I don't know yet to what degree it should prefer either way of locomotion. Maybe it'll only climb if absolutely necessary, but prefer flying in all possible scenarios.

This climbing behavior obviously needs some work. But the idea is that the flying behavior will be able to support it a bit and make it look a little more competent - maybe the creature should be able to fly a little bit with one limb while climbing with the other, for example.





   JLJac on January 20, 2015, 02:31:55 AM:

Gimmy! Welcome back! Missed ya!

Update 384

Making slow but steady progress on the kraken.



Right now I'm working on the transitions between flying and climbing states.



It actually has the ability to fly with one tentacle and climb with the other right now, though I'm not sure if I love it. If it's to do that, I'd want it to be just to give itself a little boost now and then during a difficult bit while climbing, not the tentacle locking into fly mode for a long time. I'll see what I can do about it.

The idea is that it should be faster while flying, but have better control while climbing. Not quite the case yet... More work needed. Stay tuned!





   jamesprimate on January 20, 2015, 08:46:36 AM (Last Edit: January 20, 2015, 08:52:48 AM):

 Evil SUPER pumped on the kraken  Evil

while Joar is prettying up the tentacle monster, im trying to build it a nice home! the first aerial region we're doing is called Chimney Canopy. it is a mess of spires, huge chimneys and scaffolding high above the heavy industry region.

Joar provided some huge chimney chunks and a pretty elaborate scaffolding set a few days ago, so i've been getting a feel for those:


detail: https://i.imgur.com/gYAz2Nf.png


detail: https://i.imgur.com/IJmy2YU.png

as we get further away from ground level, the tangled steeplechase vibe will fade into much more exposed, sparse platforming where krakens will likely terrorize you from all angles:


detail: https://i.imgur.com/WPtSvtJ.png



the formative idea for this region is all based off of my favorite level from the old lingo build, called The Grid:


as you can probably see, the look of the game has evolved quite a bit, so its been an interesting challenge trying to develop levels highlighting that same structure and gameplay style, while still keeping the snazzy sense of depth and scale that we've been able to achieve in the new version.





   JLJac on January 20, 2015, 07:34:39 PM:

Hahahahaha you guys are getting all scientific in here! It's just a cartoon  Wink Or worse, a game of a cartoon  Cheesy

Update 385

Thrusters help the kraken manouver in some of the more tricky situations, particularly take off and landing. It can also give a quick burst while flying or even climbing to nudge itself in the right direction.



Takeoff and landing are special animations, but the little nudges can happen at any time - it just does a dot product comparison of the body's direction, the desired travel direction, and each jet direction. If they line up - the body is moving away from where it should go, but the jet points in the right direction to adjust that, the jet gives a little burst.

Don't worry though, all takeoffs and landings aren't super graceful now, the super awkward transition to flying where the Kraken gets one wing started and then the other will still be around.








   JLJac on January 21, 2015, 06:27:34 AM:


If the tentacle is reaching into tunnels and comes to a split in a tunnel, how does it decide which way to kraken into? Since the kraken cannot see which way the slugcat took.

Same way a lizard decides which branch to take when hunting - by following a simulated best guess "ghost" of the target.
Winner  Hand Thumbs Up Right Hand Thumbs Up Right Hand Thumbs Up Right





   jamesprimate on January 21, 2015, 02:22:12 PM:

Dang now we HAVE to make this game good, cuz Fumito Ueda is going to be playing it O_O http://www.polygon.com/a/life-in-japan/Fumito-Ueda-views





   JLJac on January 22, 2015, 05:24:07 AM:

I'm really really honored by that. I love the atmosphere of his stuff!

Update 385

Started skinning this beast!



Still a long way to go, but we're getting there Smiley



Tentacle contour changing when switching between climbing and flying modes.





   jamesprimate on January 22, 2015, 07:43:57 AM:

That's the neck! You and your dirty minds...

Movement looks nice and smooth and creepy. Right now it's like you're being chased around by a giant disembodied stomach and lower intestine rofl





   JLJac on January 22, 2015, 08:03:47 PM:

Update 386

Are you ready for gross sky kraken appendages? That rhetorical question, of course you wanna see some gross appendages:



Please refrain from these words in the below discussion: "Udder", "Sperm Sack".

Also - iiiiiiincoooooomiiiiiing!






   JLJac on January 22, 2015, 09:24:17 PM:

So which limbs does it use to grab prey and search through vents? The big wing arms seem too large to fit into tunnels and tight places. Do the purple tentacles stretch?

Did Joar ever actually say it would reach into vents?

Actually I don't think I mentioned vent searching for this creature, but more for tentacles in general. The purple tentacles are passive, so it'd have to be the wings if any. It does reach with its neck though, but it's not very long. When James and I really start to try to build gameplay around it we'll see, maybe it'll need grabby arms or it's too easy.

Also is there going to be some kind of membrane or skin between the "fingers" of the wings?
Nope, I don't think so, but the "fingers" will look slightly different - now they're just squares.

Edit: that slick move the slugcat pulls off in the first GIF is awesome. Swing off the pole, land on the edge of the platform, leap downward, all in one smooth fluid motion
Tooooootally on purpose!  Wink





   jamesprimate on January 23, 2015, 02:09:15 AM:

WHAT A GLORIOUS BEAST  My Word!






   jamesprimate on January 23, 2015, 05:55:47 AM:

Just looked on humble at the claim page? And there doesn't seem to be any link, it just shows:

Your purchase of Rain World Early Access + Soundtrack gets you:

Rain World, Cross-Platform and DRM-Free
Rain World Digital Soundtrack (+ Bonus Tracks)
Rain World Alpha/Beta Access

Then no download link for the Alpha? Any ideas?
Thanks

PM'd!





   jamesprimate on January 23, 2015, 02:24:36 PM:

I was a little scared to read after all of those uhhh... suggestive... kraken comments earlier in the thread, but that was a fun read  Toast Right





   jamesprimate on January 25, 2015, 10:36:50 AM:

^ oh man we have some cool plans for that. i wont spoil it though





   JLJac on January 26, 2015, 01:31:59 AM:

Update 387

Wow, that was a lot of work! But also probably the most fun I've ever had. Since last time, the beast has gotten a head, feather like appendages on its arms, smoke coming out of the thrusters and some kind of shell on its back.

Many things still need work, such as the head and neck being too lose and floppy when it's flying, and the smoke in general. I would like to have the smoke look cooler, but I settled for this as good enough for now. My main concern was that I really wanted the smoke to be affected by the wing flaps, and I got that in even though it doesn't perhaps look all that natural. Maybe down the line I'll do a 2D grid based fluid simulation o_0

Here's the head in its classical frame animation sequence. I'm getting rusty at old school animation haha! But with some help from the computer (rotating the sprites, mostly) it still looks smooth enough.



And on the creature!



The tusks or mandibles or whatever are probably going to have some stuff going on, I imagine that they'll hang like this, but when the creature gets into Hunt Mode they retract towards the neck, and sit there in a "charged" position. From there they can move forward quickly in a bite, and if that gets you you're stuck. If it doesn't, however, the creature needs to retract them again before biting the next time, giving you half a second of breathing space. I think that might be necessesary in order to give you the feeling that you have some sort of chance - this way you can actually save yourself from a close encounter with a bit of skill and luck. If you're caught automatically when touching the head, the creature can just kind of cheaply sweep around and get you pretty much whatever you do.

Here's the creature taking off:



And an remake of the eagle landing one, now with head and all that stuff (this one took a thousand takes, because it just refused to land on the little platform... Everywhere else was preferable, apparently -_-)



And last, some climbing gameplay where I manage to make the beast lose track of me. It's usually not that easy, but I was lucky this time and the tracker sent a ghost off to the right instead of up the pole. Remember that it doesn't have any AI yet, only the tracker. The AI is literally two lines that say "go through the known creatures in the tracker. If they are a slugcat, tell the pathfinder to set the movement destination to where that critter is believed to be. Break the loop." Behaviour will probably look cooler once that's actually sorted out.



Oh and also, maybe we need a new name for this beast? Sky kraken was fun as a WIP name, but seriously, the finished product is looking distinctly not like an octopus to me. "Skull Bird"? "Jet Beast"? Suggestions?





   jamesprimate on January 26, 2015, 02:25:10 AM:

seriously this is jaw-droppingly impressive, and i dont care if im biased saying that. dat death from above eagle drop is just straight up amazing. the head movements are so smooth! RW gets a lot of talk about the life-like animation, but this bumps it up A FEW notches imho.

Quote
Oh and also, maybe we need a new name for this beast? Sky kraken was fun as a WIP name, but seriously, the finished product is looking distinctly not like an octopus to me.

SKULL VULTURE

KABUKI BUZZARD

DEATH'S HEAD CONDOR

definitely some sort of vulture thing though

reminds me a little of Wan Shi Tong from avatar, totally my favorite spirit:










   JLJac on January 26, 2015, 04:40:01 AM:

Thanks  Grin

Also James persuaded me into implementing this one thing we've been talking about, having the shadow of the creature as a warning of its approach :



I'm really happy with the result! Subtle enough, but still totally possible to notice if you're alert.

In physical reality, how things would work is that the creature would have to be like, in front of the level, behind the camera, to block the light like this. A while I was thinking about having the shadow casting creature be in another room or something, to get that. But we are awkwardly trying to make 2D and 3D work together here anyways, and sometimes the best solution is the simplest one. It struck me that what probably makes most sense from a utility perspective is that if creatures above the screen cast shadows on the level. So, maybe we'll let realism go out the window this time - just because it's such a charming detail to the actual game experience to be able to see shadows of critters above like this. And who knows, maybe when they're up there they move a bit in the z dimension to get in front of the sun, haha! Anyways, now we have this weird situation where if the creature is moving downwards, you first get the shadow, and then one screen later you get the shadow + creature. Not realistic, but it works Smiley

Technically what's going on, is that if the creature is above the screen, all of its sprites are moved down one screen height, making it reappear in the screen rect, and colored in the "shadow only" color. Simple as that! So a cool thing is that every sort of animation and behavior the creature can do, the shadow can do as well.





   JLJac on January 26, 2015, 05:14:24 AM:

That's just so visually awesome

Although the thing goes from terrifiying to clumsy in that GIF when it slams its head full-force into the platform upon swooping in :p

Good thing it has a shock-resistant protective bone casing around its head

Hahahaha dude, this is procedural animation, every creature is always clumsy as hell! I've kind of tried to make a world and creature designs that can roll with it though - like if things are a bit weird and uncanny it feels sort of correct, mood wise, that the creatures are clumsy and jerky and all that.

It looks amazing!
About the name, I'd name it Skull Vulture or simply Vulture.

Also, I'd add a few more feathers so the wings look like they can really make him fly, but that's just a small detail.

Yup, James and I discussed it, and we've decided to just call it "the vulture". The other creatures follow the same pattern of being named after whatever real life creature they resemble - snail, bat, leech, lizard. So it just makes sense for it to join them! Also vulture sounds kind of ominous without necessarily putting in a whole bunch of darkgrim words like Skull etc, haha. Also I think it has a kind of creepy quality when something has the name of something you know what it is, but is clearly something else  Who, Me?

On the number of feathers, I can tease you by telling that it's literally a variable I can set, but I deliberately set it to 16-22, I think it was ~ it'll remain a mystery how it can actually fly, I guess!  Tongue





   jamesprimate on January 26, 2015, 07:55:31 AM:

yo check dis big new kickstarter update:
https://www.kickstarter.com/projects/rain-world/project-rain-world/posts/1117067

basically summarizes the past months devlog so maaaybe not much new for hardcore thread peeps, but adds a new video and some unseen screenshots / background info  Hand Metal Right





   jamesprimate on January 26, 2015, 11:50:35 AM:

well SOME of the clumsiness is that there is no behavior AI attached, etc etc. there is still quite a bit more to do on this beast in that regard, Joar just skinned it nicely so we could present a solid kickstarter update. Same goes for the shadow, which he whipped up in like 30 minutes after i nagged him about it XD. For that amount of time it looks damn amazing haha, but yes im sure there will be some tweaking in the near future.

@cwearly: youre not too far off actually!

@christian: thanks for the backup!

its true that we dont go too much into the narrative stuff here, but thats intentional for a few reasons: first is that there is still a lot of work before that stuff is all nailed down. We still have a few gameplay mechanics that would be essential to the current narrative concept that we havent even started exploring yet. Naturally the game is evolving while we build it, so talking about the narrative aspects when entire sections of the current plan may or may not exist doesnt make much sense.

Also is that from my perspective, I really want people to go into the game fresh. (Yes, even you Chris!) For us, Rain World is a mood piece, and the experience that we are trying to create is that of a lost creature in a strange world. We DONT want you to know some things, thats the whole point Wink Joar and I were actually just having a conversation about this, where at some point we'll be at that weird point where we'll have to start choosing what to devlog about so as not to spoil too much. Probably not for a little while yet though!

Occasionally we get the physic simulator comments, and that makes sense as a HUGE part of the work that Joar is doing (literally the entire past year) is building the game engine, which is... basically a tricked out rain world physics simulator. If you are used to seeing games done from prefabbed dev toolkits perhaps its a bit slow (and believe me, from our perspective it is infinitely worse hahah), but the result is the look and animation that "is Rain World" so thats what were doing, however painful and tedious it might be  Hand Thumbs Up Right





   JLJac on January 26, 2015, 03:27:29 PM:

The alarming shadow is really nice and shows how beautifully they are rendered, but then I would take out his 'second' shadow that is right behind the creature.
Hahahaha I see your logic - if first there is the shadow with no creature, then there should be the creature with no shadow!

Having the shadow come from the bottom is not an impossible option, but it comes with a bunch of problems. Either I flip the shadow upside-down, which would look strange, or the wing flaps would be unaligned with the vertical movement. Honestly I think the current solution works alright despite not being realistic - it looks nice, and gets the relevant information across. Strict physics correctness isn't really the subject of my perfectionism. I'm way more bummed about the shadow not affecting the first few depth layers (which you probably didn't notice until I mentioned it now) and that's the thing I kept thinking about when trying to go to sleep last night... That said, if someone comes up with an amazingly slick solution that is also more realistic, I'm game  Hand Thumbs Up Right

It isn't just going to be a large physics simulator, right?
Isn't everything? Is not ... everything?





   JLJac on January 27, 2015, 04:17:18 PM:

About the double-shadow: I think it is unrealistic but honestly I think it's better to leave it as it is now for gameplay reasons (because it's good to have the "alarm" shadow but would look weird if there wasn't one behind him.

Please make the smoke semi-transparent or at least move it behind the vulture ^^

Nice KS update!

Another thing is that the shadow will be able to move around in every direction, not just down. And in that case, it kind of makes sense for the player that a downwards moving shadow signifies a downwards moving creature. And yeah, it would look weird if it didn't have a shadow behind it >___< The current situation could be explained by the creature going up and back in the z dimension a bit, I guess.

Don't really do semi-transparency, it's an art style thing. But layering it below the creatures is a good idea!

I like the way the "feathers" shrink when the wings are in tentacle mode. But I don't think they look very good when the tentacles are curving tightly. They stick out in random directions and obscure the shape of the actual tentacle.

Actually, the walking wing contour is like this:

Code:
===----------------====BODY
 |||||||
  ||||


In a very deliberate attempt to maximize the sticking out in random angles  Who, Me? Makes it look scruffy!





   jamesprimate on January 27, 2015, 05:11:57 PM:

I'm advocating for a little clumsiness and reckless abandon in its movement and pursuit behaviors.  I love the fact that he slams into the side of that platform in one of the gifs.  Rain world is full of stuff that's gonna get in its way -- it's huge and fast and it shouldn't give a crap.

 Hand Thumbs Up Right Hand Thumbs Up Right Hand Thumbs Up Right





   JLJac on January 28, 2015, 01:04:35 AM:

Update 388

Made the vulture able to snap after prey, and carry it. Also lifted the utility comparison engine from living in the lizard only to being general, and applied it in the vulture.

The current AI layout is as such:

At the very top, there's the ArtificialIntelligence class, which has basically nothing going on in it except an empty list of modules. A specific creature AI inherits from ArtificialIntelligence, such as LizardAI : ArtificialIntelligence.

The first thing such a creature specific AI does is to start firing up a bunch of modules. In the case of the lizard, no less than these:



Vulture will likely have the same set, maybe except from Threat Tracker as it's pretty much an alpha predator and I don't know if it would even need to bother to look over its shoulder.

What's new since last time is that now the Utility Tracker lives as a module alongside the other modules. The Utility Tracker keeps references to the other modules it's been told to keep an eye on, and every frame it asks them for their Utility.

Utility is a value between 0 and 1, which is the AI module reporting back how urgent it is to do the thing that that AI module is responsible of. If the threat tracker returns a 1, get to cover! If the rain tracker returns a 0.7, time to start heading home. Prey tracker returning 0.9, there's some juicy prey close by and you should seriously consider the hunting behavior.

Utility Tracker keeps track of these, and do some smoothing and tweening on the values as well, to keep stuff more organic. It also applies a conservative bias (ie whatever is currently being done should get a little bonus, to keep the creature from flickering between behaviors) and similar neat things.

Every frame, the main AI script can simply ask the Utility Tracker for which module is reporting most urgency this frame, and then act accordingly.

Not all AI modules are hooked up to the Utility Tracker - for example the Path Finder is never really urgently calling for some decision, it's more of a means to an end.

This system is now up and running in both the lizard and the vulture, and seems to be working in both places. The vulture only has Path Finder, Utility Tracker and Prey Tracker at the moment, meaning that it'll spend each frame comparing the utility of doing nothing to the utility of hunting a prey, if it has seen one. So yeah, still some stuff that's gotta happen there. But basically not anything the lizard isn't already doing, so I don't expect it to be too troublesome.

Hunting behavior (except from the flying outside the room / between rooms part) is pretty much down already though, as it's basically all happening in the interaction between path finder, prey tracker and the actual body's locomotion engine stuff. I've already run around with the vulture and several lizards, and seen it pick its prey, hunt for a bit, change its mind to something closer, etc.

The actual snapping looks like this right now:



It's a little lameish, but when I went all out with body motion and neck extension etc the range became too big, and it was just impossible. Maybe it doesn't need a super power attack, but this little peck can do quite well... At least for now.

Also, since actually making it able to catch you I've started tweaking speed etc to make the challenge reasonable. It's difficult to tell, because it's a very big difference in what's "reasonable challenge" when you're just testing in a room and can restart every 11 seconds, and when you've invested 6 minutes since the last save point in single player and really, really, really want to stay alive.

This is also the biggest liability with this enemy I think - because it's so big, and a climbing enemy, its speed becomes a bit unreliable. Whether or not it can find suitable grips when climbing makes the entire difference between it traversing the screen in three mighty strides and snatching you up before you know what hit you, and it fumbling for a good climbing route for 15 seconds while you take your time to leave. There's of course work that can be done to even that out - most notably having it switch to flight when climbing is not a good option, but also by clamping the max speed a little, etc.

Apart from the AI implementation, which I think is gonna pick up big time tomorrow when the modules go in one after the other, there's the big issue of flight. James and I had a talk about some of the design issues that needed addressing today, and now I just have to go do the technical implementations. Haha. Path finding, here I come!





   jamesprimate on January 28, 2015, 04:03:23 AM:

psychic developer debug powers!  Wizard

the peck animation is great, looks very natural and bird-like. its probably good to have that rather than another big dramatic lunge, as the vulture is already pretty dramatic as it is. makes it feel a little more like a hungry bird than FLYING DEATH SKULL BEAST. we want both of course, but nice touch to balance that mood just a little





   jamesprimate on January 28, 2015, 03:10:05 PM:


halfway though http://forums.tigsource.com/index.php?topic=25183.2540





   JLJac on January 29, 2015, 04:14:20 AM:

Update 389
Today I've been doing two things, but neither really to a place where I have much to show, sorry! First one is that I've started on the "sky highway" - a way for flying creatures to teleport between rooms. The first step was to identify the room borders, which is now done - next step is going to be having the abstract world map understand these room exits as Nodes, similarly to exits and dens. This is a journey through the absolutely murkiest parts of the rain world engine - the stuff that has to do with path finding, AI prebaking and interaction between the game and the level text files, so it's gonna be trouble for sure. But maybe it's as well that I go in there and renew my understanding of how that stuff works, or I might forget it completely.

The other thing is tiles! For once I want to have some margin, and do the tiles for the next area before James is already halfway through it, so I've gotten started on that.





   JLJac on January 30, 2015, 07:07:25 PM:

Yeah, originally I had the color gradient the other way around, so that it came out black and then got lighter, which was nice because it created a fade-y sort of effect without actually using alpha. But then I switched it, because I wanted the smoke to be more visible. All of this cosmetic stuff is super subject to change. I just had to make some decisions to get the gifs together for the kickstarter update.

Programming question:
The sky highway stuff meant I had to mess around with the AI prebaking a bit again, and when I'm in there I thought I might as well add a thing I've been wanting for when doing some of the critters' AI.

Basically what I'm after is a map that describes how many tiles are visible from each tile. I want this because if you have for example a predator hanging out in a room, somewhat idly looking for prey, it makes sense for it to chill in some high up place where it can see a lot of its surroundings should something pass by. Contrary, a sneaky or scared creature that wants to lose a predator hunting it should probably gravitate towards narrow corridors and sheltered areas.

The brute force to do this is simple: We're at tile (x, y). From here, we do a ray trace to every other tile in the room - if it's visible, we increment a value, otherwise not. Then we move on to (x+1, y), repeat.

This seems pretty wasteful though, because once we've hit a tile we already know that none of the tiles behind it will be visible either. I know that many roguelikes do this exact sort of thing with their field of view algorithms, so I'm gonna look at what the roguelike people have to say about it. But if any of you have some article or tutorial that's just perfect, please point me to it!  Hand Thumbs Up Right





   JLJac on January 30, 2015, 09:16:34 PM:

Update 390

Figured it out, I think!



Really happy to have those visibility maps. It will add a lot of character to be able to define whether a creature lurks in the shadows, or overlooks its territory from above.

Right now the algorithm gives the top side of high up platforms low visibility, which makes sense if you only consider visibility from other tiles inside the room. The vulture hunts from above and outside the level though, and it does seem a little weird for creatures to hide on top of stuff even if there aren't vultures around - the AI behaviors should perhaps act as if there was actually a world outside of the tiny little enclosed room as well. So I might add some kind of from above bias to get rid of that. I'll just see what the behaviors actually look like first.





   JLJac on February 01, 2015, 10:22:37 PM:

Hey Joar, where should I start if I want to be as smart as you someday?  Who, Me?

Aw you! But in all seriousness though, eat your vitamins and worship Cthulhu.

Visibility map = a sort of ambient occlusion without distance weighting ...

... that's an interesting concept, also reminiscent of distance map

... just that "shape" of the map is something a bit different

Ah so that's how ambient occlusion works! Makes sense! What's a distance map though? (google only gives me nonsense)

Programming question: (which is more about like, what's good practice rather than solving a problem)
Ok, so I'm redoing some architecture of the "abstract space" part of the game to make way for "sky highway", and in the process I'm tidying up a bit to make room for further such adjustments down the line, because there's gonna be something.

Previously an abstract room had "nodes", each node represented either a room exit or a creature den. Now I've added new types of nodes, such as bat hives and sky highway nodes. This means that now there are different amounts of nodes in each room depending on which creature is asking - no other critters than bats should care about bat hives, for example.

So, all the nodes are sitting in a list, labeled 0, 1, 2 etc. When critters access this list though, they use creature specific labels, because to some of the critters some of the nodes don't exist.

Sooooooo basically I have "global" node indexes and "creature specific" node indexes, and a method to convert between them. They're just integers, and I'm suuuuuper prone to mixing them up all the time. I name some variable "nodeIndex" thinking that it's totally obvious which of the two types it is, but then feed it into the wrong method etc etc.

So I had this idea, that I would create two structs, each containing only an integer, GlobalNodeIndex and SpecificNodeIndex or something like that. A conversion method would be the only place to change between them, and all methods could specify and enforce which one they wanted.

Is this a cool idea? Do people do stuff like that? It's obviously not as fast as just going with ints, but it's not really performance critical code anyways.





   JLJac on February 03, 2015, 03:55:17 AM:

@Gimym JIMBERT, ah yeah, I do that too! I call it "terrain proximity map" though, which might be a more cumbersome name, idk. Direction? You can get the direction towards/away from any point by just checking the neighbors, right? Or you're talking about something else?

Well, to me, and I'm sorry for being stupid in advance, this sounds like a simple mapping problem. If your generalNodeList always is a superset of the creatureSpecificNodeList and you are using arrays to store the lists (which I've concluded from: "So, all the nodes are sitting in a list, labeled 0, 1, 2 etc.").

consider this example:
Superset (Exit, Den, Bat Hive, Skyway):
[ E E D E D B B E S E D S ] ( = globalNodes )
And you want to get a reduced set for bats for example like
[ E E D E D B B E E D ] ( = creatureSpecificNodes )

in that case you could just infer the index by just using a mapping of the indices via
[ 0 1 2 3 4 5 6 7 9 10 ] ( = creatureTypeMapping )
so that globalNodes[creatureSpecificIndex] becomes globaNodes[creatureTypeMapping[creatureSpecificIndex]].

So your functions would look like
Node getNode(int creatureSpecificIndex, type creatureType) instead of
Node getNode(int globalIndex)

and based on the creatureType given, you'd use a different creatureTypeMapping array.
Shocked Facepalm Thaaaaaat's how you solve it! Ok, really good to know. Thanks a lot  Grin

Update 391
I've gotten the pathfinder to make paths through the sky highway! So we're getting there. Right now I'm struggling with getting the creature to actually follow the path though. Here's a cautionary tale for children considering game development - this is the stuff you're gonna deal with!

The problem is making the creature follow the path into the room from outside it.



Path finder works goal to start. If the creature is outside of the room, its "path finding position" is moved to the edge of the room (pathfinder needs tiles to work with). Ie the pathfinder works as if the creature is actually in the room. The path moves towards the creature as shown, and when it reaches the edge it goes into the "sky node". Then the creature tries to follow a path, by looking at all the neighbors of "start". The only one that has a fresh path is the sky node! So it decides to go up instead of down.

Hmmm... I'll figure something out. This looks like it has many potential solutions. The struggle continues.





   JLJac on February 04, 2015, 12:51:38 AM:

Hmmmm.... That sounds similar to the Dijkstra maps I've got going! In most situations I think directions can be derived from asking the neighbors about their values, and don't need to be saved in their own right, but in more complex cases I can totally see it. With visibility for example - saving which direction the visibility "comes from" could be used to have an NPC guard in a sensible direction in a shooter (facing out towards the landscape, not in towards a corner). Haven't really come across much stuff like that though, the single dimension data has been working just fine.

Update 392
Ugh, path finding. A solution to yesterday's problem was to check along the edge and picking the tile with the freshest path, then using that one as "start".

By today I have the inter-room paths generate somewhat reliably, and the critter can also follow them. It all works out except that some kind of ghost of yesterday's problem lives on, sometimes the creature can't find its way into the map. This is the part that should be simple  Tired

I think it'll be possible to do some ugly hack though, and by now I really feel like it. Maybe just force the creature to move towards the map if the destination point is inside the map, no matter what.

Once that's figured out, there remains one thing - having the abstract path finder be able to go by the sky highways as well. That shouldn't be too bad, but you really never know. Hope we'll be out of this marsh by tomorrow.





   jamesprimate on February 04, 2015, 05:34:05 PM:

Woo woo! Rain World just won TIGSource "Best Devlog 2014" and 2nd for "Favorite Devlog 2014". Thanks to everyone who voted and congrats to Moonman, CRAWL and Return of the Obra Dinn for winning as well! All the games listed are totally awesome and everybody should check them out! http://forums.tigsource.com/index.php?topic=44807.100



And three cheers to Eigen for putting it all together  Toast Right Toast Right Toast Right





   jamesprimate on February 04, 2015, 10:51:45 PM:

thanks all! and congrats to you as well mr moonman :D

Oh, and James & Joar, a little suggestion: maybe you want to update the Rain World site? Or maybe start a Rain World Tumblr?

The site has a lot of outdated images, doesn't have the Humble links, or latest footage, or that it was successfully Kickstarted or picked up by Adult Swim

this is all so true, but both of us are so beyond overworked that even the idea of a website update makes my eyes twitch  Cry

maybe we need to hire someone for that, idk. id love to just throw someone a bunch of stuff and be like "ok make it nice"





   JLJac on February 05, 2015, 03:57:21 AM:

Thank you thank you thank you everybody :D Such an honor!

It's going to be really funny if this bring new traffic to the thread right now in the midst of Path Finding Week  Cheesy "THIS won!?"
Promise though, it'll be more exciting stuff again shortly.

And such an honor to win two times in a row! Let's just hope that next year we're not a part of the competition haha!

Yeah, the site needs updating badly... Right now the kickstarter updates seem like a more presentable link to send people, and that's upside down for sure. But as James say, neither of us really feel like taking time out of development to work on presentation... When we get closer to release that might make more sense, so it'll get an update some time ~

Thanks again everybody! It really means a lot to know that all of you are reading and appreciating the devlog.





   jamesprimate on February 05, 2015, 10:48:35 AM:

i made http://rainworldgame.tumblr.com/ ! Im just too busy to do anything with it XD There would be so much to catch up on uhghh. Too many things to update! We should actually make the dang game





   jamesprimate on February 08, 2015, 08:47:47 AM:

thanks to all!  Gentleman of course we win the award then immediately disappear for a few days. *real nice devlog guys*

quite a bit of progress IS happening, but much of it is finicky stuff or un-breaking things that you would think would already be working, but Joar seems to be hacking his way through that list pretty steadily, so fingers crossed.

on the level front, i just put together the world file for the 4th region, Chimney Canopy, which was a tricky endeavor. The CC region is situated between 3 other distinct regions and had a bunch strong ideas we wanted to explore, both visually and geometry-wise. Plus the Vulture came out so strong that we wanted to dedicate some serious space to that. Trying to make all these components work together and have a coherent look/feel was quite a challenge!

Early in the game world planning stage, this region was to have around 15 screens, but as it is put together now it has 59(!!!) bringing the total number of screens for the first 4 regions to 192(!!!!), or close to what I had assumed would be for the entire game  Cry That said, I think Joar and I both agree this region is the the strongest yet, and its really fun to play. From my perspective the larger the world the better, so I'm thinking its worth all the time spent banging my head against the wall! No one will ever say that Rain World is light on content.










   jamesprimate on February 08, 2015, 10:06:15 AM:

Looking awesome. Is there a plan to do any additional/updated alpha demos?

yep! we are currently putting together a 4-region build for PAX East, and if that works out well we will likely make that available to the alpha backers. Still quite a few kinks to work out, so no promises yet!

Questions: we know Rain World is coming to Vita. What about PS4 and PS3? The initial Adult Swim announcement mentioned “PSN, PS Vita, and well beyond”. Just curious if that means consoles as well. (Mainly cause I want to update the NeoGAF thread title with confirmed platforms)

Chris was spot on with his comment. There is a bunch of big console news coming up, but that's all Adult Swim publisher business stuff to announce when they have it all worked out. We're just focused on building the damn thing! Wink





   JLJac on February 09, 2015, 01:30:14 AM:

Update 393

Doing the actual promised "roaming of the skies" now. That essentially means moving the vulture around through abstract space at semi-random until it comes upon something, like the player. The vulture stays a little bit in each room before moving on, which in the case of realized rooms is usually spent on the edge of the room or slightly outside it. So you can actually see the shadow of one of them sweep by and be successful in hiding, in which case it'll move on to the next room.

I think that when sound goes in, it could be pretty nice to have some sound cue when they enter the room, so you get a chance to scurry under cover.

Technically the vulture is able to "teleport" from anywhere to anywhere, but I've tried to cluster the prey search a little bit. Essentially it works like this - it picks the room it's in, and searches it. Then it searches the neighboring rooms (as connected by actual connections, if you count sky highway all rooms are "neighbors") and search them in a random order. When done, it repeats this process - but this time current room will be one of the neighbors. So, that way it'll vacuum the environment at semi-random, and hopefully there'll be a feel that it "is in an area" rather than wildly teleporting around.

There is a 1/10 chance though that it'll just take off to any sky accessible room, to mix stuff up a little bit.

As the vulture is a beast performance wise, I think I'll also add some kind of inter-species grumpyness to them. Two of them can run simultaneously on my computer, but when three are tentacling around it can get a little framy, so having them prefer not to all hang out in the same spot might be a good idea.

Soon James will have his hands on the first vulture build, and you guys can hear his first impressions Smiley





   JLJac on February 09, 2015, 06:17:33 AM:

Yeah def! Would probably go under the same framework as lizard infighting, which I haven't gotten to yet. But it's a confirmed feature!

I also had this idea that if you hit the Vulture in the head it could lose its mask, and an unmasked individual would be attacked by other vultures. Still haven't really decided on that one though.

Update 394

Working on vulture-lizard interaction. Here's a gif, there's quite a bit going on here so I'll do some explaining below ~



What the heatmap shows is the anticipated threat level for each tile in the lizard's threat tracker (note that I don't store this data, I generate it on the fly. So the framerate drops quite a bit with this visualization, but when the AI uses it it doesn't ask for every tile, just for relevant ones).

The lizard is inside the little box, which is open in both ends. This box is a sort of temporary shelter, because the vulture can reach in there with its neck - but it's juuust short of being able to reach the whole width of the box.

Basically the lizard merges two sets of data to get this map, the distance to the threat (naturally) and an Accessibility Map. See how the tiles close to terrain are bluer? And the tiles inside the box as well? That's one of the pre baked AI maps, the Accessibility Map, for the vulture. It allows the lizard to understand that inside the box is more safe than outside it. As you can see it's staying in the box, although nervously.

Also you might notice that all terrain has some bluer tiles around it - that's just because the vulture is big and close-to-terrain tiles are considered inaccessible to it for that reason. This might actually need fixing, because just because the vulture's center of mass can get close to a floor doesn't mean its neck is unable to.

The amount with which the Accessibility Map weights in on the final threat map scales with distance. You can see this particularly clearly when the vulture moves down towards the lower-right platform, the "safety" of the tiles surrounding the platform is removed.

This is the same effect that also finally drives the lizard out of the box. When the vulture does its peek-a-boo over at the left side, it's much closer and the safety of the box interior is disrupted. Now the danger gradient inside the box is steep enough for it to be worth it to dash for the other exit. So the lizard goes for it and heads for the room exit up in the corner instead.

You can also see how the lizard's perception of the vulture's position is only updated when there's visual contact, which is why the heatmap is static while the vulture is moving below the box. In actuality the map shouldn't be still during that time, it should move with a Ghost of the vulture that the lizard tracks. But right now the Tracker has some problems with creatures that can move on big 2D planes - it considers each tile 4-way branch and immediately spawns up ghosts to follow all of them, hits the ghost cap and makes the ghosts stop. So it becomes more of a simple "where did I last see the creature" kind of thing. I'll get around to it.





   JLJac on February 10, 2015, 12:44:58 AM:

Tanks guys!

@tanis,

Here's an old gif of the tracker in action:



some stuff has happened to it since, but the basic principle is the same. Basically each ghost represents a "guess" for where the tracked creature probably is, and the search behavior consists of checking them one by one in order of likeliness.

While we're on this topic, how do you let the vulture know that he can drag his body in a certain area because there's enough room for it?
It can only path through tiles that are at least one tile removed from any terrain - as you can see in the heatmap thingie. A kind of blunt way of doing it, but it's been working so far.

And why is the lizard going to that platform instead of fleeing down for example? Is it due to the heat maps that you already baked with the information about which places are favorable for predators?
It's due to a million things  Tired The behaviors are such tangled messes by now that I rarely have the slightest what's going on any more. When fleeing, the lizard considers heading to some place on the map, or heading to the exit. Each of these considerations are weighted with how dangerous they're considered, and one is chosen. Then the path finder is told to find a path to that destination. When path finding starts, each tile it paths through is asked how dangerous it is, meaning that the threat tracker influences the path finder. The path finder, in turn, may take the creature on one route or another, which influences the Tracker by having the creature see or not see other creatures. The tracker influences the threat tracker ~~~ And each of these steps interact with some other modules as well. Debugging is always a delight.

Update 395
Cleaning up some vulture stuff, mainly. I've been trying to have the vulture picking up the player, and make its way with the player back to its den with the camera following it. I'm getting there, I hope, but there are some problems still. The vulture seems to have trouble actually finding its way to the den once entering a room. My theory is that this is because the room does abstract space path finding even though it's actually realized... But I don't know yet.





   JLJac on February 10, 2015, 07:05:00 AM:

@JLJac thanks for the super detailed answer!

Quote
Basically each ghost represents a "guess" for where the tracked creature probably is

How do you actually guess the different positions for the ghosts? Is it random or are you taking into consideration the speed and direction of the tracked creature?


Quote
The behaviors are such tangled messes by now that I rarely have the slightest what's going on any more

Eheheh! I soooo understand you there! Been there, done that! :D

Quote
When fleeing, the lizard considers heading to some place on the map, or heading to the exit. Each of these considerations are weighted with how dangerous they're considered, and one is chosen. Then the path finder is told to find a path to that destination. When path finding starts, each tile it paths through is asked how dangerous it is, meaning that the threat tracker influences the path finder. The path finder, in turn, may take the creature on one route or another, which influences the Tracker by having the creature see or not see other creatures. The tracker influences the threat tracker ~~~ And each of these steps interact with some other modules as well.

How often are you reevaluating the path? I suppose you're not doing that each frame as it would probably be overkill. Do you do it in the same game loop as the rest of the "brain" of the creature or are you using a different thread for such operations?


It starts at where it last saw the creature, and moves in the creatures last seen movement direction. At each division in the path, it creates a copy, meaning that the more the path forks the more copies, which is why an open plane makes it hit the cap right away. Copies that go in directions similar to the last seen direction get a higher score, as well as copies generally closer to the last seen position, and some other factors.

The path finding algorithm doesn't really do cycles as in calculating an entire path and then wait a couple of frames - rather it churns along constantly as the game is running, meaning that the creature is following one path as the next is being generated. Path cells have a "generation" parameter, and the creature always follows the newest paths.



Yeah def! Would probably go under the same framework as lizard infighting, which I haven't gotten to yet. But it's a confirmed feature!

I also had this idea that if you hit the Vulture in the head it could lose its mask, and an unmasked individual would be attacked by other vultures. Still haven't really decided on that one though.
You could do both. Masked Vultures fight not to kill, but to establish dominance: once they understand who's stronger, the weaker one leaves. Unmasked Vulture is a target they want to kill.

Although, to be honest, losable mask doesn't really make a good sense from biology perspective, especially if it brings such serious consequences for the creature. It would be more sensible if it could become cracked, which would make creature lose recognition and force previously established social position to be re-established, forcing more fights between them.

Alternatively, you could use detachable mask not as much as debuff of the vulture (you lose position in the hierarchy, but you're not hunted to death), but as a rare item for the player. I imagine it being used to scare other creatures away.

This is a good idea, though I think the subtlety of lethal/non lethal combat between non-player entities might really be lost in the wind. Maybe if they both have masks they could "dance" to establish who gets to scram, but if the mask is off it becomes actual fighting. Buuuuuut this is extra cool stuff, not something to get into when crunching a convention build.

I sent this mockup to James a while ago:



but I don't quite know. Sure, it looks pretty cool, but I'm super hesitant to humanize the slugcat further. Wielding the spear already reduces its animal nature quite a lot, and having it actually dress up in little outfits puts the last nail in the anthropomorphism coffin. Idk...  Huh?





   jamesprimate on February 10, 2015, 09:02:58 AM:

definitely not an essential topic just yet, but dragging around creature parts and, uh, corpses, for various effects/interactions with other creatures is a game mechanic that we've talked about for a long while, so the vulture mask seems as good a place to start as any!





   jamesprimate on February 10, 2015, 11:23:33 AM:

^ all the pathfinding stuff is talked about super in-depth earlier in the devlog. take a look through!





   JLJac on February 10, 2015, 07:04:35 PM:

Sure, it looks pretty cool, but I'm super hesitant to humanize the slugcat further. Wielding the spear already reduces its animal nature quite a lot, and having it actually dress up in little outfits puts the last nail in the anthropomorphism coffin. Idk...  Huh?
IMO:
It's not wearing the mask, it's holding it in both hands so it makes quite an impact on mobility, and also wobbles back and forth a bit. It scares other creatures on sight, but they soon realise there's no vulture attached to it and resume their normal behaviour. It's not a smart bomb or invincibility shield, but it could be worth dragging one for a few screens to shoo away a particularly recalcitrant lizard. But because it restricts mobility, you probably have to drop it in order to take advantage of its effects.

In terms of intelligence, the slugcat doesn't think of it as "wearing a mask" or assuming an identity, just that carrying the object has an effect.

EDIT: I should post here first instead of on Gaf :D

This is excellent! It gets the point across without turning the game into an equipment game, and it ties in super neatly with the item carrying mechanics already in place. It can also make the mask sufficiently powerful to make the effect clearly noticeable without breaking the game, as it occupies both your hands. Thank you very much, I'll go ahead and do it just like that if you don't mind  Grin

In other news  Tears of Joy Tears of Joy Tears of Joy The incredibly unrewarding trudge through vulture path finding stuff seems to have actually come to an end :D This morning I found a bug that seems to have been causing quite a lot of the problems, and after that stuff started to untangle. Just a few minutes ago I saw for the first time a vulture catch me in an enclosed area, and carry me outside (with the camera following us through the room exits), take off, and arrive at the place where it had its den. Then stow me in the den and emerge a bit later, taking to the skies again. It was beautiful  Tears of Joy





   jamesprimate on February 10, 2015, 07:50:18 PM:

^ fair warning though: there are still a few biiiiig hurdles. tonight im going to attempt to run all 4 regions connected together and see what the hell happens. this is one of those big "well i sure hope this all works" sort of moments, so if my computer doesnt explode ill report back with findings!





   jamesprimate on February 11, 2015, 02:26:59 AM (Last Edit: February 11, 2015, 09:19:33 AM):

mega_world region combining update:

so the good news is that my computer didnt blow up, even a little bit! running rain world with the 4 simultaneous regions was totally possible, and even playable to a certain extent. but the bad news is that, unsurprisingly, running 100+ interconnected rooms simultaneously with dozens and dozens of active AIs all moving about creates some pretty serious performance drag. and if that's only 1/3rd of the content were aiming for, seems like zoning or a more region-based AI realization is almost certainly necessary.

fortunately we've planned for this. the game is already divided into large regions which we know work just fine, and in fact just this evening we were discussing the aesthetics of region transition gates which will be implemented anyway, so everything is there for zoning already. other than some vague "world spanning event" ideas discussed, this doesnt change anything really. plus, even if the huge perpetual world concept DID wind up somehow working for PC, we very likely would have had to go this route anyways for some of the consoles we are planning for, so seems like this is the right direction to build in regardless.

joar is checking it out to make sure that its not randomly something else that's creating the slowdowns, and after that we'll talk it over and make a plan!

anyway, here is a screen of the abstracted room overlay when running the 4 regions:


and thats only what would fit on the screen of course! it goes on and on and on XD

***UPDATE**
Apparently in Joar's build, these slowdowns aren't a problem. So that is a good sign! Perhaps the slowdowns I'm seeing are related to some other issue that has since been fixed. That would be quite nice! There are other minor issues, but at least for the time being we may not have to chop up the world just yet. Which is GOOD because we have plenty of other things to do Tongue





   jamesprimate on February 11, 2015, 09:56:57 AM:

But I already have Norton Antivirus installed?? Wink





   jamesprimate on February 11, 2015, 01:59:23 PM (Last Edit: February 11, 2015, 04:19:57 PM):

as ambitious as it may sound, yep thats the idea! or as near to that as we can reasonably get. Joar's concept is the entire world active as a constant interactive and autonomous ecosystem that is steadily roiling around in the background as you play through: creatures hunting creatures in distant lands as you make your way through, so by the time you arrive all manner of unexpected strangeness has happened. All that effort spent in the engine creation months ago on abstracting off-screen AI behavior to state descriptions was to make this concept (hopefully) CPU feasible when scaled up.

Hiccups in this 4-region test aside, i think thats still generally the game plan. There may not *really* be a need for the game to keep track of 600ish eventual rooms filled with creatures existing at every moment though, so thats something to get a plan for. But, ideally we could tackle that at a time when we're not already super crunching to get a stable build together for PAX  Tired

back to questions about the interconnected map stuff, if you are interested here is an older working concept world map. things have evolved far enough from this that im comfortable sharing it without fear of spoilers or anything, and it shows you the general idea of the large interconnected world:



Each color represents a region, and each square a screen, with grouped squares being multi-screen rooms. The regions geographically located next to each other are all connected, but there are also a number of fast-travel-esque connections between distant regions as well. The concept is that each room is a sort of movement puzzle to get through, and each region is its own puzzle of those puzzles, exploring various gameplay elements, geometries and creature territories, and then to get through the world you basically have to navigate a puzzle of puzzle of puzzles.

But as it is now, the 4 regions we currently have hooked up are roughly equivalent in size and complexity to the scope of this entire map!  Shocked

i think the final version will probably keep people occupied for a while.





   JLJac on February 12, 2015, 02:01:21 AM:

Haha yeah, as James says, we are about at the scope we originally planned for the entire game right now, and we don't have half the areas yet. More like, a fourth. So ... That's that. This thing is gonna be vast o___0

Update 396

I've been running the MEGA WORLD today, and doing some profiling etc. My basic take away is that at this size, it would be theoretically possible to have the entire world run simultaneously, but it's really an edge case - and with more content coming up, we're going to have to divide it somehow. Either that or some sort of lazy loading of rooms. I'm not all that keen on either, because they do mean more systems that can entangle themselves in other systems, bug out, etc etc. The cleanest possible solution for this would be best. Abstract space/realized space division is already a mess, and adding one more layer of abstraction like that seems bad.

What slows stuff down is basically two things: creatures finding paths offscreen, which is kind of expected and not very problematic - I've not optimized that stuff at all, and there's potentially a lot that can be done - and loading of rooms files from the folder. This latter one puzzles me. It should take exactly as long to load a file whether there's a big world or a small world hanging out in RAM, to my knowledge.

The other weird thing is this - if I have a small world, and 5 rooms realized in it, everything runs as supposed to. But a huge world, with still only 5 rooms, it will spend twice as long updating those rooms. In the method's "self" - not delegating anywhere. I have no idea what's going on here. Could it be that having all of the abstract rooms in RAM somehow... idk, makes the processor slower? The rooms already have waaaay more data stored in their AI maps than the abstract rooms put together can ever compare to, so it really is an enigma.

Other than that, fixing, brushing up, sorting out. Today I spent some time messing with bats getting stuck at room borders, which became a lot of trouble in the new Chimney Canopy area which has a lot of open room borders. Also tried to make bats get stuck less in terrain and look overall a little more competent. Don't know quite how successful I was, but some stuff got better, definitely.

And, widescreen:



Playing in widescreen is pretty damn sweet actually! It feels like my eyes were opened for the very first time! I'll probably never be able to go back without suffering horrible claustrophobia.

Still some work to do on the widescreen stuff - water isn't completely comfortable with it yet, and the shaders need a little bit of adaption.





   jamesprimate on February 12, 2015, 03:21:18 AM:

Uh... aren't you guys afraid of feature creep at all?

oh make no mistake: we are most certainly, definitely, 100% squarely in the sticky clutches of feature creep. not so much as a result of any recent things, rather promises made to backers during the heady rush of the kickstarter.

the game world being large is neither here nor there. It will take a while to get through doing all the levels for sure, but that at least is a clear grind path for me and the cost:benefit is fairly high. but we have yet to work out some big technical stuff, things like large multi-screens, darkness and split-screen co-op, plus there is a list of backer-suggested creatures a mile long each of which will take a decent amount of time as Joar (quite understandably) only wants well-thought-out, well-realized creatures in this game we've been agonizing over for years.

that said, from there everything else has been going pretty much to plan, almost shockingly so. as its just two people sometimes linear progress can seem a bit slow, but we are definitely chugging along!  Gentleman





   jamesprimate on February 12, 2015, 12:20:26 PM:

Seriously, though. I love how you guys are like "this was the whole map for the old game" and now are like "well, the new game already covers that map... it's gonna be like 5 times bigger than that old one. We hare way over our heads." Tongue I kid.


well, i mean, TRUEE... but also that was concept stuff put together before we had done any level work done. Actually putting together a region and getting a feel for the scale we wanted to convey was much more important than my little boxy map sketch Wink Once we had the SU map put together it was pretty apparent that this was the way things were going to go.

so Joar just mentioned the widescreen addition casually in the last update, but WOW was that a huuuuuuuuuge addition. The entire game has been built around 16:9 format from the start, the geometry of every room and screen was structured around it, but I think we were so used to our little 4:3 alpha window that we didnt even realize what we were missing. Fortunately our earlier selves planned this out well!

Long story short: the game plays SO MUCH BETTER in 16:9, how its supposed to be. You see paths and lizards and creatures that were previously off-screen, sometimes before they see you, giving you time to plan actual sneaks or escapes like you are supposed to! Plus you can finally really watch the ecosystem interactions that Joar has been working forever on, things like spotting a vulture and waiting for it to to swoop down on a group of pink lizards before you make your move through a tricky room, etc.



Plus the scale just POPS. I've been building these rooms in 16:9 but other than in a little schematic preview window in the editor, havent been able to see the full picture until now. tears of joy  Tears of Joy



This does, however, mean that I now have tons of touching up to do on the levels. Surprisingly (to me!) most look prettttty good, but there are definitely a few that have un-tiled portions or some other unfinished aspect out there in the wings where I couldn't see before. Also, it highlights a few other ares of roughness like the camera switching which could use some polish.

But that said, HUGE step forward.






   jamesprimate on February 12, 2015, 01:54:27 PM (Last Edit: February 12, 2015, 02:42:15 PM):

it is a little tricky to visualize I imagine, and is complicated further by the multi-screen rooms. i dont have time to do a full write up on it today, but here is a quick and dirty screenshot comparison:

*ignore what looks like a difference in height between screenchots, thats just the limits of TIGS image preview width. widescreen will be the same height obv, just W I D E R*

4:3




16:9





now for single-screen rooms, its not that big of a difference other than the added scale and visual canvas size that the widescreen camera shows. the playable area remains the same in both 4:3 and 16:9 regardless, etc etc. but it becomes a big deal for multi-screen rooms which are more the focus of the game as it progresses.

previously (as you know from the alpha), you would switch the cameras in multi-screen rooms by going off-screen just to the left or the right (or up/down, but not relevant to this example), the camera just follows you at the edge of screen border and it works okaaaay. but when hungry lizards or other creatures might be waiting just off-screen to snatch you up, you'll sometimes just get eaten unfairly. with the widescreen 16:9 you can see well beyond the camera switch point to avoid nasty surprises and have room / time to plan your moves accordingly. also it allows for better platforming, as room movement puzzles can take up more physical space, you can jump from one camera to another and see where you are going/landing, etc. all in all just *everything is better in widescreen*

whats interesting though is that because of some of the consoles we are targeting (PS Vita for instance with that tiny screen), we have to develop everything for 4:3 and 16:9 simultaneously. So its probably good that we spent as much time with 4:3 as we did. Now is the time for 16:9 to shine though!

ok, enough of me putting off these room touch-ups. back to the level editor pit!





   jamesprimate on February 14, 2015, 03:10:23 AM:

right now im going back into first region i did, Suburban, and touching it up. both for the new widescreen look and to bring it up to the skill level of the more recent regions. its tedious work, but man the results are worth it:


detail: https://i.imgur.com/6damPma.png

as alpha players know, there aren't too many multiscreen rooms in that first region, so i want to make them count!





   JLJac on February 16, 2015, 05:49:08 PM:

Update 397

Shelter gates!



This animation has been sort of insane to get working, but by now I'm pretty happy with it. The segments move in at intervals that's a bit randomized, to give it some variety as you'll see this one a lot.

Futile is not rendering my pixel art pixel-perfectly, which annoys me. At the edges of the sprites it picks up color from the 0% alpha pixels outside of the sprite, and blends that in with the color that's supposed to be visible. Also the sprite edges flicker when the sprites move. Oh well, PAX is coming up and I better keep moving. I'm sure I'll be able to sort it out later.





   jamesprimate on February 17, 2015, 11:29:50 AM:

I think "excessive" is exactly the point!





   jamesprimate on February 17, 2015, 02:36:30 PM:

futile is a code based 2D framework for unity. basically it lets Joar skip all the module "click and drag" stuff / editor limitations and work directly with C#, but still use the unity platform for its strengths: publishing and compatibility, etc. its definitely pretty rough, and a lot of stuff has to be made from scratch (like, even the audio engine needed significant expansion to be usable), but works so far!

https://github.com/MattRix/Futile





   jamesprimate on February 17, 2015, 03:39:42 PM:

oh rain world is definitely is a 2d (ish) game, and the only way we could really do that in unity while retaining the "rain world look" when porting from the previous engine was with futile! so thank you Matt Rix, wherever you are  Beer!





   jamesprimate on February 17, 2015, 04:43:18 PM:

i mean the results so far are pretty dang good from our perspective, but took like a solid 8 months or something of Joar slaving over it to it get it up and running and honestly is still ongoing process. "port" is probably the wrong word really, more like "complete engine rebuild/upgrade/re-imagining". but hey were pretty happy with how its turning out so ¯\_(ツ)_/¯





   jamesprimate on February 17, 2015, 06:36:32 PM (Last Edit: February 17, 2015, 06:49:06 PM):

kind of a deep question!

as far as the rain world look, if you check out the first pages of the devlog... thats the look: 2d, refined pixel art-esque combination of 20x20 sprites and physic simulation animation in a layered diorama style environment. thats what caught peoples interest and thats what they backed on kickstarter and thats what got us a publishing deal. so we couldnt very well switch over to something like vanilla unity, which is a straight up 3d engine, and do a totally different looking / playing game.

even for "2d style games", unity just places a camera to the side of a 3d environment, using 3d meshes for textures, creatures and environments. it wouldnt work at all for the per-pixel animation style that Joar does. so yeah, the pixel art aspect, but also everything else about the look and engine really. we would have had to make an entirely different game from scratch and everyone would have hated us, so again praise be to Matt Rix, hallowed be his name! we get to use all of the original development tool kit that Joar developed for the lingo build: level editor, tiles, geometries, etc etc, and just place it into a modern game context, which is pretty dang amazing.

you might then ask "why port at all?", and the answer to that is the old programming language that was used for the original build (lingo) isnt compatible with modern systems/platforms/etc and just wasn't capable of the scope of the game we wanted to make. SO... 8 months of hell. But hey, here we are!





   JLJac on February 19, 2015, 01:48:16 AM:

I think the unity tools would have been totally useful, but I tend to think that trying to work with and around "user friendliness" is more annoying than doing more stuff myself - which is obviously 100% personal preference. And obviously just to a certain level, I'm super happy about not writing RW in assembly. I absolutely believe that everything I've done so far would be possible to do in actual Unity, but I think I would've been more frustrated at times haha. Not to say that frustration has been at an even zero as it is  Cheesy

Update 398
James and I are working on a build to show at PAX, so a lot of the stuff I've been doing is bug squashing and trying to make features already present more presentable, which is why updates are a little sparse lately.

Today I did however do some fun stuff! A few of the old special moves made it back:

This is the skid - if you run a while in one direction and then change direction the slugcat slides a little. The gif really couldn't capture it, here it just looks like some droplets, but the actual feeling when you play is rather prominent. I guess some sort of intimate eye-hand interaction has to be at play which doesn't really come across if you're not playing what you're seeing. Anyways...



If you jump while skidding, you get the backflip:



Which is cool for obvious reasons  Cool

Then there's the roll, which is achieved by holding down + a direction when hitting the ground. Doing the roll saves you from that little stun that can happen when falling from higher altitudes, and gives you a little speed boost in the direction you want to go. You have some control over how many times the slugcat rolls by holding the down key - if you release early you get just one roll, otherwise you get two or even three.



You need some height to get the roll, you can't do it from just jumping on a flat floor.

Jumping out of the roll makes for a special jump, where the slugcat flies like an arrow through the air.



Depending on how long you maintain the roll, this jump acts a little differently. You could say that it's charged by the roll, so there's an interesting dynamic at play: You want to maintain the roll longer to get a more powerful jump, but if you wait too long the roll is exited and you get no jump at all.

The backflip ties in with the roll, meaning that from a backflip jump you can get the roll even if you're not falling from high up. This means that all of the moves I added today can be chained together, which looks pretty cool:






   jamesprimate on February 19, 2015, 02:37:19 AM:

 I LOVE THESE MOVES SO MUCH





   JLJac on February 19, 2015, 08:30:06 AM:

There will be a few more moves definitely, but not too many. The game should be about using a limited set of moves to maneuver creatively, not about memorizing a huge library.

Update 399

An old friend is back!



I have a decent implementation of the white lizard in now. The camouflage is working, and the different - way more passive - AI is running as well. Neither is top notch yet, but pretty functional.

I was thinking about doing the camouflage as some super high-tech shader, and I'm still considering an implementation like that, but... Actually I'm pretty fond of the flat color silhouette. It fits in with the art style better than shader madness, and actually it provides a pretty perfect amount of actual camouflage for gameplay purposes in my opinion. So, maybe I'll leave it like this for now at least.

For those of you who haven't read this devlog for years and years, the lizards come in different colors with some different traits. The white one is a chameleon that sits and waits instead of pursuing you.





   jamesprimate on February 20, 2015, 03:43:20 AM:

do it! people are going to need it  Cheesy





   JLJac on February 23, 2015, 12:42:47 AM:

Update 400

More old friends are joining us!



These guys mega janky still, they could use a lifetime of polish. But, as there isn't much interaction with them, the jankyness isn't game-breaking, so I'll move on for now.

I've always like the Garbage Worms because they're weird and because you don't really interact with them. It adds to the atmosphere when you enter a room and see this weird creature and don't really know if it's dangerous - and then you realize that it doesn't want anything from you, it just wants to live its own weird life in peace. It adds to the lived-in-ness of the world, somehow.



Yup, the animations need to be smoother. Moving on moving on, I'll revisit them down the line.





   jamesprimate on February 23, 2015, 04:08:20 AM:

GARBAGE WOOOOOOOORMS! how i have missed them. you dont even know how many times i had nag Joar to get them into this build  Cheesy

are those worms non-attacking?
I love it when there are creatures in a game just to flesh out the ecology of the environment

we have some plans for the worms (though exactly what depends a little on how some other things turn out), and the one of the upcoming regions (garbage dump) features them pretty heavily. but for this build at least they are just interesting background creatures doing their own thing, eating some garbage (or whatever). their movement and alien vibe creates a really cool mood though, and even just the mockup Joar did of them in the old lingo build was a highlight for me, so i cant wait to get hacking at some geometries for them!

the interaction in the water looks even better than i imagined!  Tears of Joy





   jamesprimate on February 23, 2015, 06:00:24 PM (Last Edit: February 24, 2015, 12:56:05 AM):

So guys. Oddball question here, but what are the odds of you putting up a download for the old alpha? Say, the one from the "slugcat life" video, or whatever it was prior to porting to unity. It may seem odd, but I kinda want to try it out, just to see how far its come. If not, do you think that there will be an option to play the old version in lingo when the game is finally released?

i think we might! probably wont do a big announcement about it, but for people who are interested and can understand that "this is the previous prototype alpha, NOT the actual game", it would be cool to show how much things have evolved. a lot of the single player in the lingo build is pretty much just a playable mock-up so not terribly exciting, but the mutiplayer is still totally relevant (and fun!)

one concern is that we kind of dont want streamers to get a hold of it and give people the wrong impression about where we are with the graphics and experience, cuz were light years beyond that now Smiley





   jamesprimate on February 24, 2015, 03:09:23 AM:

adult swim has some big streaming planz for us, but before we do any of that i think we want to wait until we have competitive multiplayer in for exactly that reason. 4 player multi with all these new creatures is going to be INSANE and we def want that to be a big part of the first impression.





   jamesprimate on February 24, 2015, 05:14:41 AM:

I have the utmost respect for the work you and Joar have done on this game, and even more so for the lightspeed pace it's done at.

Shocked

i literally dropped my mouse on the ground from the shock of someone saying that were developing quickly. you dont even know how relieving it is to hear those words! we feel like its taking forever of course.

and good considerations for the streaming. were totally interested, but just want to get the game into a shape were comfortable with first. that point is coming relatively soon though!


If I recall correctly, some MP plans involved playing as lizards, right?

eh, i dont recall that! unless it was an idea tossed out in a chat or something? definitely isnt in the GDD at least. were planning quite a few predators, and many of them with strange movement / hunting types, so its hard to see them as being playable. who knows though, were not there quite yet.





   JLJac on February 24, 2015, 08:16:51 PM:

...lightspeed pace...

 Tears of Joy Tears of Joy Tears of Joy
You're not mocking us, are you?  Cheesy

On the subject of streaming - as you say, very risky. If everything goes well, it could be a really cool way of reaching people. If there's some hiccup in the game that makes the streamer lose in some unfair way or something like that, that small little random occurrence could become a big problem. We'd have to be very secure and confident with the stability of the game. And as you also mention, atmospheric exploration is maybe not the best streaming material. That said Rain World does have a zanier side to it when it comes to creature interactions, and that side is further accented in the sandbox mode which will soon come around.

As for Lingo features, pretty much all of it will make it! Though some things might morph a bit to go with the new and more refined aesthetic. The red bubbles I don't really know about though, haha... If they make it in they're going to look quite different!





   JLJac on February 24, 2015, 11:39:30 PM:

Update 401

I'm pretty happy today, because I had a bit of a breakthrough in the lizard behavior. As players of the alpha will know, lizards would tend to get stuck at times, especially in corners and tricky geometries involving slopes.

Here's a tip for anyone working with A*-following NPCs that tend to get stuck in loops. It's pretty much a magic fix, and super obvious, so it's really strange I didn't think of it earlier!

Keep a list of the last 10 or so connections selected by the NPC when moving. Every time you're evaluating which new connection to take, go through the list. If the connection is in there a certain number of times, don't pick it. If you exclude connections that occur just once you'll get rid of some options you might actually want, as there are natural situations where a creature might want to turn around and backtrack etc, so I recommend some higher number. I use 2 - if a movement choice has been selected twice or more in the last 10 choices, don't pick it again. Boom! Now the creature is simply not allowed to make the same choice over and over, it has to vary its behavior. And when it varies its behavior, it's sooner or later going to have to move away from the problematic area, and can pick up a better path.

The lizard getting-stuck-ness has been drastically reduced because of this.

In other news, gamepad support is in and working really well! We have made a build now that's our PAX candidate, and basically what I'm going to do these last couple of days up until the convention is cosmetics and little fixes to make the experience smoother.

I've been working some with the lizard/vulture interaction, and made it so that the lizards have some fear behavior that can be triggered in some situations. Their fleeing still needs some polish, at times it seems like they just forget that there is a threat haha. But things are definitely getting more refined.

Most of the stuff I'm doing now is polish rather than addition of new content, so not much in the gif compartment. As a compensation, I'll give you this truly horrifying situation instead:



Remember, no matter how hopeless it seems, you always have a choice! Like drown or get eaten  Evil





   JLJac on February 24, 2015, 11:58:30 PM:

Yup! See you next week  Grin





   JLJac on February 25, 2015, 08:13:45 AM:

I can feel them thinking.

Man, if you knew how much I've been trying to create this exact impression  Tears of Joy

@oldblood, you're too kind haha! Thanks for the encouragement though, it keeps us going!

@Prinsessa you're doing water surface physics? If you want to I can see if I can dig up the paper I used to get this thing going. I think I found in google scholar.

I've barely played the game since... forever, or at all, because it hasn't been a "game" for very long, but tonight I did a few runs. I encountered a situation I wanted to share with you because I want to brag about the game haha, but also because it spotlighted some of the goals we've been going for, and I think it's relevant to the design process as a template of the sort of situation we want as much of as possible.

Not all playthroughs are as good as this, some are still janky and buggy and kills you unfairly. With that disclaimer, here goes the brag story:

So I was moving about in Chimney Canopy, an aerial region with a lot of vultures. I enter a room, and see a vulture just sitting up in the corner of the room, looking at a group of bats as they're swarming. It's a really cool mood to it, this huge predator just chilling out for a while, idly looking at its little buddies mill about. (It was all probably due to some AI bug, but that's beside the point lol).

I'm like a deer in the headlights down in the other corner of the room. For a while it doesn't see me, but then its head turns and I see that it starts moving. So I just back down the entrance and leave the room. The last thing I see is that it unfolds its wings and take to the air, rather than pursuing me towards the exit.

In the other room, I pop out on a platform high up in the right corner. I'm momentarily safe, but I know that the vulture has not forgotten about me. It was just sitting there, so evidently it has nothing better to do than chase after me. At almost the same time as I, a pink lizard enters the room through an exit in the lower left corner. I get an idea.

I deliberately show myself to the lizard. The layout of the room is such that there's a shortcut going from the lower part to the upper part. The lizard bites the bait, and goes in the shortcut to get up to me.

I have some knowledge it doesn't have though. The vulture is on its way. As the lizard reaches the top part of the room, I jump down from my platform and scurry under cover. A moment later, the shadow of the vulture swoops across the screen, and the lizard is startled. The lizard doesn't get away in time, and given the choice of a prey that is right in front of it (the lizard) and one that it can't see any more (me) the vulture goes for the lizard, snaps it up and takes to the sky. I'm safe, both foes having been played out against each other.

The reason why I really liked this situation, and want to remember it, is because it defines what the rain world gameplay should be like ideally. The player is smaller and weaker than everything else, but by using wit and information advantages, the other creatures can be manipulated to your advantage. The situation relied heavily on the other creatures having relationships and interactions among themselves, contrary to only being aggressive towards the player. By being smart about it, I could turn two overpowered enemies into zero, without using any violence.

All of this is was heavily reliant on AI - as some of you might remember I've been talking about "trickability", i.e. the creatures being smart enough to be tricked or manipulated. It was really nice to actually see this play out, after all the work that has gone into it.

If the game has more creatures and more interactions, there will be more opportunities to do stuff like this. Using anecdotes like this, we can know what sort of behaviors to look out for, and then reinforce them. We still have a long way to go though - this sort of stuff should be the bulk of the experience, not a single occurrence that I'm so stoked about that I feel the need to put in on the devlog haha!

But it shows that the gears are starting to turn, and that the idea we've had is starting to be realized! Baby steps, but I'm really excited about how the game will play 5 more creatures down the line!





   jamesprimate on February 25, 2015, 06:20:39 PM:


This game is begging for a sandbox vivarium mode, where you can just spawn different creatures and watch them interact

sandbox mode was a big part of the lingo, where it overlapped with multiplayer: you would choose a game mode, room, number of players and what lizards you would play against, etc. so we definitely want to make that a big part of the game! the concept were running with now is tying all that it in to the single player game progression, so as you go through the game you can unlock additional rooms / creatures / etc to add to the sandbox/multiplayer mode.





   JLJac on February 25, 2015, 06:27:46 PM:

Another pretty fun thing I've been doing sometimes when developing is "documentary mode", where I just tie the camera to some creature other than the player, and follow it during its cycle. You can see it hunt, catch prey, bring the pray back, etc. Maybe that could be made into a screensaver or something - if you're okay with a screensaver that runs your processor on turbo and has the fan sound like a jet engine is sitting on your desk.





   JLJac on February 25, 2015, 06:41:41 PM (Last Edit: February 25, 2015, 09:06:22 PM):

@prinsessa, actually rather than digging up the paper it's considerably easier for me to just post my source code for the water stuff, so here you go! Might help out some other people too:


    

Code:
public class Water(){
//These are the parameters used by the surface simulation. Expect to spend at least a day tuning them haha
     float   dx = 0.0005f * 20f;
     float   dt = 0.0045f;
     float   C = 1f;
     float   R = C * dt / dx;


     surface = new SurfacePoint[100];
     for(int i = 0; i < surface.Length; i++)
         surface[i] = new SurfacePoint();
}


public class SurfacePoint
{
   height = 0f;
   lastHeight = 0f;
   nextHeight = 0f;
   public SurfacePoint()
   {
   }
}

public Update(){
 float averageHeight = 0f;

        for (int i = 0; i < surface.Length; i++) {

            //This here is the fancy math from the paper, which I don't claim to understand in the slightest :P
            if (i == 0) { //special case first point
                surface[i].nextHeight =
                  (2f * surface[i].height + (R - 1f) * surface[i].lastHeight +
                  2f * Mathf.Pow(R, 2f) *
                  (surface[i + 1].height - surface[i].height)) / (1f + R);
            }
            else if (i == surface.Length - 1) { //special case last point
                surface[i, 0].nextHeight =
                    (2f * surface[i].height + (R - 1f) * surface[i].lastHeight +
                    2f * Mathf.Pow(R, 2f) *
                    (surface[i - 1].height - surface[i].height)) / (1f + R);
            }
            else {
                surface[i].nextHeight = Mathf.Pow(R, 2f)
                   * (surface[i - 1].height + surface[i + 1].height)
                   + 2f * (1f - Mathf.Pow(R, 2f))
                   * surface[i].height - surface[i].lastHeight;
            }

            surface[i].nextHeight *= 0.99f; //points should slowly tend towards 0, or the water level will change over time

            averageHeight += surface[i].height;

        }

        averageHeight /= surface.Length;

        for (int i = 0; i < surface.Length; i++) {
            surface[i].lastHeight = surface[i].height; //This line here is the necessary line. Below is some stuff I came up with to stabilize the system, it tended to flip out in some scenarios
            float h = surface[i].nextHeight - averageHeight;
            if (i > 0 && i < surface.Length - 1) h = Mathf.Lerp(h, Mathf.Lerp(surface[i - 1].nextHeight, surface[i + 1].nextHeight, 0.5f), 0.01f);
            surface[i].height = Mathf.Clamp(h, -40f, 40f);
        }
}





   JLJac on February 25, 2015, 09:07:35 PM:

I think they could make it in one way or another, they'd just look a little different! The old ones had some sort of early 2000's free flash game look to them with the radial gradients and all, I can probably do better now.





   jamesprimate on February 26, 2015, 02:14:33 AM:

I was thinking earlier that you could probably incorporate the old lingo red bubbles in some exclusive sand box levels which wouldn't necessarily have to be bound with the same cohesion as the rest of the world.

I think they could make it in one way or another, they'd just look a little different! The old ones had some sort of early 2000's free flash game look to them with the radial gradients and all, I can probably do better now.

you know, i hadn't really even considered the bubbles, but they do bring an entirely new (and fun!) gameplay mechanic relatively easily. i could see them potentially fitting very well in the design of at least 2 upcoming regions, plus as you say having them in multi / sandbox would be super fun. They've got my vote!





   JLJac on February 27, 2015, 01:42:57 AM:

@AxezDNyde Thanks for the explanation! I have a way better understanding of what's going on now. Love this sort of devlog interactivity  Grin Hand Shake Right

The *= .99 was actually added by me, for exactly the reason you mention Smiley I know the solution could be more slimmed, but actually the code I posted here was cleaned up, in my actual implementation I'm saving some other stuff as well for the surface points, why I'm keeping them as classes.

@Prinsessa, looking good! Really interesting to see how you use a different method to achieve a similar result. When you're done tinkering I'm sure we're all eager to know the result, is Gabe a witch?   Who, Me?

Update 402

Lizard infighting! This has taken the entire day, but I think I'm getting somewhere. The actual animation, i.e. how the lizards move, still needs polish, but the more general behavior seems solid enough.



Basically it goes like this - the lizards have an AgressiveRival relationship towards each other, of varying intensity. They're mostly aggressive towards others of the same breed. As they move around, they can get annoyed with each other, because of various reasons. If they're very aggressive, just because the other is too close, otherwise in situations such as the other being too close to the prey they're hunting, and in particular when they bump into each other and block each others' path.

If the annoyance goes high enough so that it's picked by the utility comparer, a Fight behavior is initiated. As this is mostly a display of dominance it's not really as much fighting as hissing, but if they end up in a narrow space it might get ugly.

When fighting, the lizard has a chance each frame to to send out a signal. I've set up a rudimentary system for inter-lizard communication, right now there are only two types of signals Aggressive and Submissive. The angrier the lizard is, the more Agressive signals it's sending to the other. On receiving an Aggressive signal, the receiving lizard's annoyance is also incremented, making it more likely to return the Aggressive signals, and that way the conflict escalates. However, there's also a small chance upon receiving an Aggressive signal to return a Submissive signal.

When a lizard sends a Submissive signal, the conflict is de-escalated, and the submissive individual gets tasked with leaving the room. For this I had to set up a new AI module called Mission Tracker, which will come in handy for a lot of stuff. The Mission Tracker can basically keep track of a bunch of tasks an AI entity has set out to do, such as travelling somewhere, or maybe in the future to hunt down a specific individual, search a specific room, or similar. The Mission has a utility, and if something happens to the lizard with a higher utility the mission can be dormant for a while, and then continued later. This means that now a lizard can for example be headed somewhere, but be interrupted by a threat, flee for a little while, and then when it's safe continue its Mission.

At the moment there's just one Mission implemented, which is to get out of a room. When the mission is activated a neighboring room is chosen, and the lizard starts to move there. Actually it tries to move two rooms away if possible, which will scatter the lizards all over the world to James' delight haha! James is generally trying to shape the play experience with level design, but my unpredictable critters tend to get in the way of that  Cheesy Maybe if it's too crazy I'll have to take a step back on that.

Anyhow, all of this basically boils down to a pretty simple behavior - the lizards will hang out, but occasionally get annoyed with each other, do a lot of hissing and maybe a little fighting, until one of them decides to scram with its tail between its legs. Hope this interactivity will make the game feel more dynamic and fun.





   JLJac on February 27, 2015, 08:11:08 PM:

@Dohman, we do have a similar system planned, where James will be able to define what rooms are considered attractive hunting grounds! Keep in mind that we're doing two things here, we're making a terrarium-like thing for sure, but also a game, so we are going to use some tools to shape the experience. For example it's more fun to encounter lizards in actual rooms rather than narrow corridors and stuff like that, and it also makes more sense for them to hang out there, which is why we're going to have them gravitate towards certain areas. Once that happens though, the dominance struggle will set in and some of them might have to settle for less attractive territories.

When it comes to the actual nutrition web part of the ecosystem, we're not doing that. There might be some starvation-like mechanism down the road, probably manifested in an increasing desperation for food, but we're not aiming to make a proper simulation of an ecosystem - it would just not be possible to keep it stable, and the effort would be humongous with really no payout in terms of player experience. As a scientific research project or something I'd love to go down that road, but here we're aiming to create an experience rather than an accurate simulation.

@AxezDNyde thanks! The refraction stuff is a little detail in the shader, the idea was that it was supposed to make stuff look wet, but I don't really know if it accomplished that haha! It still makes the environment looks more dynamic and alive though, so it'll stick around Smiley

@Christian, yup, they have different degrees of aggression towards members of the same breed and members of other breeds. Right now it looks like this:

Code:
        EstablishRelationship(CreatureTemplate.Type.PinkLizard, CreatureTemplate.Type.PinkLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.4f));
        EstablishRelationship(CreatureTemplate.Type.PinkLizard, CreatureTemplate.Type.GreenLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.15f));
        EstablishRelationship(CreatureTemplate.Type.PinkLizard, CreatureTemplate.Type.BlueLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.2f));
        EstablishRelationship(CreatureTemplate.Type.PinkLizard, CreatureTemplate.Type.WhiteLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.25f));

        EstablishRelationship(CreatureTemplate.Type.GreenLizard, CreatureTemplate.Type.PinkLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.2f));
        EstablishRelationship(CreatureTemplate.Type.GreenLizard, CreatureTemplate.Type.GreenLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.8f));
        //   EstablishRelationship(CreatureTemplate.Type.GreenLizard, CreatureTemplate.Type.BlueLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.2f));
        EstablishRelationship(CreatureTemplate.Type.GreenLizard, CreatureTemplate.Type.WhiteLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.05f));

        EstablishRelationship(CreatureTemplate.Type.BlueLizard, CreatureTemplate.Type.PinkLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.3f));
        // EstablishRelationship(CreatureTemplate.Type.BlueLizard, CreatureTemplate.Type.GreenLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.15f));
        EstablishRelationship(CreatureTemplate.Type.BlueLizard, CreatureTemplate.Type.BlueLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.45f));
        EstablishRelationship(CreatureTemplate.Type.BlueLizard, CreatureTemplate.Type.WhiteLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.25f));

        EstablishRelationship(CreatureTemplate.Type.WhiteLizard, CreatureTemplate.Type.PinkLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.15f));
        EstablishRelationship(CreatureTemplate.Type.WhiteLizard, CreatureTemplate.Type.GreenLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.05f));
        EstablishRelationship(CreatureTemplate.Type.WhiteLizard, CreatureTemplate.Type.BlueLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.35f));
        EstablishRelationship(CreatureTemplate.Type.WhiteLizard, CreatureTemplate.Type.WhiteLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.AgressiveRival, 0.25f));

        EstablishRelationship(CreatureTemplate.Type.GreenLizard, CreatureTemplate.Type.BlueLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.Eats, 0.25f));
        EstablishRelationship(CreatureTemplate.Type.BlueLizard, CreatureTemplate.Type.GreenLizard, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.Afraid, 0.25f));

But it still needs a lot of balancing, this is just something I quickly threw together. When the individual treats come around that will weight into it as well, some individuals might be more aggressive etc. In general this system could need some refinement, with separate parameters for a bunch of stuff, but it seems good enough for now!

@DarkWanderer, yeah there is occasional actual biting and stuff. Particularly if they end up fighting in a very enclosed area it might get bad. The white lizards actually won't be eating the blues, that was just a mocked up situation for fun. But in general, yeah, they have some knowledge about who's bigger, and they should be taking that into account even more as the system gets a little polish.





   jamesprimate on March 02, 2015, 03:14:04 AM:

*** Big New Kickstarter update: ***

https://www.kickstarter.com/projects/rain-world/project-rain-world/posts/1149924

Mostly old news to you loyal devlog readers, but there is a pretty slick new trailer video and some never before seen screenshots  Hand Metal Right





   JLJac on March 02, 2015, 04:38:10 AM:

Hahaha lizard infighting is apparently what everyone is here for! I never would've known!

The stuff with different fighting styles in different breeds is viable, but it might be complicated when they have inter-breed scuffles. Like if one tries to wrestle and the other tries to do something else. These behaviors can obviously be given endless polish, and maybe we'll go there, but not right now. Whites flashing colors at each other is a totally awesome idea though, and really easy, so I'm definitely adding that  Hand Thumbs Up Right

It would self-regulate then, like in nature x)
Doooooubt it hahahaha! If I have any experience with programmed systems it is that they always do the opposite, ie get stuck in a self-enforcing loop and fly out on a tangent. It could be possible to make it happen if you added a lot of dampers and clampers to basically force everything to be stable, but then you're not really running a simulation either way, so it'd kind of defeat the purpose.

Update 403
Working on giving lizards individual traits. It's difficult, as the most important thing still is that the breeds are easy to tell apart.

First thing I did was to set up a false bell curve distribution generator. I know that an actual bell curve is the effect of semi-random distribution, but here I'm backwards engineering it - I created a system that made the distributions bell cruve-like. The formula can be skewed to have a varying tendency of distributing towards the edges or bring in the results towards the average:



This is used mainly for random differences in color and size.

The next step was to map the "spine", or body mesh, of the lizard. This isn't so obvious as it might seem, as the lizard isn't one single mesh but actually consists of a body and a tail, and a head, and there are troublesome transition areas between all of these. After some fussing I got this result:



As you can see the system not only maps the points along the "spine", but also the perpendicular vectors of each point and the "depth-rotation" effect from when the lizard moves around.

When I got this spine mapping in order, the obvious first thing to do was a ridge of scales/bumps/spikes along the back of the lizard. Later I want to add more stuff, like maybe little tassels on the tips of their tails, or some feathery/scaly appendages sticking out of their shoulders, as well as different stuff that might be attached to the head rather than the body. At this point I have some individual variations looking like this:



I'm happy with where things are headed, and I'm having a lot of fun, but as you can imagine this stuff can soak up an infinite amount of work, so I'm going to have find some point where it's good enough for now.

As you can see I've already started working a little bit with the balance between individual traits and breed traits. For example the greens are more prone to have a comb of scaly things along their back - the pinks sometimes do, but it's generally smaller and less colorful. The greens tend to have the more "feathery" appendages, whereas pinks usually have the "spiky" ones, when they do at all. This here sample isn't the best to show it, but there are some differences in how fat/skinny they are, compare the two leftmost pinks on the second row. There are also differences in head size and tail length/width, but that stuff had to be downplayed quite a lot as it made many individuals look absolutely ridiculous.

Here's a better example of skinny and fat specimens:



The fine balance to strike here is to make it so that individuals are recognizable while still keeping the breeds clearly separated. In this sample it's still visible (I hope) that the green is larger than the pink is larger than the blue, but the line is already becoming hazy - despite the individual differences not being super obvious! Apart from that there's the challenge of making all of them look good. In a sample of tens of individuals like this it's easy to be forgiving if one is not so hot, but if you have a minute-long encounter with a single lizard in a room and it looks goofy it's more problematic. So I'm anticipating it's going to be a bit difficult. But a lot of fun, for sure  Grin





   JLJac on March 02, 2015, 08:03:49 PM:

Thanks everyone Smiley

It would be fun if body size is randomized at each run. You know there is likely to be a lizard in this room BUT its characteristic might change.
James and I are having talk about to what extent the creature placement will be procedural. Our consensus last time we spoke was that there'd be a normal "new game" option in which the content is less procedural, and then a "new game +" in which the creatures (and other stuff!?) will be more procedural and more difficult. We'll have to see to what degree this is doable when we get there though.

@Woodledude oh by all means, don't keep quiet haha! If I didn't want to talk to people, why'd I run a devlog? Yep, the idea of a standard fighting style and a breed-specific crossed my mind. Might be worth it to go there, we'll have to see how much time people actually spend looking at the lizards idle behaviors. Scars are possible, but as you say it's a bit difficult to map textures to the creatures. Also I don't know how it'd work with the color restricted art style.

Update 404




More lizards! New for today is the scaly things with some physics interaction. Also I'm trying to get some breed traits down, right now the pinks tend to have some spikes coming out of their necks, greens has the mohawk, and blues have two lines (horns?) running down their body. All of these traits can of course in rare cases give way to individual variations. Also, please note how the pink up towards the right corner in the second image is fabulous. I'm actually pretty happy with the fact that there's random strange outputs like that, because I think it'll increase the narrative quality of the game if there are certain individuals that can be easily recognized.





   JLJac on March 02, 2015, 08:31:35 PM:

Yup, there'll be reds, and yup, I'm a little worried about how to keep the colors apart! Maybe I'll have to rely more on other features.

Actually the rotation effects are, in my opinion, strangely more clear in an actual game context. The differences between the individuals also seem to pop more when they're not all suspended on a grid:


(this amount of agression between lizards isn't normal by the way, it's because I pulled them all into the central room where they ended up in a big pile with a lot of biting, and the general annoyance hasn't worn of yet as of recording)

Yeah, blue needs some love still! Wasn't really thinking about it as "horns" as much as "lines along the body", sort of like how a chipmunks fur is colored, just that whatever this is connects to the head... Haha these are strange creatures, I shouldn't pretend I know what I'm doing. But yes, the blues need something more going for them. I think maybe tail tufts or something might just do the trick  Hand Thumbs Up Right





   JLJac on March 02, 2015, 09:06:52 PM:

Lizard colors are: pink, green, blue, white, yellow, red. There has been a little talk between me and James about a black one, but we have nothing solid on it.

Yellows existed in the lingo build, though I don't know if I ever made a gif of them - but yeah, they're pack hunters.

The purples seem to be the super-aggressive lizards of the bunch at the moment. How are the Reds different?
Just you wait - pinks will seem docile and friendly Evil





   JLJac on March 03, 2015, 01:28:30 AM:

Update 405

Worked on some tail tufts, and got some more exciting looks for the blues:



I was inspired by sea slugs and am pretty happy with the result, though it might actually benefit from a little toning down. It becomes a bit too much rio carnival in some specimens haha!

The pinks are also rocking the occasional tail appendage, though smaller and usually less symmetrical:



Other than that, I've done further individualization of the whites, which was a little bit tricky because everything had to be able to change color.



Speaking of carnival, look at this one  Cheesy



For the evening, the green lizard has picked a wonderful two-row shoulder scale formation, which goes surprisingly well with the spinal ridge! Quite unorthodox! And to top it off, a tail plume. This look is certainly straddling the line of tasteful, but we appreciate the bravery!





   jamesprimate on March 03, 2015, 06:17:53 AM:

we may or may not be uploading that right this second ;] ;]





   jamesprimate on March 03, 2015, 06:31:05 AM:

we may or may not be uploading that right this second ;] ;]

I guess I will not be working on my game this evening...

humble usually takes its time to get everything up and ready, so we may not have killed your productivity JUST yet  Wink





   jamesprimate on March 03, 2015, 08:43:06 AM:

in other news, the Rain World coming soon page is up on Steam with new trailer and screenshots: http://store.steampowered.com/app/312520




FOLLOW FOLLOW FOLLOW! WISHLIST WISHLIST WISHLIST!





   jamesprimate on March 03, 2015, 01:01:50 PM:

thx friends! the summer thing is a biiiiig maybe, but hey who knows. and yeah, all the info on the page is just temp stuff until we get the final specs, ect etc. we just rushed with adult swim to the page up before PAX.

idk if any of you guys have seen it, but teh back end of steam is *crazy*! like, imagine a system that has been in continuous use for pretty much every game since counter-strike... and yeah. i had to write batch files to upload stuff FFS!





   jamesprimate on March 03, 2015, 01:11:15 PM:

honestly, the only reason we've ever put any dates on anything is because "when its done" isnt an option  Shrug





   jamesprimate on March 03, 2015, 01:58:16 PM:

heck yeah we do!





   JLJac on March 03, 2015, 09:15:58 PM:

I think lizard species should be easily distinguishable by a 100% colorblind person. That's both a noble goal to have in terms of accessibility and an indicator of good visual clarity and vatiety. As for now I think it's still possible to mix them in some cases, but you're moving in the right direction.

Also, I personally don't like nearly white heads on white lizards. They always should be in contrast with the body.
Yup, the ideal would be that they'd be possible to tell apart without color. But it's not entirely easy, if individuals are to be identifiable as well as breeds. I'll work on it!

This is amazing! Seriously, looking at all that plumage is making me giddy.

One issue I'm having is that with the colour variation, some of the pinks look nearly red to me. I don't know if the reds will look radically different from the pinks, but in any case you might want hedge your bets and adjust the colour ranges of the pinks so that they don't hit red. Maybe head in the opposite direction on the colour spectrum and range between magenta/purple rather than magenta/red? That way you don't have quite so much of a problem distinguishing between the two, and red is pretty much exclusive to the really scary one.

EDIT:

Yeah, there is a lot of space between the purplest hues of the blues and the bluest hues of the pink, but the pinks are sometimes getting way too close to red. I've placed them there on the color wheel because I like the warm purples more, they contrast better to the typically cold colors of the background. Another issue is that the human eye's experience of hue differences doesn't perfectly line up with the RGB (or rather HSL) model of the computer - some portions of the color wheel we divide into many separate color concepts, while there's a good fourth or so that we generalize to "blue". I read some anthropology article somewhere that these divisions are actually heavily influenced by culture - western culture tends to see blue as separate from green, while many other cultures see these as variations of the same color, while being better at identifying the warmer greens. At the end of the day, I can't really do much more than going by my own eye. When the reds come around the pinks are definitely going to have to scoot over into the colder hues though, unless I come up with some smart workaround. Maybe the lizards could get a secondary color, similar to the vultures right now (vultures actually generate two hue-related colors, you might notice that the feathers are different than the shoulder pads) and create distinction that way.

looks like you are having a lot of fun! I was just wondering if all this extra cool stuff has any impact on performance? are the vultures going to have this sort of attention given to individual looks as well?
The vultures acutally do have a bit of this, the feathers on the wings, the "danglers" and the colors are all individual. But I'd definitely want to do a bit more. That said, lizards are definitely getting extra attention here, as they're the primary foe. I can't spend 5 days on individualization for every species in the game. But I hope for all of them (maybe with the exception of stuff like bats and leeches) to have some degree of it.

#early access, this is not really my desk as much as James', but I tend to agree that it's a different thing with backer early access and public early access. Backers generally have more insight in our development progress, and might be more well-meaning as they understand that it's a work in progress, and knows what is implemented yet and what is planned to come along, etc. Also I agree that Rain World is probably better experienced as a finished-ish product, I think we'd want to at least have the all of the areas areas and the more important creatures finished before release.

#pups, as for the name, nothing is concerning me less at the moment hahahaha  Cheesy Remember that the names won't actually feature in the game, it's just for the devlog and other conversations about the game. A piece of trivia though, I believe the pups were "pups" before the slugcat was "slugcat." When it comes to the actual gameplay element, yes sure we do still plan to include them! But as some of you have noted, the environments are quite hostile, so we might want to tone down the escort quests a bit. Perhaps the pups could be made more stationary, so that they generally hang out in a shelter and the challenge is more about bringing them food than about taking them from A to B. We'll have to see how it develops though.





   jamesprimate on March 04, 2015, 12:48:22 AM:

as Joar and I have discussed it, the pups have pretty much always been considered a really challenging but optional fork in the game. theyve been on the back burner for a bit as weve been putting together the more structurally important stuff (and will probably remain there for a while longer), but the idea were currently running with is that the pups open up certain narrative paths and figure more prominently into shaping the end game / NG+ experience. but, at least as we have it now, babysitting them wont be essential for progression through the game. because yeah its going to be SUPER hard  Well, hello there!





   jamesprimate on March 04, 2015, 03:17:55 AM:

^ worth noting is that the blinking effect is exaggerated in the gifs due to gif framerate being quite low. in game at 60fps+ the transitions are much smoother. less a blink and more of a pulse.





   JLJac on March 04, 2015, 08:04:29 AM:

@Caspar2000 Hey, so you can tell them apart by their shapes and sizes? That's good news then  Smiley But it might be a bit too ambiguous still? If you have full color blindness, feel free to stick around and interact as I work with the lizard cosmetics, your input would be really valuable  Hand Thumbs Up Right Work might be a bit slow for the next few though, because of travelling and PAX.

@tortoiseandcrow, yep, I feel the same, the one-color thing has something going for it. I was thinking that maybe secondary colors could work if reds have secondary colors tending towards yellow, while pinks have secondary colors tending towards blue - that way if the primaries overlap you'd still see a distinction between warm and cold in the overall color scheme. The idea about greyscale is really good, I should put them randomly on the grid in grayscale and see to what degree I'm able to identify them.

@RainWorldIsAwesome, awesome name there! If you could hold off on streaming just a little bit that would be great, I want to have a more in-depth talk with James about our stages of going public when I get over to Boston tomorrow!   Smiley

@Crispy75, thanks for the well thought through input! I think the reason why they are hard to track has a strange sort of connectedness to the reason why I like the effect. Let me try to explain, haha!

In nature, very few things change color before your eyes - an apple changes color, but super slowly, quick color changes would be like, a chameleon? An octopus? Super rare. So it sort of makes sense for human eyes to be optimized for tracking same-color blotches that move. I remember from somewhere that our sight (on a very close-to-hardware level) mainly tracks edges between colors and dark/light areas, and movement perception is tied to this. Neurons in the image processing part at the back of the eye (my english fails me here) light up mainly on the edge between one blotch of color and the other, and it seems fair to assume that neurons next to these edge sensing neurons would "expect" to perceive the edge soon after, which would be how very low-level movement perception works. I'm blabbering here, but anyhow. Given that things changing color are rare in nature, it's not too far fetched to assume that this process "expects" the color edge to have the same colors, and that maybe edge/movement perception is somewhat impaired by stuff changing color as they move? This would explain the results of the article you linked.

That was (my fantasies) about reality, now let's move to fantasy land! I'm trying to make a Neon Lizard. I want to somehow hint at some sort of biotechnological qualities, but I don't want to have like, nuts and bolts sticking out of them. Whatever is going on here is more sophisticated technology than that... Maybe? This is really fuzzy stuff, but I know what mood I want to get across. So, stuff changing colors are rare in nature, but common in modern technology. Screens change color all the time. The reason why I like the color pulsing of the lizards is this - that it brings in an alien, or artificial, quality. It makes it obvious that this is not "just an animal," it's some stranger entity which doesn't belong to the world we know.

You say that "practiced observers" have an easier time seeing the flashing lights, and I think I'm certainly one of them at this point  Cheesy That said, I personally don't have a super big problem tracking the lizards. I do experience some of it though, but I think that bit sort of enhances the experience - the lizards become a bit of an alien, unpredictable threat because of it, similar to some ghost in a horror movie. The (in my case very slight) difficulty to track them makes them more menacing, they move quickly through passages, all the while flashing, and with the next flash they might be closer than you expected.

Obviously "cool effects" never trumps actual playability, but I don't think it's that bad trying to see where they are? If a lot of people think it is, let me know! Basically I feel that the "worst case scenario", which would be the brief moment when the lizard is entirely black, is still not unacceptable, the black silhouette is fairly well contrasted against the background, and the fact that it moves while the environments are static also helps.

When many lizards (especially of the same color) pile up in a fight, it is definitely impossible to keep them apart. But is it really super relevant to know which is which in such a situation? It becomes a "pile of danger", which you just shouldn't get near to either way, and that's pretty much all you need to know. If you're interested in which lizard won the fight or something like that, they will eventually separate and you can look at them as distinct entities again.

This is my reasoning! Nothing is set in stone obviously, and if this is indeed a big problem we'll have to tackle it. Just wanted to let you in on why I'm feeling good with this design decision as it stands.  Smiley Hand Thumbs Up Right





   jamesprimate on March 04, 2015, 05:57:31 PM:

ah yeah there were def some problems with camera switching in that first build. its been fixed in a lot lot lot of instances, but still some occasional weirdness. let us know if you still see it in the next build! the bats should be much less undead too  Evil





   JLJac on March 04, 2015, 07:19:06 PM:

I'd imagine a biotech lizard would be really sleek: no frills, no spines or ridges, smooth, lithe, and efficient kind of how the slugcat is. An "iLizard" so to speak.
I'm not really going for the Tron look, I want way more biological presence than that. These things are to some degree creatures, but they have some alien element as well. It's a fine balance, and I think it'll require a lot of tuning still!

@Teod flickering like a light bulb for the default behaviors would be a bit too "nuts and bolts", I think! But they're supposed to flicker when they're injured, let me know if they're not haha!

How will unity5 will affect your technical design?
Oooah I don't know. But basically we're still only using Unity for Futile sprites and input, so if that stuff will still works, not all that much I'd say  Who, Me?

It ties in perfectly with how the game handles progression. There aren't HP bars floating over enemies heads, and they're hard to keep track of. But the more you play, the better you get at integrating the novel sensory input. Eventually you "see the matrix" and it's not an issue any more. You didn't buy a Lizard Detector spell, your actual brain got new skills.
Yep, this is exactly what we're going for. Potential to "level up", but not through some actual scripted functionality but rather through getting more familiar with this alien world and the game mechanics used to represent it.  Grin

@RainWorldIsAwesome, ohh, undead flies sounds menacing! Are you playing the old build, or the one just added? I.e. do you get fullscreen and a region select screen, or are you just thrown straight into the game? In the new build the bats should behave better, and the dead-end exits that take you nowhere and break the game should be fixed as well.

People, I'm getting on the plane in a few hours! So, those of you that are attending PAX, I'll see you tomorrow  Grin For the rest of you, stuff might get a little more quiet here for a while, but I'll try to check in when I have opportunity, and once PAX is over I'll get back to devlog interaction. Happy weekend!





   jamesprimate on March 04, 2015, 08:32:45 PM:

well we havent announced it yet, so thats probably the reason.





   jamesprimate on March 05, 2015, 02:38:13 AM (Last Edit: March 05, 2015, 02:44:23 AM):

Latest build is unplayable on my laptop Facepalm The last one had issues with the white background but this is a whole other level of weirdness

one of the reasons *we havent announced the build yet* is that we havent done much testing on lower spec computers. since you posted this, ive tested it on a few old / low end PCs that were laying around, and it seems to work fine on them (if a little slow.) it does require you to start it up, close the window, and restart to get the fullscreen running though.

can you describe the bug? i dont think there is much we can do now that we're in PAX mode for the next week, but will be good to know regardless.

oh and chris, if you want Vultures go to Chimney Canopy and RIP Evil





   jamesprimate on March 05, 2015, 12:02:13 PM:

Thanks thanks! Yeah some of those early Suburban rooms were among the first levels I did, and some are even from the lingo build! So definitely needed a touchup. That whole region will probably get some restructuring and reworking later down the line when it's placed in the context of the connected world, but this is definitely a step up from where it was.

As for the off centered bug, YEP that just happened the first time as the windo and shaders need a boot to align. Glad it works tho! White screen shader issue seems to be resolved too, which is a relief since Joar can't replicate it it was basically a stab in the dark XD






   jamesprimate on March 06, 2015, 04:10:51 AM:

I'm absolutely loving reading through all this  Toast Right





   jamesprimate on March 07, 2015, 05:16:50 AM:

Rain World maps are probably structually too complex to force the player to have limited line of sight, but maybe inside pipe = fog of war over other creatures would be a nice compromise?

we still have one game mechanic we'd like to explore that hasn't even begun to be implemented yet, and that's "darkness". the regions seen so far are all above ground or near surface subterranean where light is plentiful, but as you go much deeper into the ground the concept is similar to as you describe: a tighter, maze-like gameplay with limited visibility and lighting. BUT we haven't even tried it yet, so we'll see how it goes.





   JLJac on March 09, 2015, 07:19:03 AM:

Hi! Post-PAX me writing, so please excuse me being all tired and groggy @_@ We had a really good time though, and it was awesome meeting everyone! Grin Showing off the game went well, and people seemed to be able to grasp the controls etc pretty easily, so we're happy about that! Thanks to everyone stopping by!

Really cool to see you guys playing around with the alpha! Hope you're having fun with it.

On vultures in shortcuts, haha... Remember that even if the game has progressed since the last build, it's still alpha - nothing is set in stone. At this point pretty much every creature needs to spawn in a "den", which is essentially an un-marked shortcut, and because of that I made the vulture able to go through the shortcuts. Also I wanted it to be able to reach more areas, like even the rooms that are not connected to open sky, but maybe it's dangerous enough without that. I'll try out what it plays like to have the vulture unable to go through shortcuts, if it's better, we'll roll with that! I do agree that it's a bit weird that it can't fit in the 2-tile space between the metal beams, but it can fit in the shortcut. So basically, remember that it's an early version you're playing, we are going to try to sort stuff out  Hand Thumbs Up Right Hand Thumbs Up Right






   jamesprimate on March 09, 2015, 02:11:26 PM:

Oh don't you worry, there are quiiiiiiite a few more creatures coming up  Hand Knife Right  Hand Fork Left





   JLJac on March 12, 2015, 05:16:00 AM:

Really like the dropping down idea! That could give you some much needed speed in the tight areas.

Update 406

Our newest mechanic that we're really excited about - darkness!



Creatures also cast shadows:



And some creatures can emit light!



Note that we do not plan to have the main character emit light by default, in the game you're going to have to work with light sources. Just wanted to show off my shadow shader here, which is why I stuck a light to the slugcat Smiley

Shader seems to be fast enough - it doesn't require a second grab pass but can use the data from the first one, and the fake shadows look good in most situations. Sometimes they become a little bit detached from whatever is casting them, and as I'm sure you've noticed things that are technically in front of the light source cast shadows on the wall behind it. But just like with the Vulture shadow, mood and playability trumps optical correctness. The shader can use some more work though, and I would like to be able to make a directional light as well as the radial one, but just from thinking about what that shader code would look like I already know it's going to be an entirely different level of complicated...

Does anyone know according to what curve light diffuses? It's 1/r^2 right? Is there any good approximation that can be used within a finite radius? Right now I have (1-r)^0.3 or something, which looks a bit too steep according to me. If you just use (1-r)^0.99 or something like that you do get a smoother fall-off from the center, but the center itself becomes a sort of ugly "spike" of intense lightness that could definitely do with some smoothing. Maybe a gaussian curve? Is that insanity to attempt inside a shader?

Also, is there anyone with some useful tips on how to make things look glistening and wet? You sort of need normals for that, right? I'm pretty happy with what I have, but if the walls could look more slippery I would definitely like to give it a try.





   jamesprimate on March 12, 2015, 07:54:18 PM:

Games like Roguelight and Spelunky have pitch black levels, but rely on lighting like torches and flaming arrows to light the way. Personally I'd rather not have a glow-in-the-dark slugcat, mainly because I imagine they could do cool stuff with bioluminescence and glowing creatures and other light sources to provide enough light to progress but also be dark enough to provide a creepy atmosphere. And needing to light the way could almost be a puzzle aspect in itself
I don't know how it's done in Spelunky, but in Rougelight if you hit complete darkness you're essentially dead, unless you stumble upon some arrows by sheer luck. If you don't see your character, you can't control it. That's frustrating, not engaging, so the character should be visible. But that does not mean that anything around him should, so you can still have "light the way puzzle".

Agreed on all points. The way it's set up now is that without a light source the cat is clearly visible, but doesn't illuminate the surrounding area. Certain aspects of the terrain are somewhat visible, as are shortcuts, glyphs, etc, so moving around in the dark is SOMEWHAT possible without a light source, but platforming and spotting hidden predators is pretty much out.

This whole dark mechanic is stuff I've been dreaming about for over a year, so I'm MEGA PSYCHED its off to such a promising start! Plans plans plans...





   jamesprimate on March 13, 2015, 02:01:40 PM:

@James/Joar - Do you have the link to that arcade game you made while getting the hang of Unity? That was really fun, and I just remembered it while playing a similar game. Forgot the name of your's though

Yep! SPAAAAACE WOOOOOORMS!
Here is the link: http://joarportfolio.com/images/spaceWorms/spaceWorms.rar
And the update with info on it: https://www.kickstarter.com/projects/rain-world/project-rain-world/posts/792063





   jamesprimate on March 14, 2015, 07:52:04 PM (Last Edit: March 15, 2015, 05:04:05 AM):

Kotaku posted that interview from the twitter picture: http://www.kotaku.com.au/2015/03/natural-selection-has-been-very-kind-to-slugcat-now-you-need-to-help/





   jamesprimate on March 15, 2015, 05:03:35 AM:

(would have been nice if they used one of the updated trailers and more recent gifs/screenshots rather than the old lingo prototype alpha, but hey I'm not complaining)





   jamesprimate on March 15, 2015, 11:31:28 AM:

Ah yes! Creature eggs are still definitely planned. We'd like to make them an overlap between single player and multiplayer/sandbox mode, where discovering a creature egg and bringing it back to your den in single player / co-op unlocks that creature  for use in sandbox  / multi. Also possibly for use in a capture the flag mode sort of thing in multiplayer. So yes, big plans for the eggs!

As for logo stuff, there may be some news on that in the relatively near future  Smiley

We're just getting back from travels in the next few days, so updates soon.





   JLJac on March 16, 2015, 10:03:00 AM:

The way it's gonna work is that you'll be able to see the contour of your own character even without a light source, and you'll see the walls and whatever is in the foreground layer as well because these things will overlap the contour of the player character. I think we're going to have some rooms in the early dark areas that are hard to get through without a light source, but easy to get back out of, to make it so that you don't get stuck in the darkness unless you're particularly stubborn about going in there. If you are, however, it's no worse than hitting restart, the cycles will be fairly short so you won't lose all that many minutes of progress.

When it comes to bioluminescence, I'm once again not all that worried about the science of whatever is going on. I think of this as a cartoon universe, and mood is generally much more important than science - whenever "correct" physics and biology helps to serve the mood they're very welcome (as in the case with the water surface, the algorithm is lifted from a simulation paper because it "feels watery") but science takes the backseat whenever it's not compatible with the artistic vision.

Update 406

More messing around with the light shader. Added a bit of a highlight on corners facing the light source to make it pop more visually:



Trying different overlapping light sources:



And this is what I'm working on currently, bounce-off from sunlight in the dark areas to illuminate the immediate surroundings:



I want this to have some sort of blur filter going on as well, to create a really burnt-out overexposed look for the sunlight, but the problem I'm facing is that just getting the color of one pixel in the level image is like half a page of shader code, and blur depends on getting the neighboring colors from something like 18 different positions. I'll see what workaround I can come up with.





   JLJac on March 16, 2015, 12:46:14 PM:

@Schrompf, my shader-fu is not up there  Cry What I do understand of what you say is that you're downsampling to lower resolutions and saving each resolution level as an overlay? But do you do this using a grab-pass on the entire screen? I don't write to a render texture to determine where there'll be light or not, each light source is just a sprite with a shader. This seems to be really fast as I don't need another render texture or even another grab pass, but it might come at a cost when doing stuff like that.

@Gimym JIMBERT hm yeah, that'd be easy - just a full screen sprite which grabs everything rendered below it, does a simple blur, and then adds it back with a blend mode that makes everything lighter. Basically a bloom. I think I'm going to do that either way, we have some plans where that might be just the trick, but in this specific case I want only the sunlight to have the bloom effect, so I'll have to figure something out for that specifically. Even though... hm... I could just do what I described above, except I ask the level texture about whether or not a pixel is lit, and if it's not I treat it as a black pixel... That should work! I'll give it a go!





   JLJac on March 17, 2015, 06:54:11 PM:

@Gimmy, my graphic pipeline is as follows: First all the "inside the level" sprites draw themselves on top of a black background. Then comes the level image, which does a grab pass before it draws itself. What it does is basically to decode the information of the level texture, which is the output of the level editor. In the level texture, pretty much the full range of a 32-bit rgb color is used to store information - the red channel stores depth and light circumstances, the green stores which effect color is active in the pixel, the blue stores how much of that effect color is in effect. This stuff is what makes the half page. If the depth of the pixel is less than a certain value the level image always get an alpha of 1, if it's greater it only gets an alpha of 1 if the grab texture is black in that pixel, otherwise alpha 0. Basically, everywhere where there is a sprite rendered in the room the level image has a "hole" punched through it so that the colors of the sprite can shine through. The shadow stuff uses a similar technique, looking up a pixel in the grab texture and deciding whether it should be shaded or not depending on if there's a sprite in that pixel. All of this needs to have direct access to the level texture, and much of it is interconnected, why it makes sense to do it in a single big shader. I don't have the 30 layers as separate textures, I just have one texture with the depth of each pixel is stored as a value 1-30.

#fire, idk, not out of the question. Some creature could perhaps create it. We don't have anything specific planned, it doesn't go all that well with the theme after all.

#glowing eyes, definitely! This is low hanging fruit. Maybe not for the lizards, as they have black eyes but a glowing head, but it's definitely an effect we should explore with some of the creepier darkness dwelling critters!

@markefus, I don't think I have a normal map actually, I just have a simple depth map Sad I've tried to mimic some normal map action in the most recent light shader by asking a neighbouring pixel for its depth value and compare (if it's greater, we probably have a tilted surface!) but I can't really do all that much fancy stuff...

@vitorlanna thank you Smiley Yeap, we have something like that planned, along with other creepy things lurking in the shadows!

Update 407

Sunlight overexposure is in!



Still not looking all too smooth, but the technical necessities are functional, now I just have to mess around with the numbers a bit.

I'm sorry progress is a bit slow these last couple of days, I've had to spend some time looking for an apartment as I'm spending a bit of time in the states. James and I have been able to have a couple of really productive talks though, so something good has been coming out of it! Now I've got an apartment though, and from tomorrow we should be up to normal speed again!  Hand Thumbs Up Left Hand Thumbs Up Left





   jamesprimate on March 17, 2015, 08:06:10 PM:


Sunlight overexposure is in!




OH MAN this is so nice  Tears of Joy





   jamesprimate on March 18, 2015, 07:13:12 AM:

YEP it is probably about time





   jamesprimate on March 18, 2015, 09:38:19 AM:

oh of course! ive been planning this moment for like 3 years, so pleeeenty of cool tricks lined up for the audio  Well, hello there!

if you guys havent already, take a read through the early devlog talking about audio parts of the old lingo build, which used a procedural approach to audio event triggering even then. one of my favorite bits was for the lizard growls and shrieks. I did a bunch of audio for each breed at various "threat levels" varying in intensity and character, then Joar took those waveforms and wrote a function that matched the actual lizard jaw movement to the physical shape of the sound wave.

depending on what was going on with that particular lizards AI (taking into account whether it was hunting/idle/frustrated/hurt etc.) the audio would play procedurally selected clips taken from that breeds threat level audio samples, so the result is lizard audio that fits the AI mood and actions of the moment, was never the same twice and each sound lined up with the lizards actions and animation.

thats suuuper cool stuff to play with and im really excited to do more now that we have a more robust sound engine! we want to take a similarly dynamic approach to ambient and weather audio as well. Ideally each region will have a pile of characteristic ambient audio separated into songs, weather sounds, atmospheric stuff, etc., and depending on things like rain cycle position and game narrative, these elements will get blended into a unique soundscape for that moment. If we have enough time to do it right, the player might never hear the same soundscape twice. Right now i have about 75 "songs" written for the soundtrack not  including ambient or atmospheric stuff, so i definitely think its possible!





   jamesprimate on March 18, 2015, 03:43:23 PM:

Has any other game gone as in-depth into procedural generation? I cant think of one.
The tech behind the music and sound effects sounds incredible. When you guys find time to sleep?

surprisingly i dont think any of this takes any longer than doing game audio any other way, you just have to prepare for it. like, as a sound designer, i'd be making and blending a ton of audio layers on my end to create atmospheric tracks anyways. this way just has the computer blending those layers of audio dynamically rather than me doing it by hand in my DAW. who knows, maybe we'll discover that there is some reason so few people use these techniques!  Blink

Had no doubt you'd deliver, James!

As a bit of an audio/field recording nerd, I'd really be interested in hearing a few of the samples you'll be using, just to get a feel for the character of the audio. Is that a thing you'd feel comfortable sharing with folks as of yet?

thanks! ill still be in "level building super crunch mode" for the next little while yet, but as it happens i was just showing Joar a bit of my process at PAX, so i have a kind of cool little progression on deck that i can show you guys!

Early in rain world days, when the game had more of a simple cartoon look, i was kind of skirting the chiptune style to match the 16bit graphics and platformer vibe. That was mostly low bit synthesis like pulsewave modulation (on physical soundchips, naturally), additive/subtractive synthesis, white noise and some formant or wavetable synthesis for more vowel like growls and grunts and such. Sounds cool but is BORING AS HECK to show because its literally just me sitting in my basement messing with some waveforms for hours and then writing a track with it.

As the game has developed into a deeper, more rich (and more procedural!) visual experience, ive been working a lot more with manipulating "junk audio", and that can be more dramatic to show, because you can hear each step. This track was written more just to show Joar the possibilities with this one technique, but the track wound up turning out pretty well! Should be perfect for a certain weird subterranean region... anyway, heres how it went:

Literally me recording us talking at the PAX booth and showing him the soundwave loading:
https://clyp.it/obyjx1dg

The same sample pitched down for effect and to create better material to grab from:
https://clyp.it/udnp13qu

Selecting audio points in that sample to capture from, i do this weird semi-randomized arpeggiated thing:
https://clyp.it/ddlxzmds

And from there the track takes shape. Adding percussion and other instruments (many of them also taken from that same audio clip, manipulated to suit my ends through sample and hold techniques or whatever):
https://clyp.it/v2v2et5r

I kind of dont like showing tracks outside of the context of the game, because this is just one piece of the audio puzzle, but imagine something like this fading in and out, blended with wind, rain, atmospheric and creature noises and you'll sorta get the drift!





   JLJac on March 18, 2015, 08:24:49 PM:

Isn't it goddamn genius you guys  Tears of Joy The last batch of tracks I got from James was all weird stuff, and all of it freaking fantastic, although in different ways. There's one long track which is somehow constantly out of sync with itself while at the same time managing to sound distinctly musical, which keeps you on the edge of your seat by never being quite predictable. And others are strange and beautiful in ways I can't really describe as I'm music illiterate, but yeah, all awesome stuff. I really really really can't wait to get sound running just because of the soundtrack aspect - just playing the game with the soundtrack running now adds some sort of... saturation that adds infinitely to the experience. And that's without ambient sounds or sound effects!

You remember yesterday when I said that as of today I'd be back to normal speed? That didn't end up happening... Instead I spent the day at a roadside rest stop while waiting for a mechanic to show up and fix the bus, and when that didn't work out for another bus to show up, etc. But now I'm arrived! Some work got done on the bus though, some art, some thinking, some mapping out how damage is going to work as a system (right now it's mostly a million special cases) and some coding as well, for as long as I had batteries. Normal speed as of tomorrow, promise!





   JLJac on March 19, 2015, 01:49:12 PM:

Oh, actually I have a grab texture AND a level texture, and I use information from both of them to render the final image. A raw level texture looks like this:



And this is the thing where all the channels are used to store different things. The image isn't very green as you can see, mostly red and blue, because I just use the first intervals of the green channel as of now. I like to know that I have some more room in the green channel in case I want to store something else in the future.

So I use this to get the depth of each pixel, and the grab texture to get where the sprites are currently at, and if the depth is greater than 6/30 (which is where the game objects are depth-wise) and there is a sprite, I "punch a hole" so that the sprite is visible.

The white shader bug I'm pretty sure was because of a rounding error when getting pixel coordinates, however I am concerned about some devices not liking the grab pass. I think there's a workaround, if I just divide the level image into two sprites - one on top of the game objects and one behind them. That'd sacrifice the dynamic shadows though, but perhaps run quicker. How to do the water without a grab pass however... I've no idea.

Thanks for the link! That's baaaasically what I'm doing for the light source shader, just simpler and more contextual for the specific thing I want to achieve. Really cool to know that it's possible though, I might need it later  Hand Thumbs Up Right Hand Thumbs Up Right Hand Thumbs Up Right

Your comments are always helpful, the most helpful, you practically made this game by now  Cheesy Thanks for hanging around, it's much appreciated!

Update 407

Finished some work I did on the bus yesterday, namely putting some scales on the heads of lizards as well as their bodies:



Nothing too complicated, just had to make sure that the sprites changed color as the lizard heads did to make it look like a part of the head. Also made these a little bit more rigid than the ones attached to the body, seems to make sense as the head is apparently of some sort of harder material. Right now I only have the two horns setup, but I might add other head decorations as well. Other decorations removed for clarity.

Other than that, messing around with the darkness stuff to make it tie in with the palette and palette fade systems already in place. Seems to work nicely!





   jamesprimate on March 19, 2015, 06:55:57 PM (Last Edit: March 19, 2015, 07:02:31 PM):

I had an idea the other day that may or may not have already been suggested. There's been discussions in the past as to whether or not there should be a visible timer for when the rain comes. I was thinking back to the backdrops of the out door areas, & how you can see the shadows of clouds crawling along the background. Well, why not have the amount of clouds, as well as the rate at which they move, slowly increasing until the entire background is engulfed in the shadow of the coming storm? This could be a subtle but entirely in game visual cue for when the rain is coming(for out door areas anyway). Has this been suggested already?

^ oh yes, thats in already! I wonder if its been shown yet actually? here is a shortened version of what it looks like now:



Cloud cycle becomes more intense, then it gets dark, rumbles, becomes obviously dangerous, then downpour.

I definitely think we'll want to improve on that though, especially the "death screen" aspect. Id like to see a more dynamic rain cycle happen, where you actually see some rain in the foreground and background building up while playing, and also some visible back layer fog / wind action.

this is an obviously super crude mockup i did in 5 minutes compositing stock "rain and fog" video:




now think of the two videos combined, plus some foreground rain that fades in and that should give some idea of what im thinking. I mean, the game is called "Rain World", so we really have to nail the rain dont we? BUT! This is sort of polish pass stuff. We have plenty of nuts and bolts hacking, creature design and level building stuff to get through before were there.

One thing we're still SORTA figuring out is how to telegraph the rain cycle death in various nonstandard regions like subterranean, water, aerial, etc. All the ideas are there (a flooding animation, some high winds animation, huge waves, etc etc) but we have yet to actually tackle it, so decisions on any of that might inform how we do the rest.

Anyway, im starting work on the first dark region called "shadow urban" and REALLY STOKED. The darkness mechanic has potential to be even more significant than the water mechanic IMHO, and im soooo glad it looks and works as well as it does already. PRAISE BE TO JOAR.





   jamesprimate on March 19, 2015, 07:37:43 PM:

^ oh most definitely. but the experience we're trying to create is something we'd very much like the player to go into blind and make their own connections. so other than possibly alluding to the narrative through technical stuff we show here, we're going to try to keep this a strict spoiler-free zone. the builds wont have any overt narrative content, etc etc.

When we get closer to release im sure we'll tease the opening scenes and drop some hints, but as i mentioned above, were still chopping wood for a good while yet here! for instance i have approx 400 more rooms to do...  Cry





   JLJac on March 20, 2015, 07:40:06 AM:

It's always been my intention that the story of rain world is that of the character, rather than that of the world, and that it is produced by the game engine rather than through writing. If you decide to take down a Vulture, and actually succeed, that is the story. If you save pups, or don't, or befriend some creature or kill some creature, that is the story.

That said, we do love our environments and of course we have ideas about what's what in the world, and we would like to try some "environmental storytelling." But don't expect to get some super clear linear array of events spelled out to you haha, we'll be hinting here and there but you'll have to do most of the work yourself.

The main character is a creature that's somewhere on the edge between animal and human thinking, meaning that it can only almost make sense of what it sees around it. It can maybe understand that the symbols on the wall bear meaning, but it can't understand the meaning. It can see that one machine connects to another through pipes, but it can't decipher the functionality much beyond that. It can guess that this big place might have served some big purpose, but it can never quite reach a clear understanding of that purpose. We want to mirror this experience in the player.

Man, NYC subway rats are such an awesome source of inspiration! It's exactly the thing - they live in a huge weird environment which they have no idea about why it looks like it does, and they mind their own business. I saw one yesterday that had its home in a drain pipe between the tracks, coming out between trains to look for cheetos and whatnot people might have thrown down there. Does the rat understand what a drain pipe is? Maybe some incredibly vague notion is in there, but a full understanding of what's going on will always be beyond reach. Still the pipe works as a place to live, and the intentions of the almighty creatures that once created the drain pipe isn't all that relevant to the rat at the end of the day - cheetos are.

So, if the back story is the complete architectural blueprint of a subway station, expect to understand about as much of it as a rat living between the tracks of said station Cheesy I'm joking, but yeah ~ we won't spoon feed you any back story for sure. You'll have to work really hard to piece stuff together, and even then you won't have a complete picture. Mystery is a huge part of the appeal, and if the entire back story was available on the internet a week after release that would sort of ruin the experience. Instead you'll get some scattered pieces to make your mind wander by itself  Smiley

Oh, another thing - Rain World isn't a planet lol  Cheesy Or I guess it might probably be on a planet, just as Lord of The Rings, Sex And The City, Zelda and Frankenstein's Monster are probably technically on a planet, but just as in those examples the planet aspect isn't really relevant at all. Rain World is more of a fantasy world or a dream world, not somewhere you can go in a space ship ~





   jamesprimate on March 20, 2015, 08:39:03 AM:

i see huge potential for a Cheetos® brand rain world DLC tie in! lemme get on the phone...

This discussion is conveniently timed with REroll's review of Shelter 2, which discusses the game's shortcomings with this exact animalistic feeling we want from the Rain World.

OHHHHHH this is a great link, thanks. i havent played any games with this sort of mechanic before, so really cool to hear such a passionate defense of that flavor. the reviewers perspective lines up exactly with my own.

as for UI and text, we're definitely going to have as little of that as possible and NONE if we can. definitely none that is in the game world. threats of predators and food scarcity should be motivation enough to push the player into the world without needing any real need for hand-holding or "go here!" signs, and once they are in it we can do all manner of things.

Right now there is only one instance of text where we dont have a solid solution for, and thats indicating to the player how many bats / foods you need for the next hibernation cycle and how many you have eaten. right now its just a little number that pops up, and while that does the job (and could be considered an acceptable design compromise as the easiest possible solution), i'd prefer a more stylish means if we can. but again, thats polish stuff down the line.

as for tutorial, im confident that we can just design early room challenges / set pieces that teach the basic controls and experience (this is a pole, you must learn to climb it to get out of this room. this is a shortcut, its the only way to the top so figure it out, etc etc) and let the player work through it. Pretty much every region adds new mechanics to learn, so the beginning rooms of each have a set of movement puzzles to introduce you to what will be needed to progress. Whats nice about having a big interconnected map is that we'll have multiple paths through the world, so if a player cant deal with the mechanics of one region, they can just find another way!

showing the most recent build at PAX was cool because for the first time we could actually just hand the controller to someone without a word and see how they made do. and even in this unfinished state it seemed like pretty much anyone who was willing to sit with it for more than a minute could figure it out just fine, which was a bit of a relief let me tell you!





   jamesprimate on March 20, 2015, 03:14:33 PM:

after a few crash and burn attempts at doing shadow urban "in the darkness" level design last night, it occurred to me that *maybe* doing levels without 1.) the illumination system in place 2.) any of the dark-specific creature ecology or 3.) any of the region tiles done... is probably a terrible idea. i was so excited though!!

switching gears a bit, going to focus on something we know exactly what were doing with, the second aerial region: sky islands.


detail:https://i.imgur.com/2fiTR1w.png

Joar whipped up some cool ornate looking ornamented tiles and has some radio antennae looking stuff in the works that will give this region a very unique look (think of a refined, brass-hued oasis set on scaffolding high above the clouds), and with that i should be able to get through a good chunk of this region while he's busy working on... dun dun dun... the dreaded and much put-off level editor overhaul.  My Word!





   JLJac on March 21, 2015, 07:06:14 AM:

We're really stoked about this region, because it's one that we've had a lot of ideas for for a long time. I also think it's pretty much the only region so far that we've had some pretty clear visual concepts for going into it, so let's see how that plays out. If it shows to be a super benefit we might want to do more concept art etc in the future before throwing ourselves into a new region. That said James has been improvising really solid visual identities for all the other regions (maybe with the exception of the first one, which was originally a bit here and there as James was learning as he made it, but which has been reeled in to a much more solid aesthetic identity in the last overhaul). So let's see what happens! I think that if James has been able to make as good looking regions as we've seen so far without much coordinated planning, this new region has potential to look really amazing just because of the fact that we had this visual idea, making sure that I was on the same wave length while making the tiles as James will be when composing the geometries.

And now I think there's no way to put off the inevitable any more... All of the candidates for next upcoming regions need rooms larger than 3 screens, so the overhaul has to happen. So, good bye for a couple of days! I'll write some small little progress reports I think, but probably not proper updates as there won't be all that much to talk about.





   jamesprimate on March 21, 2015, 09:00:34 AM:

I also think it's pretty much the only region so far that we've had some pretty clear visual concepts for going into it

ha! maybe the only region YOUVE had clear visual concepts for going into Roll Eyes ive had these regions planned for over a year! though its true we usually do new tiles later in the process. but its true sky islands should look pretty niiiiiiiiice. now i just have to live up to the hype O_O





   JLJac on March 21, 2015, 11:25:21 AM:

ㅋㅋㅋㅋㅋ granted! But earlier you've had to work with whatever random tiles I happened to throw together for that region (me being the one with no visual concept) whereas here we have a more coordinated idea of how things should look! Basically what I'm getting at is that "I also know what this area will look like!" ... which is obviously not true, as you always ends up using the tiles in unexpected ways...

One thing that is nice for sure though is to go into a region with the region specific tiles already in place! Usually you'll have gotten like 40% through before I manage to deliver the first batch  Shocked Man, tiles take sooo long... My latest estimation is two full days for a set of region specific tiles  Cry





   JLJac on March 21, 2015, 12:26:45 PM:

Some of the regions are loosely rooted in old concepts from the tiny world attached to the lingo build - in which a region was generally no bigger than 3-4 screens. For example the lingo world had a region called Chimney Canopy which actually looked more like what Sky Islands will look like, as well as some hints at Suburban and Garbage Waste like areas. But pretty much all of what you'll see in the final game will be James' creations, a majority of the areas James has come up with have no equivalent in the lingo build, and those that have have bloomed and developed vastly since. The lingo world was about 20 rooms if I remember correctly, whereas James estimates the Unity world to be around 700 rooms. So yeah, maybe there were some little sparks in there long ago, but for all practical purposes James has built this world ground-up.

For creatures, the ideas of the lingo-era were humble as well. Most of it has developed post-kickstarter, and quite a lot of the creature ideas are not solely mine any more, rather they're a blend of James' ideas for what would go well with the regions mixed up with the backer suggestions. We have quite a lot of backer suggestions, so we generally try to combine them with James' region-specific requests whenever possible. I definitely have the final touch and most of the control of how creatures will look and behave, but the seeds for the ideas generally come from elsewhere now. For example, the Vulture came out of James wanting a big flying predator for the aerial regions, but from this rather loose concept the actual creature grew out of back-and-forth between me and the computer, trying out what worked, what looked good, and so on. The designs are generally like this, not super goal oriented but rather a dance with the technical limitations.

I really like this, and think it's one of the great benefits of being both artist and programmer - I don't have to draw something and imagine exactly how it should be just to later be disappointed by the implementation, and conversely I don't have to try to program a creature that might not work technically in order to meet an artist's expectations. Instead I can explore a lot of technical possibilities while constantly re-evaluating the artistic idea in order to find the place where it looks best.

On the UI stuff, I don't quite know... I don't want to mess with the Slugcat's appearance too much, as its silhouette is kind of iconic and I wouldn't want it to spend the majority of its time distorted by status effects that might make it less aesthetically pleasing - this is after all the character you look at 90% of the time you play, and the proportions are quite fine-tuned to be where I like to have them, so if I can avoid skewing them I will. Also we have this thing with no health bar and no lasting status effect - I want your state to be binary dead/alive, because I think it feels freer and less claustrophobic that way. If you're alive, you have as good a chance as ever, if you're dead, you're dead. No weird grey areas in-between. The exception would be the leeches, they could be argued to be a sort of "status effect" as they slow you down in the water, but this follows a very clear causality which you can observe with your eyes.

But, haha, I don't really have any good ideas myself for the UI thing. Surely some sort of symbol (just 5 dots or similar) should be better than straight up arabic numerals, but hopefully there are other options as well. Just having the slugcat refuse to eat more bats once you've caught enough is a possibility, but that solution really communicates nothing but the absolute bare-bones tiniest amount of information you need to survive - it would be pretty nice to know what amount of bats you need as you set out on your hunt. Another possibility is to have it always be the same amount of bats, but I don't know how well that'd work with the level design.





   jamesprimate on March 22, 2015, 03:17:57 AM:

def have pondered over the "stomach UI" idea before, and it may be worth some further consideration when we get to that point. cant see your pics, but i havent been able to figure out a way to make it unobtrusive.

and dont worry, the bat calendar was in the old lingo alpha from a long time ago. not something were thinking of implementing in the actual game.





   JLJac on March 23, 2015, 06:10:53 AM:

Sorry about it being a bit quiet, I'm doing level editor overhaul!

It seems like anything that conveys the information well is obtrusive, and anything that's subtle doesn't convey the information well.

Hahaha this!

The animations could work if there were a little calendar in each of the shelters - Not a piece of ui, but a part of the environment, like a little panel full of rows of LEDs that tell you where you are in the rain season, and how many days are ahead of you.

It's a very strong theme throughout that the environment was not designed for you, and the intentions and motivations of the architects are completely separate from the intentions and motivations of the protagonist, so I don't know... The shelters do seem to be specifically a rain shelter though, so it would perhaps make sense. It would become a little bit more explicit than I'd be comfortable with though - it seems so slugcat convenient that people might start hypothesizing that slugcats are actually the architects or something.

When it comes to stomach growling etc, hahaha, idk, maybe I don't want the digestive functions of the protagonist to play that big a part in the experience. Hearing constant rumbles and growls from the slugcat intestine would tilt the game stylistically away from the pixelly/cartoony style into something else.

Between James and me there's this ongoing discussion, where I tend to think that it's stylistically cleaner to Accept Defeat and include some UI stuff as long as they're not on the screen constantly, and James believes in fighting on. Generally we do tend to solve problems if we decide to keep trying, so the fighting on idea makes sense. However I don't think that the exclusion of UI is worth any price, if it skews the style or mood or has to rely on incredibly forced in-world solutions I'd prefer to just throw some white circles in the corner or something. The jury is still out on this one!





   jamesprimate on March 23, 2015, 09:56:30 AM:

hey i just want to say that this has been some really great conversation. every time i look there is a great new post worthy of in-depth response, but am too slammed with levels to do the topics justice Tongue





   JLJac on March 24, 2015, 09:59:35 AM:

Sorry for not being very active in this discussion, I'm deep in level editor overhaul. But just wanted to let you know I'm following it, and there's a lot of interesting stuff popping up  Hand Thumbs Up Right

In overhaul news, I have just played the first ever 20-screen room in RW history! It takes something like 3-4 minutes of just running to get from one end to the other. Most of the level editor logistics become pretty awkward at this level size, but it technically works. I seriously doubt we'd want/need to go beyond 10 screens anywhere in the game, but it's cool to know that 20 is a theoretical possibility.

Note though that the mile stone here was that a 20 screen room was actually spit out by the editor and accepted by the game, not that everything is done and flawlessly working haha! Basically all the effects (rust, slime, plants) need to be adapted to the new rendering pipeline, and quite a lot of other stuff has to be sorted out as well. But hope is good and there's wind in the sails! Onward!





   JLJac on March 24, 2015, 02:32:03 PM (Last Edit: March 24, 2015, 02:50:38 PM):

Question: Will the transitions between screens always be "panel jumps"? I remember you had a slugcat camera tracker way back. Do you have plans on implementing this so that moving through screens will be smooth?

Yup, sorry! If you look at for example the water, you see that the levels have a bit of 2.5D perspective rendered into them, and this stuff needs to be rendered from a specific camera position. That's why we can't just render the room from a bunch of camera positions and then graft the pieces together into a continuously scrolling unit. There was a moment when we played around with the idea of having each of the 30 layers be its own separate sprite in order to scroll, but that would put each room at about 10-15 MB (per screen!) and slow down the rendering quite a bit, possibly to the point where that would be the only cool graphical effect we could do. Basically everything we have now that's good looking shader-wise (water, shadows, darkness, etc etc) relies on the level being a single texture. So it's been a bit of a trade-off, and definitely a decision we have seriously considered before making, but now it's made and it's gonna be fixed screens, with jarring jumps between them. If you play in wide screen there's a bit of an overlap, which makes it somewhat better because at least you know a few tiles of the terrain you're headed into. Buuuut yeah, we know this is maybe not strictly optimal, yet we consider it worth it after carefully weighing the options.

Shelter 2 review seemed super relevant!

As for the stomach stuff, I realize when reading the stuff you guys are discussing that I've never really considered the actual bat eating a full-fledged, interesting mechanic in its own right. Subconsciously the bat hunting has always been just a "reason to play", while the actual interesting gameplay is the predator encounters. Under this logic it made sense to just say "catch this many bats or you'll starve" - that's the minimum needed to actually propel the player out into the world. This might be a problem! Catching bats is what you do, after all ~ so it should probably be interesting enough in itself. However, this might be a pretty common video game trope? In Mario you win by reaching the flag at the end of the stage - the flag reaching itself is actually pretty anticlimactic, you just... reach the flag. What's interesting is the problems facing you in order to get there. To a degree I think this is desirable and/or unavoidable, in a video game it will always be the obstacles that are interesting rather than the goals themselves. However, because of the nature of our game, the obstacles can't really be guaranteed - predators roam as they please, and a certain percent of cycles you'll be able to go get the bats without actually encountering any, or only encounter them in easily avoidable situations. For these scenarios, we probably need to make the bat hunting interesting in itself.

I'm still not sold on making the slugcat stomach an entire intricate sub-system, though. I think it's bat hunting that needs to be made more interesting, not bat ... eh ... digestion. When it comes to starvation states that stuff is certainly interesting, but there'd really be no way to do it without punishing a player who's performing poorly. Nature generally punishes the weak (if you're starving you become slow and dumb, if you're born poor you have fewer opportunities, etc etc) but a video game should do the opposite (the further back you are in mario kart, the better power ups you get). This combines with the design guideline that the slugcat should generally not be affected by status effects too much - the slugcat is this little blank-eyed, completely white silhouette, it's a blank slate to project yourself onto, and only through controlling it you can make it succeed or fail. It shouldn't be bogged down or beefed up by lasting "stats", it's defined only in the moment, by the situation it's currently in and by the player controlling it. The slugcat does things rather than is things. Starved and fat are adjectives rather than verbs, and for that reason I'm not sure they fit the slugcat character.

But this is sort of a separate branch of the UI discussion. As for the strictly UI related discussion, I would definitely love to do it without throwing symbols on the screen. The problem is that most solutions seem to require stylistical diversions. A stomach rumbling animation or burping bubbles is a little too goofy for the somewhat grim and creepy atmosphere in the game. Where the slugcat looks and what idle animations it has is probably too subtle, and it veers into the adjective territory. I doubt naturalistic sound cues would work as there'll be a quite a bit of weird stomach-growly ambient sounds going on, and artificial sound cues such as an upwards DIIING if you have enough and a downwards BEEENG if you don't is essentially just as HUD as an on-screen HUD, just coming through your speakers instead of on the screen. Having the character change color would work, but then it'd have to be really clear to effectively communicate what's going on, and might mess with the art style. And what about coop and multiplayer? For proper multiplayer, aka Sandbox, we'll probably have to give in an add actual UI either way because there'll be game rules and stuff going on, and support for 4 players. That's okay though, as Sandbox isn't really canon - it's just for fun. But coop is a strange mid-case.

My favorite option so far is to just evade the problem entirely by having the required amount of bats always be the same, but I don't know if that is James' from a level design viewpoint. Also it still doesn't solve the problem of conveying how many of the required bats you've caught so far.

Not trying to shoot your ideas down btw, I'm really interested in this discussion and there has been a lot of great stuff coming up - just haven't seen The One idea just yet. Awesome talk though  Hand Thumbs Up Left Well, hello there! Hand Thumbs Up Right





   jamesprimate on March 24, 2015, 03:56:40 PM:

Ohhhhh I'm really into Gimmy's bat idea. Joar had plans for something similar using move timing and an "adrenalin" system to unlock more advanced move sets (which I really liked the idea of), but the bats as a perpetually available version of the same makes perfect sense, solves a bunch of problems and is already built in. See this is why you're our lead designer G. 





   JLJac on March 25, 2015, 05:43:49 AM:

@Tiredvd, Hi, welcome! Okay, I'll try to clarify. You know the basic laws of perspective, right? Lines converge at the horizon. Imagine standing on a street, pointing a camera down the road and shooting a picture. Then you take ten crab-steps strafing to the left, and shoot another picture.

Each screen in our game is such a "photo" of a small voxel-based 3D world. The reason why we can't just put one next to the other and scroll between them is because the perspective is different. In the camera example, imagine trying to combine the two photos into a panorama. It wouldn't work, because everything in the photo will have moved a different amount depending on its distance from the camera. The lamp post right in front of you will have moved all over the picture from one end to the other. The tree two blocks down will have just inched a tiny bit to the right. And the same phenomena applies to every single point in the picture. The perspectives are not  compatible.

This shows the overlapping area between two "screens" in a room from the game. Note that in the middle, you see the same structure, but it's rendered at different angles because the perspective is different.



This is the reason why not several screens can be attached to each other to create a scrolling continuum.

Also just to highlight a valid point that Torchkas raised earlier, that I feel you might have missed.

Totally didn't miss that, just hoped for it to pass under the radar  Cheesy

#bubbles, if the bubbles change their appearance a lot to show different states of the slugcat, that sort of takes them beyond the point where they'd make any sort of physical sense, and don't we just have ordinary good old HUD then, but presented in a slightly different way?

Another way of showing the character state would be the closeup that can be shown at the beginning of every cycle. Imagine level of detail similar to the logo artwork, maybe even with some animation, that shows the state of the character.

I'm really into this idea!  Grin This provides a perfect opportunity to get to know your character a little more intimately than just as a tiny cluster of pixels on the screen! I've wanted to include more artwork in the game for a long time, but because of the minimalist UI etc I haven't really seen any opportunity - but this is it! While being in the den you are sort of half in-game, half not, so it's the perfect context to include something like this. A little could go far with this I think - just some illustrations of the slugcat sleeping in the shelter as a "win screen", maybe with the pups if you have any, would really add a lot of narrative quality to the game without really intruding on the actual game, because in the den you're half out of the game anyways!

Oh man oh man so much cool stuff! On cycle start, there could be some events that could happen, communicated through pictures. For example that one of the pups is sick or starved. Maybe the cycle starts with a black screen where you can see an illustration of each member of your little pack waking up. Under each illustration is a row of bat symbols (which is okay, because this is not a HUD overlaying the game, this is just the cycle's establishing screen!) and if one individual is sick or starved or something that's communicated through the illustration and reflected in that they need a few more bats. Then the intro screen fades out, and you start playing in the shelter!

I'm really enthusiastic about this Who, Me? Gotta see what James has to say though, and run it through some discussions with him to see if it holds up, but I'm digging it!





   JLJac on March 25, 2015, 08:18:04 AM:

EDIT: Or, for that matter, maintaining the vanishing point in the same place relative to the world and panning the camera around independently? That would allow the "walls floor and ceiling" to still show at the edges. Lots of traditional 2D animation backgrounds work like this, as do the side-scrolling painted backgrounds in fighting games, eg:

This is how we're going to have to do it for split screen and some platforms with smaller screens (when the viewport is smaller than an in game "screen" we'll have to scroll stuff around within that camera position), and I'm sure it'll work out okay. Doing it for multi-screen rooms becomes problematic though, because at the edges stuff becomes so skewed you lose your player avatar behind extruding terrain. The alternative is to have the edges always be the same amount of skew, but in that case the central screens become completely flat. Unity has a texture size cap that's way below the rooms sizes we want as well - and the room textures are actually pretty large memory wise.

oblique projection, yeah, totally considered it. It would open up some technical possibilities for sure. Actually the level editor can spit these out super easily, just have to change a few lines of code:



It has benefits, the rooms might be a little easier to read visually. But it's less aesthetically interesting according to me, because you only get either the lit or the shaded sides of each surface, which makes the image look flatter and gives less room for visual contrast. Also it looks more technical and video-gamey rather than the wonky and slightly unsettling perspective. It's an art style choice, I guess!





   JLJac on March 26, 2015, 07:38:44 AM:

Thanks! Yeah that's my thinking as well, the visual style is such an important component we don't necessarily want to compromise it.

Update 408
Took a small pause from overhaul to implement a bloom filter for the Sky Islands palette:



The shader is active, so when stuff moves in front of it the bloom is affected by the sprites:



It's most prominent towards the top/left corner of the screen (where the light source is). Still needs some tuning, I think it might be a bit too much right now.

The shader only adds, never subtracts, meaning that any given color can only be made lighter, not darker. This is why the black vulture gets affected by the bloom, but not the white slugcat.

I don't know if you can notice, but this time around I made the blur check for neighbors diagonally rather than in the straight lateral directions, which looks a bit nicer IMO. The truly ideal case would probably be a circular gaussian blur, but that'd be several times as expensive, so I don't know if it's worth it. I suspect my computer has a pretty strong graphics card, so I have to be careful not to program the shaders too heavy to actually work on most machines.





   JLJac on March 26, 2015, 08:42:36 AM:

Yup it's definitely not all the way there yet! But it's a start for getting a better picture of what the area might look like. I agree that the diagonal rays are a bit too jarring... I should probably try a square blur - though that'd be twice as expensive. I could make the blur radius smaller though to save some cycles, which is perhaps not a bad thing actually.






   JLJac on March 26, 2015, 09:32:05 AM:

Oh, this room is actually just a room I threw together for James to demo the tiles. It has aaaall the ornament tiles in it, and no slime or rust effects, so it totally doesn't look Rain World enough for Rain World. The actual rooms James has been making are  more worn down and less fairy tale-ey. They do have a bit of that quality though, and at least I think that's an interesting visual contrast - as the huge antennae rise towards the sky they take on a lighter and more ethereal quality.

@Christian, yeah it's some sort of antennae and relay technology. Some sort of signal is being broadcast or received. In this area there'll be less heavy machines and pipes, and instead more fine machinery (assumedly more information technology rather than heavy industrial technology)





   jamesprimate on March 26, 2015, 12:08:26 PM:

oh snap! that bloom is going to look great. i just bothered him about it when comparing one of the old sky islands concept rooms from the lingo to the updated one:

old:

detail: https://i.imgur.com/olhAtS0.jpg

new WIP:

detail: https://i.imgur.com/vorCIjt.png

clearly the bloom is a big part of the mood for the original, so ill be psyched to have it in the toolkit!

SKY ISLANDSS

Talking levels ehh? its like the Bat James signal! for the actual sky island rooms, lets take a look at what we've got going so far...

scaling some large antennae:

detail: https://i.imgur.com/qhVExHB.png

crumbling information relay structures:

detail: https://i.imgur.com/MqZX9Yz.png

and finally, a taste of the sky islands themselves:

detail: https://i.imgur.com/wZY9fYM.jpg






   JLJac on March 27, 2015, 05:24:24 AM:

Quote from: JLJac
-snip-

While this doesn't seem like a terrible idea, I do think there is a significant problem with it. Namely, that it sounds like you will be showing the illustration with the bat symbols once at the very start. The player will then need to remember how many bats they needs to eat, as well as how many they have already eaten, through the rest of the cycle with no feedback to indicate when they have had enough. Add in the number of bats each pup needs to eat, and try to keep track of how much each has already eaten and it become very easy to lose track and have someone starve.

Will you have loading screens or something similar where you can reinforce and update the information about how many bats each character still needs? I don't think that telling the player once at the start of each cycle is going to cut it.

I don't believe that's what he means. He wasn't addressing the U.I. problem with the bats; rather, he was addressing our comments about the slugcats looking hungry, or fat, etcetera. Previously, it seems like he wanted to do this, but didn't want to compromise the visuals during gameplay, and this seems like a good solution.

With this in mind, I would guess that he plans on implementing "soft hunger", or rather, the ability to not quite catch the total of bats, but still scrape through with the requirement of catching more in the next hunt. I'm sure testing will show whether this will be enough to do away with the bat u.i. entirely, but I have a feeling it's going to stick around in some form or another.

Yep yep!

"Soft hunger" - yeah maybe? Don't want it to be too floaty though. Maybe you could have it so that you can get away with exactly one fewer bats than required. The problem of having a penalty such as having to catch one more the next hunt is that the hibernation is also where the game saves, so then you could potentially have your game saved into an if not unwinnable at least dire situation. Contrary if you have no penalty, it's effectually just a matter of the UI showing one more bat than you actually need. Also a penalty would punish players who're performing badly, which is something I'm hesitant about. Obviously not in the short time scale, like if you miss a jump you fall down, that sort of "penalty" should be in there definitely. But bogging down a player who's not performing well with some lasting punishment that bleeds over into the next cycle seems unfair to me.

Bloom - yeah, I know about the two-pass technique, but it's not applicable here. Because I don't blur the entire image, I just want to blur out from whatever pixels are the palette defined sky color. If I did first a vertical blur, then when it was time for the horizontal all the pixels would be muddied up and there'd be no clean sky color pixels left.

What's box blur? Sounds interesting!

My friend recently sent me a link to an article about how you can do cheap gaussian, and I'll look into that to see if there's anything I can extract. The tricky part is that I'm actually not just doing a straight up blur, I need to have only some specific pixels emit the blur...





   JLJac on March 27, 2015, 02:00:07 PM:

The idea that you can under-eat once, but not twice in a row, seems to make sense! But how to communicate it? It seems a little harsh that first you survive eating too little, but the next time BAM total binary death haha!

So box blur is essentially just about scaling a texture? Do you do that in the shader language, or somewhere else?

Yep, know that the bloom is a bit too much in that gif  Who, Me?

Thanks jimbert!

Update 409

In other news, huge milestone reached! The overhauled editor is now on par with the old editor! Basically meaning that nothing (that wasn't already, hehe) is broken, and the editor can do everything the old one could and then some - it can for example spit out huuuuuge rooms, and James now has control over the screen skewing effect going on rather than it being random, and some minor UI stuff and misc little errors are fixed.

I still estimate that it will be a couple of days more before we're actually through to the other side of the overhaul, but from here on the overhaul will be about adding new stuff rather than adapting the rendering pipeline to accommodate for larger rooms.

What new stuff? I have two things I want to do, though their actual level editor implementation might be somewhat merged. The first one is the Prop Editor.

Currently everything you see in RW is a "tile", which is basically a graphical asset that can be placed on top of terrain and will then be rendered. Tiles have specific terrain requirements, one might be 2*3 tiles large for example, and require each of these tiles to be solid except the top left corner, which should be a slope. This way James can first create a "geometry" (lots of RW editor lingo here, sorry - it's a very limited little set of technical terms used pretty much only by James and me), which is a map of the room where it's visible where there is solid terrain, where there is not, where there are slopes, etc. Then he "tiles" the geometry in another editor, by adding these graphical assets in places where their terrain requirements makes them fit. Basically this process guarantees that what looks like solid terrain will also be solid terrain.

The problem with this is that all the graphics are strictly on the grid, and can never be rotated. The Prop Editor will allow for adding "props", which will basically work just like the current graphical assets except that they will be more free - you will be able to rotate them and place them anywhere, not only on the grid.

Yes, this has the potential of messing things up by allowing for placement of stuff that looks like solid terrain in areas where there isn't any solid terrain. I trust James to be responsible with it though - if the props go mainly in the background layers or in out-of-reach areas this won't pose a problem. What it will do is allow us to explore new and more interesting visual possibilities. Think of it, it's actually infinitely impressive that he has been able to create the impression of decay and destruction without ever being able to place any object at an angle  Who, Me? This tool will allow for fallen down structures resting against other structures, bent shapes, and also non-destruction based stuff such as just cogs and gears sitting along different angles.

The other editor I want to add is the Decal Editor. This one will allow to place assets in the world in a similar manner, but instead of rendering as actual objects, they will render as custom color on top of the surfaces behind them. This one will probably be used pretty sparsely, because Rain World's art style relies on the backgrounds being sort of monochrome with the colored creatures standing out against it. But we have a couple of ideas for which some custom color is needed, and I think it will add some spice to the world with a little color here and there.

Not all of these colors will necessarily be "colorful", either. The decal editor will also be able to do stuff such as a brown-grey line along the edge of a basin, indicating where the water level might once have been, and similar little touches.

So, now to doing it  Cheesy Wish me luck!





   jamesprimate on March 27, 2015, 03:03:15 PM:

YYYYAAAAAAAAAAAY!





seriously this is something that has been looming over our heads for almost a year, and so big big big deal in our little world. great job homie!

timing wound up bring pretty much perfect too. the large multi-screen rooms start to become a significant game mechanic development as you go deeper into the world, so up until now we've been working on the regions that they dont appear in or at least dont feature prominently. Heavy Industry features one, but only as a transition set piece into the Shadow Urban region, so adding that in later on a second pass is no problem. Sky Islands starts to introduce them as actual functional pieces in the region layout, but i would have still wanted time to develop the look and style of the region before digging into that. and thats how it happened! so basically....

~~~ >>>----------> ((o)) bullseye!

only problem is that now i have to actually DO them and am anticipating that these large multiscreens will each take some serious time. perhaps 2ish days each, and the rendering will be pretty painful. but nothing to do other than just get into it. ill start out tonight with a 2x2 and see how it goes!





   jamesprimate on March 27, 2015, 04:58:00 PM:

Quote from: JLJac
Yes, this has the potential of messing things up by allowing for placement of stuff that looks like solid terrain in areas where there isn't any solid terrain. I trust James to be responsible with it though - if the props go mainly in the background layers or in out-of-reach areas this won't pose a problem. What it will do is allow us to explore new and more interesting visual possibilities. Think of it, it's actually infinitely impressive that he has been able to create the impression of decay and destruction without ever being able to place any object at an angle  Who, Me? This tool will allow for fallen down structures resting against other structures, bent shapes, and also non-destruction based stuff such as just cogs and gears sitting along different angles.

YEAH. def. considering how established the visual style is at this point, adding this whole new universe of angles has to be done pretty subtly. Ill admit im a little apprehensive about it tbh. The region its "intended" for (in my mind) is the Garbage Wastes, in which having angular junk sticking out in the background is just a good look, and if that winds up having a more unique look to it as a result then so much the better. so anyway i'll have a bit of a prop editor sandbox to play in and develop technique with it before applying it elsewhere. if we can get some cool stuff out of it there, i'll go back and add them in to the regions already done in a 2nd/3rd pass.





   JLJac on March 28, 2015, 08:03:50 AM:

Quote
The idea that you can under-eat once, but not twice in a row, seems to make sense! But how to communicate it? It seems a little harsh that first you survive eating too little, but the next time BAM total binary death haha!

I think that's where your establishing pictures might take over. Say you return from a hunt under-fed, when you settle down to go to sleep you either get a picture/animation showing the slugcat returning happily and healthily, or you get one showing the slugcat exhausted and hungry. This lets players know that something is up. Maybe the bat symbols fill up to show how many you ended up with, like a score screen?

Then before you start the next round, you either see the slugcat getting up looking healthy and ready to go, or the slugcat is looking pretty rough and possibly slightly emaciated (ribs showing or something, but nothing that would have to show up on the character avatar itself). Maybe the bat symbols are outlined in red this time, to let you know it’s serious?

If you return under-fed this time, the end-picture would of course be the slugcat returning looking incredibly exhausted and starved, and then some sort of death-screen to demonstrate that the slugcat had starved during hibernation.

If there's still room for confusion about how the slugcat could be all emaciated after just going to sleep, perhaps the timeframe could be illustrated by an animation/illustration montage showing the rains coming and a week or (or however long a rain cycle is) so passing? That might be a nice break between hunting cycles, providing a little downbeat to punctuate gameplay.

I dunno, that might be way more illustration than you'd want to actually have (I think it has the potential to be really beautiful), but it's an example of one way you might go about it.

This sounds about right! Hand Thumbs Up Right Hand Thumbs Up Right Hand Thumbs Up Right Hand Thumbs Up Right Hand Thumbs Up Right

We have been discussing maybe taking in an illustrator, and I think that if we end up going down this route it might actually be necessary, because my own visual art skills are super rusty by now haha! Also after a year of programming and almost no drawing, my procedural animation skills have developed simultaneously as my drawing has rusted away, so I don't really know if I could make illustrations that could live up to the level of the in-game graphics. And then comes the issue of time o_0 The problem is of course that I'm super particular with the style... We'll see how it goes! Lots of programming to do before this is on the table!

Also, congrats! I'm super excited to see what James does with this new toolkit you will heroically pull together Joar!
Thanks! Just a small edit there  Cheesy

YEAH. def. considering how established the visual style is at this point, adding this whole new universe of angles has to be done pretty subtly. Ill admit im a little apprehensive about it tbh. The region its "intended" for (in my mind) is the Garbage Wastes, in which having angular junk sticking out in the background is just a good look, and if that winds up having a more unique look to it as a result then so much the better. so anyway i'll have a bit of a prop editor sandbox to play in and develop technique with it before applying it elsewhere. if we can get some cool stuff out of it there, i'll go back and add them in to the regions already done in a 2nd/3rd pass.

I'm actually happy to hear that you're a bit apprehensive, because I feel that cautiously is the right way to go into this. We do have an art style that's well defined and appreciated by a lot of people, and this is definitely going to change things up, so let's be careful about it. That said, I think just little touches (such as having 4 columns in the background, of which one is broken and resting against its neighbor) can really spice things up. Everything being aligned to the grid gives the world a sort of consistency and rigor that's probably needed in order to make the environments feel like something you can understand and navigate. Stuff that's not on the grid will definitely need to be the exception rather than the rule, or it will get too visually noisy. Let's experiment with it and see where it goes!





   jamesprimate on March 30, 2015, 02:14:20 PM (Last Edit: March 30, 2015, 02:22:09 PM):

Was thinking about the illustrations a bit over the weekend, and ended up producing some fan art!



this looks AMAZING. you have twitter? can i tweet it from the RW account? want to properly credit!





   jamesprimate on March 31, 2015, 02:19:34 AM:

Quote from: tortoiseandcrow
Shucks! Thanks so much James, and everyone else who said nice things. I've got a twitter account for my podcast, but I prefer to keep it separate from my design work. You're welcome to tweet it if you like, though! If you want to credit it, my name is Kirk.

posted! liked and re-tweeted by many :D https://twitter.com/RainWorldGame/status/582716976407175169

New kickstarter update posted, if anyone is interested in a summary of the past months progress: https://www.kickstarter.com/projects/rain-world/project-rain-world/posts/1183701

kickstarter's handling of gifs seems to have really gone down the drain in the last overhaul im sad to say. the new UI is pretty bad too. worse than before if thats even possible :/

Things have been a little slow in level land. trying to get the new editor up and running was some fits and starts, but looks like the bugs have been worked out and 2x2s are on the menu. Joar made some good progress with the prop editor as well, and early test images with it seem to suggest that a lot is possible that wasnt before.  Hand Metal Right Hand Metal Right Hand Metal Right

also we talked out a new creature that had been needed for Sky Islands that im pretty excited about, but i'll let him fill you in and show off demos when hes on Smiley






   JLJac on April 01, 2015, 07:33:29 AM:

 Shocked Shocked Shocked Shocked Shocked
That is nothing short of amazing! Thank you soooo much  Grin

Prop editor is coming together!



This isn't actual art, just me testing that the rotating props are working. A lot of potential though  Hand Thumbs Up Right Hand Thumbs Up Right Hand Thumbs Up Right





   JLJac on April 01, 2015, 07:52:07 AM:

Haha yeah  Cheesy The real art James comes up with will probably look a lot different though.

Update 410

Sorry about it being a bit quiet! James and I have had several long talks about the direction of the game, and have decided on some pretty fundamental changes.

The big change is about the slugcats offensive abilities. We definitely felt that the game was lacking something, and it took us a while to figure out what. However, we came up with some ideas, and I've started on some basic implementations:



Not really done yet, I want to add some flying shells as well, but I'm really happy about the lighting effects  Smiley Obviously there should be sparks on impact as well, but I need to get some basic infra structure for the bullet physics down first.

Other than rocks and spears, we want to expand the slugcat arsenal in order to give the gameplay more variety. We want the new equipment to work with the world, so instead of just adding standard weaponry we have some ideas that are more in line. I don't want to give too much away, but other than this (admittedly fairly standard) machine gun, we want some sort of weapon that shoots spears as well - basically a spear bazooka. I've also made a few sketches of a rock grenade, basically a bomb that shoots rocks in all directions upon detonating.

This is really gonna change things up  Shocked Will be super interesting to see how these new pieces interact with the existing enemies. In order to make the enemies challenging, we will probably have to equip some or most of them with new offensive capabilities as well. I'd like for the lizards to have head-mounted machine guns, but we'll see what works.

Lot's of exciting stuff coming up!





   JLJac on April 02, 2015, 08:51:37 AM:

Upon closer consideration, we decided to go back to the original plan  Wink Hand Thumbs Up Right

Update 411
Apart from the editor I have been working on a new creature. I haven't made updates yet because I've been working on the behavior and haven't yet skinned it, and I know that what you guys want to see is gifs of stuff other than moving little boxes. However, the behavior is starting to finish up, so I thought I'd give you a little update on what's going on with that.

The new creature is based on a backer suggestion, and basically a mix between a flying squid and a cicada. It's roughly slugcat-sized and a very quick and proficient flyer. Here are some sketches, even though judging by how things have been going so far the actual implementation tends to end up not looking a whole lot like the sketches.




When experimenting I tried to make it so that it flies with its head up because the vulture already flies with its head down, but it looked a bit goofy and totally lost the squid-like quality, so I settled for a head-down design. A lot of what we had planned for the "buzzer", including quite a bit of how it actually looks, have ended up going into this creature instead. For the buzzer we have other plans, but as for how it will look that's a bit in the blue right now as this one ended up stealing a lot of its design particulars.

There are still a few things that are not decided on, such as exactly how the tentacles/legs will look like, and how long they will be.

However, the behavior is coming along nicely!

What I'm most excited about with this creature is that they're the first one that actively and purposefully migrates through the world on a large scale. Cicadas eat bats, and upon spawning in specific cicada den rooms they map out a route to a closeby active swarm room. Then they move there, through abstract or realized space. In the swarm room they hang out, hunting some bats. They can't eat bats on the fly like the slugcat, but rather have to bring them back to stow them in their dens similarly to how the lizards stow you in their dens and then re-emerges to hunt some more. After storing a bat, they head back to hunt some more if the rain timer permits it.

This means that between the cicada rooms and the swarm rooms there's a traffic of cicadas, travelling in one direction with bats in their clutches and in the other without. This stuff really works  Tears of Joy

The cicadas can catch bats in abstract space, dispose of bats in abstract space and move with bats through abstract space. So there can be quite long migration routes through several rooms, not all of which have to be realized, and traffic will still keep flowing. My early testing with this stuff is something I'm super excited about! Entering a room where cicadas are flying back and forth gives so much life to the game world, and following the route in either direction to see them hunt or dispose of their prey really adds to the sense of scale. You can feel that there's a process going on that is larger than just one room, and this is something I'm super happy to finally have implemented. Naturally you can also use this to your advantage by following the cicadas to the swarm room. Only problem is that then you end up in a swarm room which has cicadas, which is pretty annoying...

The cicada-player relationship is based around the cicadas viewing you as a rival in their bat-hunting. They won't actually hunt you, because they're too small to eat you, but they'll antagonize you. Their standard method of harassment is bumping into you with a quick charge attack or grabbing on to you and pulling you in some random direction, both of which is actually really dangerous in the Sky Island terrain where it's easy to fall to your death.

One thing I'm not done with in their behavior is that I want them to only attack you if you're actually close to a swarm room, but for that I need to do something I call Dynamic Relationships, which is a small AI rewrite I haven't gotten around to. Basically right now the creature relationships are all defined on startup and can never change during play - if one creature views another creature as prey it will always do so, for example. With the dynamic relationships I want to take that data and filter it through some context, such as "attack this creature only if it's close to a room of this specific type" or similar. This same system will also run stuff like the Vulture Mask (if you're holding it lizards are scared of you, otherwise they hunt you) as well as the individual traits (stuff like aggression can be weighted through the individuals specific setup) and the individual relationships (if you save the life of an individual, that individual might stop hunting you). Lots of exciting stuff when I get around to that, which will be soon!

As for now, when a cicada stores a bat in its den a new bat is spawned randomly in one of the active swarm rooms to keep bat populations up. For all of you food-web purists out there, sorry  Wink I'm fully aware I can't make this system balanced, and it's more important to me to keep the world active and looking like a balanced system rather than it actually being one.

The last note on the cicadas is that you can pick them up, similarly to how snails can be picked up. When you hold the cicada it will try to fly, and this grants you the ability to do long, floaty jumps. As it carries you, the cicada loses stamina, which is replenished when you're on the ground and it doesn't have to actively carry you. This means that you can't use the cicada as an infinite parachute, which is both a gameplay limitation and a rationalization of the fact that you still die from fall damage if your fall off the sky islands.

We've been talking a bit about how easy it should be to catch the cicadas, and we think we have an idea but it'll need some tinkering for sure. I don't want you to be able to just run into them and grab them as they're actively attacking you, or they'd sort of lose their role as a threat. The current idea is that when they're buzzing their wings you can't catch them, but if they're sitting on a wall or momentarily stunned you can.





   JLJac on April 03, 2015, 08:22:26 AM:

Instead of (or in addition to) them being agressive towards you in certain rooms I'd suggest adding some reactions to the player behavior. For instance, if they see you catching a bat they will try to take it from you, instead of catching their own, and they will pull you away from bats in general, if you get too close.

Although those kinds of behaviors should really depend on their numbers. How many cicadas can we expect to be in a room simultaneously? If 1-3, then being generally agressive would make sense, but if more than that, then it may be a bit overwhelming to the player.

Also, do lizards and vultures eat them?

Edit: Also also, do their wings have to be so so cicada-like? I think it would be more interesting to make them a mix of dragonfly's long and thin dual wings and cuttlefish's single floppy surface.

Having AI creatures be able to read player behavior is something I'm really interested in, but it's really really difficult stuff. Like, proper academically researched difficult stuff. It's similar to voice and image recognition software in that it takes a bunch of fuzzy data and tries to boil it down to a hard-lined concept, which computers are not naturally inclined to. Like, trying to have the AI figure out if the player is aggressive towards a specific creature - how would you start? Maybe by checking if the player is moving towards the creature, that seems like a decent starting point. But from there on it gets very difficult. Trying to interpret more complex intentions from the player actions is even harder. I'll probably give some of this a little bit of a go though, but don't expect too much!

White lizards eat cicadas, catching them with the tongue. Vultures might snag one if there's truly no other option available.

I think the creature is cuttlefish-like enough, and the little fins wouldn't really make sense for air flying, right?

If the bats are spawned randomly in any of the swarm rooms, does this mean that cicadas can decrease the population of any specific swarm room that they frequent (while the global population remains the same)? I kind of like the idea of being forced to move shelters because the cicadas have out-competed you on the swarm rooms nearest to your current home base.

Also, april fools joking aside, as far as offensive/defensive capacities go I find myself imagining scenarios where it would be awesome to have the ability to stab with a spear without releasing it, such as being trapped in a corner and trying to defend yourself/the pups from a vulture or something.

Also also, speaking of Dynamic Relationships, is there a point where if you cause enough trouble/pain for a predator such as the vulture that they'll cut their losses and retreat?

Theoretically yes, but the bats migrate around the world so it wouldn't be super clear. The bats converge and dissipate in different swarm rooms all the time.

We've been talking about stabbing and decided on no. Throwing the spear is a bit of an investment, if you could stab every creature encounter would just be about tap-tap-tapping the button, and it'd feel like a fighting game. I think an important feature of Rain World is that it is a game that features fighting, but it's not a game about fighting. Violence is just one of the mechanics.

When dynamic relationships are in it's really low hanging fruit to have a predator be afraid of you after you've induced enough harm on it! So yeah, that's exactly the kind of thing I want to do with the system  Hand Thumbs Up Right Hand Thumbs Up Right

Don't forget that n creatures is interactions, it's exponential. Even though there is generalization that limit the number of link, it increase the scope of the game greatly, I hope you have planned for it? How many creatures there is in total? Maybe after a certain threshold required (such as backer's) you should set hard limit and treat everything beyond has bonus, as you might exhaust. It can be mitigated by creating and enforcing scenario that limit different species in the same place according to interactions limit.

In the lingo build, this was the case as I made all interactions manually. After adding like, 4 creatures things got pretty rough  Shocked C# build has a system where I can define creature relationships and give them categories such as "Eats", "IsAfraidOf", "FightsForTerritory", etc. The relationships can also have different strengths.

Then I try to keep basic behavior such as hunting or fleeing as general as possible, so that they can work with any two creatures. For example, say that a blue lizard is fleeing. It will use the data of the creature it's fleeing from, and depending on that the flight AI module will behave a bit differently. Fleeing from a Green Lizard will make the floor tiles seem more dangerous, maybe causing it to climb up a wall. Fleeing from a vulture will make narrow spaces seem safer. All of this stuff is basically just about interpreting the AI bake maps and other available data in a dynamic manner, so I actually don't have to write any creature-specific code to get these behaviors.

Using this, I can define most creature interactions in a single line of code. When adding the cicada, for example, the only code I wrote to make it interact with the Vulture specifically was this:

        EstablishRelationship(CreatureTemplate.Type.Vulture, CreatureTemplate.Type.Cicada, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.Eats, 0.1f));
        EstablishRelationship(CreatureTemplate.Type.Cicada, CreatureTemplate.Type.Vulture, new CreatureTemplate.Relationship(CreatureTemplate.Relationship.Type.Afraid, 0.7f));

Vultures can eat cicadas, but are pretty disinterested. Cicadas on the other hand are afraid of vultures (because they're huge). To my delight, both the hunting of the vulture and the fleeing of the cicada seemed to work out like expected.

So even if the number of interactions will grow with n^2, that's actually sort of acceptable if it's only two lines of code for each interaction. Soon it's getting close to the point where I need to make a huge sheet of paper and put the creatures as rows and columns to plot it all out though. It's a lot of fun, as this is where the weird emergent behavior happens.

Then of course some creature relationships are more custom. Snails and leeches, for example, have a bit of code going on between just the two of them. But these special cases won't grow exponentially, they'll just be thrown in here and there when we have some specific idea.

This brings to mind the mobbing behaviours of small birds like starlings. Squabbling one on one with competitor species, harassing hawks in a large mob to drive them away. It'd be neat to have them be a pain to compete with, but have them also be kind of beneficial to have around in large groups because they can sometimes drive away a vulture.

Maybe it could be pretty cool to have cicadas harass vultures like this... I'll try it out Smiley


Some moving boxes! It's pretty murky what's going on right now as there are no animations, when skinning them I want to add visual indicators for when they're charging, grabbing you etc so you have a more clear understanding of what's going on.



The cicada jump! Obviously the player should actually be holding on at all times haha - more animation work to be done!






   jamesprimate on April 06, 2015, 05:30:53 PM:

^^^^ ROFL





   jamesprimate on April 06, 2015, 05:47:27 PM:

Second player support hasn't really been added yet, just spawning the 2nd Slugcat for testing purposes. It's completely "broken" as a game mode for now. If everything goes to plan, the next build will be more multiplayer focused, so that would probably happen then. But yes, obviously we plan for all players to be able to use gamepads. Still a way to go between now and then though.

2 player is pretty fun though right?? Even totally broken  Gomez Gomez





   JLJac on April 07, 2015, 12:04:01 PM:

I'm spending two days in Boston with James, and we've been doing some important work on mapping out the world, discussing how you will progress through the game etc. But, not a lot of the standard solitary work we usually do, i.e. levels and programming. Will get back to that as soon as I arrive in Sweden! So more updates to come soon, but we apologize for the lack of updates the last couple of days  Hand Thumbs Up Right





   JLJac on April 08, 2015, 07:09:01 AM:

Update 412
A plane is not the best working environment for deep focus-stuff, but it works for some easier things, so I decided to move forward a bit with a few things we've discussed. The big thing is the "adrenaline" system, where the player can get a speed/jump/general agility boost. I started on an implementation of that, but it's not done and also we still don't really have a super solid idea for how it should be triggered, so I'm going to wait with that a bit. One thing we want to do is to make the adrenaline rush somehow connected to catching bats, so they feel actually useful and hunting them isn't a complete shore. However I'm not super keen on the idea of getting the rush immediately when catching the bats, because I want the rush fairly short and it's not at all certain that it will be contextually useful in the exact moment you happen to get a bat. One idea is that for each bat you catch (or for each 3 bats, or whatever) you gain a Rush, and then you can somehow activate that Rush at a later point, without losing the bats in terms of food. This idea seems to make sense, but I don't know what would be a good way to trigger it. Currently the game uses only two buttons, and I'm hesitant to add a third for this single purpose, there should be something more elegant. It could fire automatically when a predator gets close, but I can totally see how that could be frustrating. So yeah, some more design thinking needed.

But, I got some new moves in!

Belly slide:



This is basically a more daring alternative to the backflip for when a lizard is between you and where you want to go. The main difference is that where the backflip takes you over the head of a lizard chasing you from behind, this is useful for getting past a lizard you're running towards. The game needs more moves that aren't jumps, as basically all you've been able to do so far is jumping in different ways, and I hope this one can start to fill out that niche.

Then there are also a few new moves for the maze parts of the game. Originally Rain World was supposed to be 50/50 platforming and crawling in mazes, but we gravitated away from that as the platforming was simply more fun. Part of the reason for that was probably that in the mazes you had nothing else to do than move in 4 directions. The game will never go back to 50/50, but James wants to re-introduce a bit of maze crawling for one or two of the regions, and hopefully this new move set will make that more exciting. Testing in a room that's only narrow corridors with a bunch of lizards has yielded hopeful results - it's a fundamentally different game, with a lower tempo and more focused on sneaking and thinking ahead, but it can get pretty tense as well!

First up we have two vertical moves. Hitting up+jump will make the slugcat heave itself upwards quickly a few tiles, after which you face a bit of a slowdown penalty, which is supposed to make the average vertical speed somewhat break even. This is supposed to be useful in situations where you quickly want to get up and around a corner to get out of the field of vision of some creature. It is also useful when getting up to a ledge where you can switch to running or some other "non-crawling" means of locomotion, because when switching you can sort of bypass the penalty and get a little speed boost. The other move was suggested by ~~ I think it was Christian, and is something very natural I can't believe I didn't think of myself - the slugcat just stops pressing against the walls and drops down a chute. You trigger it by pressing down+jump, and the slugcat will continue falling for as long as you hold the down button. When adding NPC hearing (which should happen soon!) you should probably make an audible sound if you hit the bottom of the chute without grabbing on to the walls first, as a risk-reward balance for the speed gain you get.



Then we have a much requested feature - the ability to turn around in a narrow corridor. You do this by hitting the opposite direction button + jump, or up+jump if you're upside down in a vertical chute. I've intentionally made this move super awkward, as it is actually sort of too cramped for the slugcat to move around in there, and you shouldn't go butt-first into corridors to begin with  Evil That being my main philosophy haha, I can still totally see how there are some situations where you're alone in a room with no lizards, and end up facing the wrong way in a corridor that goes on foreeeeeever, and it's just tedious. So here it is, at least it's possible now.



Last one is a horizontal "shuffle", triggered simply by pressing forward+jump. This one takes some skill though - if you just press jump at any place in a horizontal corridor, you get a pathetic little forward trust followed by a slowdown penalty that makes your net speed pretty much not break even. However, if you have solid terrain behind you as you hit the button, you get a good forward momentum with just a small penalty at the end. Basically the slugcat needs a solid block to push against. This one is especially useful when coming around a corner into a horizontal corridor, like so:



Oh, and also, now I'm home, so I'll get to skinning the cicada! See you tomorrow!





   JLJac on April 08, 2015, 07:41:36 AM:

Segmented or plain? (All colors just mockups, tentacles will be procedural but I just drew something in there to get a feel for it, no wings yet)



The segmented looks cool, but the RW art style is a lot about flat colors. Also the finer aspects of the pixel art will likely get pretty mashed when things start to rotate...





   jamesprimate on April 08, 2015, 11:14:51 AM:

wow that was a productive plane ride! everything looks suuuuuper good too Hand Clap Hand Clap Hand Clap






   JLJac on April 08, 2015, 12:16:41 PM:

Hm, 3 votes for plain, 3 for segmented... Maybe some more subtle pattern instead? The segmentation looks cool, but is a tad too visually busy in my opinion. I'll experiment with third options. Some changing pattern would be cool, but this is a pretty small creature that I don't know if it could make it justice, better do that on some larger beastie. Also I have some other plans for shader stuff with this one, and don't want to go totally overboard with the shaders.

Also will there be any co-op only moves?
Interesting idea!

So, just a brief suggestion. Something I noticed in the alpha is that there ARE multiple dens, but when you are well fed, and sleep in them after the rain, you still spawn in the original one. Could you put some kind of rough "save" system in place for the next alpha?

Also, for the cicada, segmented for sure. More "insect-like" over "squid-like". The thing already reminds me of some kind of alien mind probe, making it look more like a squid definitely heightens that impression.

Yeah the current alpha saves no progress at all. Trust us, when we've finished the game the game will be finished lol, it's just taking us a while to get there  Who, Me? Don't want to make too many promises, but I think the next alpha might have some more actual game infra structure set up, contrary to this "run around and see the creatures" sandbox we have now  Hand Thumbs Up Right Noted on the squid/cicada balance.

Given the size, I'd say plain, but if they come in really large flocks that might "blob" together you might need some sort of segment or panel along the sides to help distinguish the outlines of individuals. If you need visual interest, perhaps an occasional vertical pulse of colour along the body?
Hm yeah, the contrary argument would be that a flocking creature should perhaps be less visually busy? If I remember correctly, zebras have their stripes so the hordes turns into visual noise right?





   JLJac on April 08, 2015, 12:29:23 PM:

How about this?






   jamesprimate on April 08, 2015, 01:11:10 PM (Last Edit: April 08, 2015, 01:20:37 PM):

^^^^ into that. Christian knows whats up

oh also there was some talk about having 2 classes of cicadas, one that stay around cicada nests and one that hunts, so perhaps that could come into play with the patterning as well.





   JLJac on April 08, 2015, 11:10:15 PM:

Regarding adrenaline rush: the trigger could be the down button when you are already crouching/crawling. It's a common "charge" button in platformer games, and visually It could be like a cat tightening its muscles and arching its back, readying itself to pounce. It would still need some way to let the player know clearly when and if the adrenaline rush is available. Simply not allowing the slugcat to enter such a "ready" state might be a bit confusing to players.
Yep, was thinking along those lines as well. There could be a sound while holding the button that increases in pitch or something, so you hear that some sort of charging is going on, and then a sound cue when you actually reach the adrenaline stuff. I have a bit of a palette change when in adrenaline mode, the palette is desaturated a bit, so you should be able to understand when it has actually happened.

Problem is that you'd most likely want to activate it in the middle of a hectic situation where you don't have the time to sit down for 2 seconds. That could be an interesting risk/reward factor perhaps, you have to try to estimate if the situation will be dangerous and activate the adrenaline before going in. However I don't want it to be frustrating because you feel that you waste all of your charges and never get to use them when you'd actually want to.

I disagree. I think the fall should continue as long as the jump button pressed. That way the continuous descend with a few short drops is achieved with continuous press of down with a few jump taps. That would be a more natural solution.
Good idea, I'll try this out and see what works best  Hand Thumbs Up Right


This is a good look!

Procedural is cool, but I don't really know if it fits for a swarming creature? Bees etc all look the same, if they had their individual patterns they wouldn't really look like social insects, more like a haphazard band of bandits. That would be really cool for the yellow lizards though, which are also lizards so it'll come really easily. For these I think subtle color and size variations will probably be enough. Also... I've got to get a move on  Who, Me?

I've drawn it in 9 angles now, and think it's looking quite good:



Smaller than you think looking at it in scale 1:1!

I think I'm gonna roll plain, they already have quite a lot going on visually towards the bottom of the shape, and the wings will fold up over the body when sitting to add some interesting stuff there as well. RW's art style is heavily dependent on flat color surfaces, so I don't want to do too much with patterns etc on small critters like this or the pixels will become jumbled. For a larger creature like the vulture that would be really cool though - when doing the individual stuff for the vulture I'll def look into some random patterns.






   jamesprimate on April 09, 2015, 10:59:42 AM:

as much as i love the concept, the diagetic UI question always seems to create significantly more problems than it solves. Just for the sake of testing, Joar did a UI mockup of something simple and abstract, which really fits the aesthetic style and conveys all the game info pretty much flawlessly at a glance (even for multiplayer!)

I think were going to hold out on it for a bit just in case a seamless in-game solution falls in our laps, but its nice to have a solid backup plan all ready to go  Hand Thumbs Up Right





   JLJac on April 10, 2015, 11:41:11 AM:

An inbetween solution might be tying the "ready state" to predator proximity while still having the mode be manually triggered. The adrenaline charges up automatically the closer a predator is. That way you get an audio-visual cue that you have a charge, are also able to trigger adrenaline mode during a more hectic situation, and the mode replicates the kind of tension the player is likely to be feeling. You've mentioned having the music tied to "threat level" - perhaps this could work a similar way?

This seems intuitive, but it'd still require some sort of button press from the player right? In that case, why not have the ability to trigger available at all times?

Though I'm all for having a purely diegetic UI, I'm inclined to agree, now that how many bats you eat means two different things (unless you don't necessarily care if the player knows exactly how many charges they have left). Perhaps a menu button that brings up a HUD with the two rows of dots? That way checking your status is a deliberate action to pause the game and take stock, rather than being part of your ongoing experience.

Yeah, as the game is getting more complex it's more and more difficult to keep UI out while keeping it understandable. Two rows of dots would do a lot, and as you say they wouldn't have to be on-screen at all times. Don't want to add buttons, but you could for example make it so that UI only appears after standing still a second, or when something changes (bat caught, lost etc).

If no. of bats eaten = no. of adrenaline boosts available, then at this point I think you have to have some UI to keep track of things. Even if it's just two rows of dots. It's too much information to communicate indirectly.

Another possibility is that you get more adrenaline time the more bats you eat, but upon triggering the adrenaline you always use them all... We're going to have to try out a few configurations and see what works.

Oh oh oh... or, if you protect a lizard from enough creatures, it would not just become neutral, but would actively befriend you, and protect you from other creatures. Imagine turning an enemy into an ally through persistent acts of kindness! Isn't that sort of how wolves became dogs?

I'd like to see this, yes! Once I get around to the dynamic relationships it should be totally possible!





   JLJac on April 10, 2015, 11:58:29 AM:

Update 413

Cicadas skinned!

An insane amount of work went in to this, and I'm pretty much done, but probably not entirely done. We have folding wings, grabbing tentacles, etc etc etc ...

Interacting with player:



Hanging out:



The cicadas are the only RW creature so far that is explicitly gendered. I won't decide on which is male and which is female, but they come in two varietys, let's call them gender A and gender B. A colony has about 50/50 of them, unless we decide to change that because of game balance stuff. A are white and a bit larger, and stay to protect the colony during a cycle. They'll hunt bats that are stupid enough to actually enter the cicada hive, but won't go out of their way. B are black and a bit smaller, these are the ones that migrate to bat swarming areas to catch food. These are likely the ones you'll encounter first, as they occur out and about contrary to just inside the hive.

Slow motion flying:



Parts of the cosmetics are individual as usual, one of those factors are wing length, where I think I might have gone a bit over board - some have huge wings and some tiny. I'll tighten up the bell curve a bit there. Some of them have a busted wing as well, which will just hang passively.

Cicada jumping:



The player actually holds on to two of the tentacles haha!

And a bonus one, white lizard catching a cicada:






   JLJac on April 11, 2015, 09:18:47 AM:

ty ty ty! Excited for these myself!

@theEasternDragon, having them curl the tentacles would feel sorta like a waste, you'd agree with me if you spent 3 hours doing the dangly physics  Cheesy They do curl them up when carrying bats though. The stuff on their head is a shield or plate of some kind, assumedly the same material as the wings.

@tortoiseandcrow thanks! The interaction is probably just a bump together, but keep projecting, that's how the magic happens haha! White ones are slightly heavier than black ones, and they have a little bit different behavior when annoying you, but the biggest difference is in how they hunt. The black ones do migrate from a cicada room to a bat swarm room during the cycle, you can see them going back and forth if you come across one of their routes.

Both buttons at the same time seems viable, the only problem is that holding the jump button makes you jump higher, and it's quite common to want to throw something as you're jumping... Taming of creatures will actually not be all that difficult, I predict, once the Dynamic Relationships are in.

Update 415

Dynamic relationships! What is this thing I'm doing? Basically in the old set-up, I wrote the AI with a sort of limited idea about the sort of interactions I'd want to implement down the line. I though of creature relationships as static, one always eat the other, the other always flee. In that system it made sense to make it so that upon spotting another creature the first time, the AI takes a look at the relationship to that creature, and hands it off to a dedicated AI module to take care of it. If the relationship is "Eats" the creature gets sorted into the PreyTracker, if the relationship is "AfraidOf" it's dedicated to the ThreatTracker, etc.

This system is very limited, so what I've been doing today is writing a RelationshipTracker, which re-evaluates the relationships to other creatures frame-by-frame, and if the relationship changes it sorts it into the correct module. Sounds easy, but there's a lot going on. Basically each module lives its own life, deleting and shuffling the creatures it keeps track of as it wants. So I have to make sure that if a relationship is moved, it's properly removed where it was, properly added where it should be, and so on. The good part is that this has solved some other problems that were hanging around, such as creatures sometimes forgetting about threats they haven't seen in a while and then being unable to add them back, and the like.



The main tracker in a RW creature's AI is simply called the Tracker. This one basically keeps track of what creatures I know of, and where I think they might currently be (a notion that might be correct if I'm currently looking at them, and various degrees of incorrect if it was a while since I saw them). Each creature I know of has a representation in the Tracker, and this is sort of the UR representation for that creature, other modules refer to this one when thinking about a creature.

Other trackers such as PreyTracker and ThreatTracker has a reference to the creature representation in the Tracker, as well as some other module-specific data regarding that creature, such as how yummy it looks or whatever might be relevant.

The relationship tracker keeps goes through the representations in the Tracker, asks the AI what relationship it currently has to the creature in question, and if necessary moves stuff around to where they're supposed to be. For example, if I am only hunting the slugcat within a specific area, but the slugcat just exited that area, the slugcat representation needs to move from my PreyTracker to some other module.

This stuff is all pretty much just logistics. The cool stuff is an "internal state" for each tracked creature that is kept inside the RelationshipTracker. An internal state is a mini data structure which keeps track of some relevant stuff. Let's make a simple example: I'm a cicada - I want to cause a slugcat trouble. Unless the slugcat is holding a spear, in which case I want to get away.

So the slugcat is on the ground, no spear, and its representation in my cicada head is comfortably within my AgressionTracker. Now the slugcat runs over and picks up the spear. Now the thing is that we're doing this thing where RW creature don't know what they can't know. So say that the spear and the slugcat are out of my sight as the weapon is equipped. Every frame I (the cicada) ask my RelationshipTracker what relationship I have to the slugcat. The RelationshipTracker can't access the data about whether or not the slugcat is holding a spear directly, it has to go ask the internal state representing the slugcat. The internal state has a bool which represents the slugcat holding a spear or not.

As I still think that the slugcat is unarmed, I'll continue to go after it. Until I come around a corner - then I suddenly have a visual on the slugcat, and the internal state is allowed to correct itself. The bool changes, and with this new information the nature of our inter-creature relationship shifts. The RelationshipTracker takes care of it, moves the slugcat to my ThreatTracker, and I can start scramming.

That's the theory, now let's take a look!



So notice how the cicada is harassing the player, until the player is armed, then it decides to get out of there. The player then goes underground and actually throws the spear and is not armed any more, but because the cicada can't see this it's state of fear is unchanged. The next time it saw the player it would reconsider. This is the sort of stuff that makes me all warm inside  Shrug

The system seems to be working, the only thing that's needed now is to migrate it to the vulture and lizard as well. The other creatures use simpler AI's that won't really need this level of complexity.

I have this policy that I'll tell what I've done, not what I hope to do, but you can probably imagine the possibilities yourself. Social stuff such as befriending creatures, angering creatures, creatures reacting dynamically to different situations like trying to save their friends from the jaws of a lizard, etc.





   JLJac on April 11, 2015, 12:05:35 PM:

Don't worry guys I'm not making lizard tamer 2000 - also the spear/cicada thing wasn't really the thing I wanted to show, I just wanted to give an example to show of the Dynamic Relationships. James says I'm always focusing on structure rather than content, but haha here we go again ~ the thing I've been talking about the last couple of days isn't the specific examples I've brought up, it's about the infrastructure: Now a creature can re-evaluate its relationships to other creatures depending on context. There's an infinity of possibilities that can come from this, and when I start adding this actual "content" I'll be more artful about what goes in and what doesn't, promise!

On befriending a lizard specifically, this is more of a fun idea than a serious suggestion for a common game mechanic. I'm interested in procedural narratives, and I'm interested in what can happen rather than what will happen most of the times. Think of dwarf fortress - the "story" of the game springs from its actual mechanics and its procedural elements, and once in a while something weird happens. If a lizard becoming friendly becomes a thing, that's something that would require a veeeeery specific combination of that particular lizard's personality traits and a super unusual situation - think of it as something that could happen once in a thousand play-throughs and which you'll have to post videos of to actually prove to people that it happened, rather than a game mechanic to fall back on!





   jamesprimate on April 11, 2015, 03:19:58 PM:

Idk, lizard friendship simulator 2015 seems pretty good  Hand Thumbs Up Right





   JLJac on April 12, 2015, 12:01:43 PM:

Update 416

Gotten started on audio implementation. I have a pretty solid idea about how to do it now, I think. I have a text file where all the sound triggers are named, and then you can put down the name of the sample to be played at that trigger. This means that I can just set up the triggers and then send it over to James for him to actually work out what samples should go where, and tune them entirely on his end.

Under the hood I have a system where each sound trigger is represented in a enum, and the enum can be cast into an int which refers to a position in a list where the sound to be played is. I use this system because I think we'll be playing a lot of little sounds, and I don't want to have the code repeat through any sort of list to look for samples. This way, the trigger inherently holds the "address" to the correct sample, and the sound engine can just go and fetch it. From my understanding this doesn't do any implicit repeats through lists after compilation, as the enum-int transition is just about changing the data type of a variable.

I have some sounds playing, and a basic sound engine working already. I can play a "disembodied" sound which comes from anywhere and has a set pan/volume, and now I'm working on sounds that are played within the actual world and which are tied to a "Virtual Microphone", which has a position within the game world and changes the volume/pan according to the sound sources' relative position to it.

Things are moving along well enough! The only problem I have so far is that Unity's volume control for samples seems really weird. Between 10% and 100% volume I can barely hear any difference, and pretty much the entire scale is squeezed together between 0% and 10%. I can sort of hack around this problem by just doing a Pow operation on the volume with an exponent of 3 or something, but it puzzles me. Does anyone know anything about this?  Who, Me?






   jamesprimate on April 12, 2015, 12:51:50 PM:

had full sound/music/sfx in the lingo build, so everything is ready to go. just hadn't bothered putting it in the new version yet. the futile framework joar is using doesnt use unity's sound engine, and futile's native sound engine BLOWS, so we had a friend working on a custom sound engine code / extensions. It just came out of the oven a few weeks ago actually. Big shoutout to Garrett from Neon Deity Games for all the help!  Beer!





   JLJac on April 13, 2015, 08:03:32 AM:

The game hasn't had any sound before now? Huh?

 Who, Me? Who, Me? Who, Me? Who, Me? Who, Me?

Things are moving along well enough! The only problem I have so far is that Unity's volume control for samples seems really weird. Between 10% and 100% volume I can barely hear any difference, and pretty much the entire scale is squeezed together between 0% and 10%. I can sort of hack around this problem by just doing a Pow operation on the volume with an exponent of 3 or something, but it puzzles me. Does anyone know anything about this?  Who, Me?
Sounds like what happens when sound is scaled linearly instead of logarithmically. http://en.wikipedia.org/wiki/Weber%E2%80%93Fechner_law#The_case_of_sound

This seems reasonable! Why would it work like that though? My bypass sort of works, so I'm just rolling with that now, but it still weirds me out.

Today I've been working more on the sound engine, which seems to be working in about every way I want it to work now, except from playing ambient sounds and music. It does play samples though, and the samples can be attached to an object in the game, assigned a static position, or just played as a "disembodied" sound which has a pan assigned.

On top of that I've been writing this sort of intricate input syntax for James to use when putting the sound in the game. What it's basically about is that all the sound triggers are named in a text file, and by writing some simple instructions James can tell the game what to do sound-wise on that trigger. The system can do stuff such as randomizing pitch or volume within an interval, pick a random sample from a list, play multiple samples at different volumes at once, etc etc.

Now the task at hand is basically just to place a trillion sound triggers in the code. At first my method was to scroll through the code and try to come up with sound triggers to put in there, but that was not very effective so now I've switched the process around, and write a list of whatever sounds I can think of first, and then try to find where in the code the trigger should go. Lots of work. I don't think I'll actually attempt to place ALL the triggers before sending it over to James, but I want to have a good chunk in.





   JLJac on April 14, 2015, 11:19:37 AM:

@NicoM, yup most of this stuff is totally learnable if you're ready to walk through the shadow of the valley of utter frustration :D That said, I do get things to work, but I don't get them to work smoothly and within slick general frameworks as someone knowing what they're doing would. So hacking on until you get there is totally a good method if you're the only programmer on your project, but I think the code that comes out of it would be an issue if you're many people on the team. I've seen your game and I love love love the art  Kiss Looking sooo awesome!

@Polyflare, wow, okay, that was informative! I had no idea... Thanks so much! I'll try and see if I can implement a similar solution Smiley Toast Right

In work news, placing sound triggers placing sound triggers placing sound triggers. This is my job now, I guess. But you know what, I'm actually going to power through and place them all tonight! There, I promised I'd do it on the internet, so no turning back now!





   JLJac on April 15, 2015, 09:46:08 AM:

Update 417
After placing a million sound triggers, I'm taking another(final?) dive in the level editor. This time to allow for the placement of decals - pieces of custom terrain coloration.

Rain world has been a rather monochrome place, and it will continue to be so. However, we want to be able to spice up the occasional room with some color. This editor allows you to place art that is rendered into the environment as two dimensional color on the surfaces of the objects in the world.



Note - not a scene from the game, just me trying out the coloration tech.

Still a few things to figure out. For example, the slight oily effect at slanted surfaces seems to have disappeared, I'll have to find where it went. Another challenge is to make the system backwards compatible. I want the shader to be able to process a level from the pre-decal era and just not render any decals, rather than being messed up somehow. If it can't do that, we'd have to re-render all the 200 or so rooms we currently have, which would be a bad spot. Seems like I'll be able to avoid that though  Hand Thumbs Up Right





   JLJac on April 15, 2015, 12:07:55 PM:

It is possible to batch render, but it still takes an awful amount of time. All the rooms would probably require both of our computers working hard for a day or so, during which we'd be limited in the work we could do. But yeah, totally possible! Just to be avoided if possible. Also James has an aversion for the batch renderer because he suspects it doesn't spit out the room pixel-perfectly the same, but this time around I'll do some empirical science on that and if it's actually the case I'll correct it!





   JLJac on April 16, 2015, 06:57:56 AM:

@marcgfx, yeah def, but the editor runs in macromedia director, written in lingo, which is sort of terrible, and it's just a jumbled mess of horrible UI and old remnants of stuff that's no longer used. We have officially given up hope on it looooong ago, and we don't think it's worth it to spend any time on it. We're just going to use it to make levels for this game, and then say good-bye to it forever - think of it as an old car that you hope will have just enough life left in it to be able to drive all the way to the scrapyard  Cheesy So yeah but no, I won't spend time slimming the level editor, I'll just make it do what we need it to do and then learn my lesson for the next project.

@Crispy75, each screen texture is a png of about 0.5mb, and the level geometry (once the AI data is baked in) is about the same, so a screen is ~ 1 meg. James hopes to have 700 of those by the end of it o_0 The disk space of the code is negligible, but the music+sfx will likely occupy some space as well.

Question
Does anyone have any experience with loading sounds dynamically in Unity? I set up this huge system for James to be able to import and work with sounds from a folder, only for us to realize that the reason it had been working on my computer was because I was running the unity editor in the background, which added metadata to the sounds as I put them in the resources folder. James is running the stand-alone, which doesn't merge the files into the unity project, and as an effect the loading of the sound files doesn't work Sad

I've been looking at solutions for dynamic loading of sounds in Unity, with no results so far. Theoretically I think I should be able to use a WWW similarly to how I load the levels, and that seems to work to a degree - I get AudioClips out of it instead of null references or something, and there are no error messages, but the AudioClips don't play. Or they play, but they're empty. Their isReadyToPlay property is perpetually false. Anyone has ideas?  Beg





   JLJac on April 16, 2015, 09:18:09 AM:

Yay I think I solved it! You need to have a co-routine and yield it until it's done loading... I have to admit I didn't totally understand what was going on, but I found an example on a forum and messed with that until it worked, and then messed some more until it was a piece of my machinery as I wanted it to be. The main problem seemed to be that the solution included a lot of interaction with Unity, creating a game object etc, which is not my strong side. But, we're through I think! Now James can actually start putting in some sweet samples for this thing :D





   JLJac on April 16, 2015, 09:36:15 AM:

Yeah I'm super stoked too! But it might be a couple of days, James says he needs to re-invent the sound world somewhat to fit the new less low-res art style, and that sounds to me like sitting very very many hours with headphones turning knobs very very slightly. And also my blunder with the import stuff which stalled us for an entire day... I have no doubts it's going to be super sweet though!





   JLJac on April 16, 2015, 11:02:56 AM:

Haha yeah I can imagine! That qoute from me sort of exposes how incredibly little I know about sound design though - I just took what I myself do and changed "writing and deleting a single line of code that does very very little difference" for the knobs  Cheesy So, it's sort of an awesome thing that I'm not the one doing the audio lol. Whatever wizardry he's up to - knobs or not - he probably needs a little time though, re-inventing stuff is always a biggie.

Yeah I'm super stoked too! But it might be a couple of days, James says he needs to re-invent the sound world somewhat to fit the new less low-res art style, and that sounds to me like sitting very very many hours with headphones turning knobs very very slightly. And also my blunder with the import stuff which stalled us for an entire day... I have no doubts it's going to be super sweet though!

But it might be a couple of days

Who, Me? You guys really are something else. The speed at which new and important features come through for this project is absolutely amazing.

Hopefully we'll see another Alpha with sound soon-ish as well. Coffee

Oh man now I totally set some sort of time frame for work that James, not I, will do  Who, Me? And I rarely even keep the time frames I set for myself... So haha, all promises withdrawn! Take that with several bath tubs of salt!

Another thing that got kind of lost in the audio trigger frustration is that James recently sent me a put-together version of the Sky Islands region! And it's sweeeeeeet! I haven't played it very much yet, but I've had a couple of good runs and first of all it looks amazing. Weird antennae and relay structures, a lot of vertigo and here and there serene (or would be serene if it wasn't for the lizards) little sky islands. Plus, cicadas moving around, which is frustrating and fun. Lots of cicada jumping! I have a few memorable moments already, such as entering a cicada hive that's currently raided by two vultures, and standing at the bottom of a pit with a green lizard getting closer and closer, desperately waiting for my captive cicada to stop being exhausted so I can jump out of there. I got out a split second before the green lizard got me! Really nice to see how the mechanics interact to create interesting situations.





   JLJac on April 16, 2015, 01:18:05 PM:

Usually with a very lukewarm degree of passion - I actually don't think they'd come down from their sky patrol if it wasn't that they saw me in the general area. Cicadas are really small and notoriously difficult to catch, so I gave the vultures a pretty low interest modifier for that relationship.





   jamesprimate on April 16, 2015, 06:56:56 PM:

AUDIO STUFFF: THE RETURN. Day 1



YES, all the things that Joar said. I admit to being a little apprehensive about it, as conceptual changes will inevitably scrap a bit of the past couple of years of audio work. But it is necessary! The game has evolved significantly in the past year, and the audio needs to evolve with it.

Audio rant below, pls feel free to skip

One thing thats central to any self-respecting professional audio fascist is aesthetic consistency. For the lingo build, I had a pretty tight concept built around the idea of Rain World as more of a quick, "retro pixel platformer" (remember when people did that?), and so limited the tools used for the audio and SFX to what hardware would have been used for 16bit games. At this point "chiptune" is more of a buzzword and implies a genre more than anything else, so i'll avoid that and just say that the tools were simple chip-based additive/subtractive synthesis, 2 operator FM, basic wavetable / formant synthesis, and some basic sample / PCM stuff. Nothing that you wouldn't find in a classic SNES/Neo Geo/Sega CD game.

But that was 2 years ago! The game is now modern and sexy with shaders and dynamic lighting and who knows maybe particle effects, so limiting the audio toolkit to 90s tech just doesn't fit any more, and would be totally arbitrary. I had been anticipating this a bit the past few months and have been experimenting, filling out the sound profile with both hi-fi synthesis elements and manipulating junk audio sources (you might recall that track i posted built from a conversation Joar and I had at PAX), trying to extend the palette in both directions. Might still have to cut a bunch of that old stuff tho!

Now, the junk audio thing is funny, because the reason I started messing with that in the context of rain world was because of the SFX samples that Joar was using before I joined the project. As he tells it to me, he just made them with his laptop mic, recording moving papers around and slapping rulers to the table. The resulting sounds are a lot of messy distorted stuff, indistinct white noise elements and compression artifacts. AKA perfect for Rain World! I wouldn't want to use them raw, but if balanced, eq'd right, run through some nice filters and placed in the proper context, it sounds pretty cool. So I've moved to incorporating use of manipulated junk audio throughout the overall audio concept, and am pretty stoked with the results. Imagine you are being hunted through the deep darkness by some huge creature while something like this is playing in the background: https://clyp.it/jjn25egr Not all the music will be like this of course, but in the right context it creates a pretty amazing mood imho.

I dont think Joar was totally on board with this use of his samples initially, but audio is a really interesting medium. if you know what you are doing, you can basically make anything out of anything else. For instance, here is what a korg product rep can do with 1 sample on a cheap hardware sampler in 6 minutes:



So basically this entire post so far is me justifying that, yes, I, a "professional sound designer", will be using Joar's laptop mic recorded crumpled paper and ruler thwack sounds as audio source material, and its for the sake of aesthetic consistency, LOL

/AudioRant, it is now safe to continue reading

So on to implementation! Past day or so was spent familiarizing myself with Joar's audio language and establishing a new workflow. Like the rest of my life right now, it is a horrific mess of text files:



But as hellish as it looks, I am super happy with the results so far! My gameplan was to first do an updated version of the Lingo SFX implementation for some practice with the language and to get something to work from. I had expected that to take at least until the weekend, but managed to get a basic sound-set that already sounds significantly better than that in just the afternoon! Super encouraging results.

Anyway, I hope that wasn't TOO boring. The actual audio work itself is literally days of me moving knobs around, so that would be even worse to read! I'll post some video of this rough audio build tomorrow when I have all the bat sfx triggers sorted out, and post updates on how that evolves through to a more final version.





   jamesprimate on April 16, 2015, 09:11:23 PM:

ty ty!

I agree with literally everything you said. Working with the junk audio stuff in this way definitely opens the door to incorporating field recording style soundscapes, and the way we are planning on doing the room->region->world environmental audio structure is already sort of set up for it. Would be a shame not to!

I probably wont do the actual wandering around with a mic bit, as i have become a vampire and sunlight would certainly burn my skin at this point, but i do have some field recording enthusiast acquaintances who's libraries i plan on thoroughly raiding  Toast Right

And like you, I am highly suspicious of independent audio people who use DAWs like pro tools. reaper is leaps and bounds better than programs 20x its price





   jamesprimate on April 18, 2015, 01:01:16 AM:

ahh thanks so much for the kind words! im really heartened that example wasn't considered "too out there", as that was a definite concern. we're both doing this as an art project and exploring some pretty weird techniques, but its equally important to have that not get in the way of communicating the mood of the game to a person experiencing it. like, sure its clever that i did that track from a 3 second junk audio clip, but... it also has to actually "work".

Holy shit that's a million times better than the track posted on the first page. It's really noticeable that you significantly improved your production values with that track.
I didn't want to be vocal about the track you posted on the first page because I knew somewhere that it wasn't final.
This is really good.

Are you going to do something with dynamically adjusting music with the environment?
Might be cool.

Totally 100% agreed. Its been a strange experience, since most of the tracks associated with the game were done years ago on a lark for what I assumed would be just a little free game. Things have progressed considerably since then, but also I have a lot of comments from people / backers who really like the original tunes, so I'd feel guilty completely scrapping them. They don't really fit the narrative aspect of the current game so i dont think i'd want them in the single player, but what I might do is have them as tracks available in multiplayer? Then they would be there for people who like them, but it doesn't derail the atmosphere.

Wondering if it shouldn't be mixed with some very simple, non-intrusive "music"/instrument in the background sometimes as well or it might get tedious after a while.

Yep, totally. This relates to the dynamic audio question as well. The way I have it organized is that there are 3 layers of non-sfx audio, each specific to an individual region: one layer to set the ambiance of a room/sub-region/etc, such as dripping water or machines rumbling softly; another layer that relates dynamically to the weather, so wind, light rain, atmospheric stuff; and the third is tied to narrative elements, game objects or specific moods we want to convey, and that is generally "music" but can also be "music-ish".

the idea is that as you move through the environment, regions, rooms, etc., there is a kind of constantly shifting, blending soundscape around you, and you would rarely (or potentially never) hear the same blend of sounds again. thats the idea at least! all the pieces are there, we just have yet to implement it.

Also, "huge creature"...hmm, just an example or a hint of things to come?

 Wink Wink Wink

Anyway, audio stuff is on pause for a day while poor Joar sorts through some bat audio triggers and wraps up the FINAL editor update (fingers crossed!), so I've been putting together concepts for the next region: Garbage Wastes! Home to my favorite creature: Garbage Worms!!! I've been looking forward to this one for a loooooooong time, so its great to get down to business.





This region was also, if i remember correctly, one of the major reasons for Joar building the prop editor, so I'm starting to play with that a bit in context and DAMN it is going to add so much! There is serious potential for over use of it to ruin or at lest significantly change the already established aesthetic, so I'm starting slow. In the above room for instance, the boxes and some sticking up curved beams are the only prop additions.





   jamesprimate on April 18, 2015, 03:45:43 AM:

holy crap, this looks like the best area yet D:

thx, i have high hopes for it!

Is the water swimmable? My platformer instinct kinda tells me that green = poison, but I remember some other areas with green-ish water where it was safe and where I didn't get this feeling. Maybe you need a different shade of green...

this palette is just temporary as i sketch out a few levels so that will def get fixed, but in general were not going to have any poison or acid pits or lava or anything like that. early on we decided that the creatures and the rain are going to be what kills you (and sometimes fall damage and drowning, ofc), so no spikes or lasers turrets. every trap it will be *possible* to escape. though that said, these specific pools will probably be full of leeches and other nasty stuff





   JLJac on April 18, 2015, 06:26:58 AM:

Deeep in an extensive level editor upgrade, and making new art assets. I'll probably do an update when I'm through. In the mean time, here's some rust textures:






   jamesprimate on April 18, 2015, 06:42:00 AM:

Guys, guys! Lay down your arms. Take the weekend off and go do Ludum Dare to freshen up your minds!

well, since you mention it... Lydia and I are doing a kind of music party this weekend, so we're offering to write tracks for LD games. youre right, its good to mix things up a bit Smiley





   jamesprimate on April 18, 2015, 10:57:57 PM:

but... we dont take breaks for very long Tongue Joar whipped up a properly poisonous looking palette for the Garbage Wastes region:





Were working on a solution to the blockiness of the tile boarder, but otherwise lookin pretty nice Hand Metal Right

He has also, apparently, finished with what we hope to be the final level editor update!  Hand Clap Hand Clap Hand Clap I'm not sure if the editor has been his arch nemesis for this project but its certainly a main antagonist at least, so i hope he went out for a beer or something after closing that window  Toast Right. I'll let him tell you all about the decals and props and draped cables, but suffice to say, it its going to add a ton of polish visually and should take us through to the end.

It's an insanely huge addition to my level toolkit because previously any visual concepts I wanted to have in a room, "the look", had to be completely done within the 3 layers of playable geometry, and MAAAAAAAn is that limiting! Now I can say "hey I want a fan tile here" and not have to make it work with the physical/spatial orientation of the room. Also, whereas the physical tiles can only be placed in 3 layers of groupings (0-10, 10-20, 20-30), the prop tiles can be placed at any depth from 0-30, meaning I have much more control of the perception of depth, which will make for a more nuanced look and expanded Three-dimensionality.

Anyway enough blurb, Imma get to it!





   JLJac on April 19, 2015, 12:52:47 AM:

Yeah not quiiiite done, I need to add yet another type of prop, which will be used for more organic shapes. But we're totally getting there! Then I'm making a few art assets when I'm at it (new garbage tiles!) and after that working on the level editor can hopefully be put behind us. Except I'll have to return now and then to add assets. Haha. Anyway, it's Sunday so I'm taking a little time off, see ya soon!





   jamesprimate on April 19, 2015, 07:04:00 AM:

One question: the plan is that this'll be one seamless interconnected world, right? Will there be rooms that transition between regions? For example, moving from Heavy Industrial to Garbage Wastes, leaving the dilapidated structures behind and gradually seeing more garbage and then reaching the rolling hills of the Wastes

I find myself wondering about how you are planning palette transitions as well? Seems like it could be a bit jarring to move from one radically different palette to another over the space of a single room.

ah yeah, this may be a bit of a design challenge. we have ideas for it, but will have to see how it goes in context. unfortunately, it seems like the completely open world is going to be unfeasible, especially since we are preparing for multiple platforms and generally would like average humans without supercomputers to be playing it. our proposed solution is to have a kind of transitional series of "gate" rooms between each region, huge dramatic doors and locking mechanisms, which might also house a shelter/save point. this allows for switching over the loaded region, as well as offer a neutral / dark palette to make the palette change less abrupt. we shall see!

Not to be THAT guy but...

...When do we get another alpha build?

Probably not for a little while, as we have some big deadlines coming up that we have to focus on. Sorry! Next one will likely show multiplayer though, which Im super looking forward to seeing in action.

wow looks next gen now Shocked

ahhhh thanks! tears of joy  Tears of Joy next gen graphics... spit out from the lingo level editor and bloom lighting effect that was in the old version Shrug Really Nice to finally see it getting the polish we've been looking forward to though! I think there is quite a bit more than can be done too.





   JLJac on April 19, 2015, 12:47:33 PM:

Just want to clarify on that a bit - we do plan to have an open world as in the player being able to go anywhere at any time they want, but we've been reconsidering an idea we played with early on that the entire world would be loaded at the same time. We just didn't realize how large the world was going to be back then o_0 We've been thinking of the gates as a sort of airlock between regions so they can load and unload. Don't worry, I don't expect there to be any loading times to speak of (reading the world text files is usually quicker than a second) but the gates will be there as a room that exists in both region and acts as a transitional area, so that one region can be dropped from RAM and the next one fired up.

As for palette changes, we do have a few places where we know we're going to do a gradual transition (which will eventually culminate in one of those gates, for technical reasons) but for other areas I think it could be kind of cool to have abrupt transitions as well. You go through the gate room, anticipation builds up, and when you pop out on the other side BAM! Everything has changed, an exciting new region to explore. So from how things look now I think we might do a bit of both  Hand Thumbs Up Right





   JLJac on April 20, 2015, 11:56:40 PM:

The game is divided into two modes, "realized space" and "abstract space". Realized space is what you see, abstract space is a sort of gross simplification of the game, reduced to basically board game rules, where each room is divided into a few "nodes" that simple representations of creatures occupy and interact in.

Abstract space exists to make the world feel alive. Because of the processes in abstract space, you don't need to move to creatures to "unfreeze" them, they move around in the world according to their own whims and needs, and you might encounter them at any place. Also it keeps track of stuff to make the world feel consistent - stuff such as what creatures are where, what damage state they're in, etc etc. Basically it is intended to create the experience that the entire world is up and running at the same time.

At one point I thought that the entire world was going to be about 100 rooms, and then I entertained the idea of having abstract space loaded for the entire world at once. Now that James has gotten started on the regions though, it turns out that a single region is more or less the size we anticipated the entire world to be. We did a test where we tried to put 4 regions together into one super-region and run it all in abstract space. It worked, but with really bad performance - and we have at least 12 regions planned.

So that's why I'm thinking of loading and unloading the regions from abstract space. I like the abstract space stuff, but mostly because of principle - it's sort of a simulationist element to the game. Performance, ie the game being able to actually run, is more important. Still I'm not too bummed about it, because if a 60 room region is up and running that is about the scope of simultaneously simulated space that I originally set out to do! The reason why I'm doing the abstract space system is because I want you to be able to follow a creature and see it go about its day, or have a creature follow you. The principal thrill of knowing that a lizard 230 rooms away is actually being simulated is less important than the actual game experience.

This said, if I go with the loading/unloading solution I'll still have to simulate some sort of creature movement in the unloaded areas as well... Because when you enter a region, it won't do that all creatures are just popping out of their dens even if you're halfway through a rain cycle. So for that reason, when you go through an area gate the region that is loaded will probably go through some sort of sped-up, simplified version of the standard abstract space simulation, to place creatures in believable positions throughout the region. The same process could be run on all regions during hibernation, so that populations will affect each other etc.

Don't worry about this stuff not being actually simultaneous as the realized rooms, ordinary abstract space isn't either  Wink For this stuff I basically just save what time it was when the abstract entity was last updated, and on the next update weigh that into the simulation.

This means that effectively, the game will be divided into three modes rather than two. "Realized space simulation" - the stuff you see on screen, "Abstract space simulation" - the rest of the region you're in, and "Super abstract space simulation", the other regions. This basically means that the game is simulated at different resolutions, and the resolution gets higher close to the player - but the game is still to some degree running everywhere else as well.

So the individual creatures of the world (which will likely be in the thousands) will all consistently exist, they'll do stuff, and you'll be able to find them again (unless they got eaten) but the further away from you they are the more crude the simulation of whatever they're doing will be. Loading and unloading regions is mostly a technical issue, the implications for your actual gameplay experience is likely not going to be large. With the exception that you'll have to go through gates in order to move between regions - but the gates was part of the design even before because we want them to cover up the palette changes, so that's not really a change per se.

As for fleeing out of a region to avoid a creature, that's not really a viable option because the gate rooms have gates, and you don't want to spend 20 seconds in a tight airlock with a vulture! Also, creatures that are with you in the airlock should be moved to the next region, we need that for other reasons as well (ie pups). On top of that, the regions are large, so it's probably only in about 5% of the time you're actually close enough to a region gate for it to be an option. And if you still somehow manage to pull a move like that the gain is not much larger than a standard situation where you manage to go to a new room within the region and have a predator lose you - in common rain world fashion it's most likely to be out of the frying pan into the fire, with some other beastie waiting for you in the new room you arrive in.





   jamesprimate on April 22, 2015, 02:05:21 AM:

personally, from where it is now id prefer not to have an in-game map, as from my perspective learning the terrain is a good part of the experience. the game as we conceive of it isnt really about "getting places" so much as it is wallowing around in the world.

the way the world map is laid out, there isnt really emphasis on dead ends: every path generally leads somewhere, though the challenges and experiences in each route differ. you're always getting *somewhere*. this goes the same for region to region connections as it does room to room connections. since there isnt really "keys" outside of things you might generally find in a region, or much in the way of item objectives per se, multiple routes to every destination, and the creature migrations that give you a sense of general direction (as gimmy mentioned), i dont think a map is especially *necessary* unless as a player concession. but we'll see how it goes! so far there hasnt been any mention from anyone while playtesting it, though we have yet to connect the whole world and that might shake things up quite a bit.

oh another thing to mention is that the rooms arent laid out in a 2d x/y fashion. in fact, *soft spoiler alert*: we are planning some regions where the connections and orientations are VERY not 2D, if you catch my drift. So a room-specific map probably wouldnt even be possible. but if necessary, i could see some sort of vague region map working to preserve the mystery and also not driving players mad.

anyway, like so many things, thats a ways away. Joar just hit me up with a COLOSSAL editor update, so i am digging through that and happily playing with piles of refuse and junk in the garbage wastes!


detail: https://i.imgur.com/63SIfMW.png

how does s/he stay so clean in all that gunk??





   jamesprimate on April 22, 2015, 07:44:20 AM:

how does s/he stay so clean in all that gunk??

No problem with Slugcat WHITE™!



ROFL

@Woodledude: thx thx! part of it is the look of the region and another part is all the cool new stuff that can be done with the updated editor toolkit. once we get all the regions put together, im going to touch up the old rooms (only 230 of em, no big deal Cry ) and make sure everything blends/transitions nicely





   jamesprimate on April 23, 2015, 12:24:16 AM (Last Edit: April 23, 2015, 12:38:46 AM):

WHOA! Thats pretty crazy to have such a large spread for an alpha demo D: Obv we'd prefer people to see the finished product. But hey, Im just glad they didnt shred it!

@Princessa: they picked us up right after the kickstarter, so a little over a year now? but they are super chill and letting us do our thing, so im not surprised some ppl didnt notice!





   jamesprimate on April 23, 2015, 06:59:49 AM:

yep, totally! we've been using this symbol here for shelters and it seems to work pretty well: https://i.imgur.com/nfNl8bW.png

there was a suggestion that it just look like a regular shortcut until you discover the shelter inside, but eh seems fussy. if we want to do something like that we can just put a small room in between so it still takes a little more effort to discover from a main room or something.





   jamesprimate on April 23, 2015, 07:30:56 AM:

ah yeah those are just the paths that connect to the other regions. not connected yet because we havent implemented the region swapping or gates. so many things to do  Cry





   JLJac on April 23, 2015, 08:49:17 AM:

Oh that's really cool! :D I'm definitely on board with "Acid Anime"

Just wanted to say I'm sorry about the lack of updates - I've been doing level editor level editor level editor for almost a week. The next big thing is to start to stitch the regions together, but before moving from one huge technical project to the next I think I need to take a break and maybe implement a creature, so there should be a bit more updates for a while now  Hand Thumbs Up Right

On the subject of maps - we don't really know! After the world has been put together we will be able to start playing the game *as it's meant to to be played* for the first time, and then the question on whether or not a map is needed will most likely be given a clear and definite answer.

James makes the worlds, and thus probably have a very different experience playing them from anyone else. I however can give some testimony of what it's like when I first get a region and get to play it in its current state, without a map.

The first thing you notice is that the regions are large and complex. But generally you don't get a proper perspective of how large and complex right off the bat. Because of some psychological mechanism I tend to take the same routes and gravitate towards the same areas, and it takes many playthroughs before I start discovering the peripheral rooms. On this last region I spent my first hour or so believing that I was exploring the region, just to a bit later find an unexplored passage and realize that I had in fact only been exploring a small more accessible fraction - the bulk of the region I still hadn't seen.

When it comes to finding your way and creating an internal map, it's both easier and harder than perhaps expected. I definitely don't have a clear memory of what the entire regions look like and what connects where, and because of the disconnected nature of the rooms it seems really hard to build a map like that in your mind. It's all pretty jumbled up in my head. However, some of the more routinely traversed routes get etched in. If you have a somewhere you know you want to go and you've gone that route before, it's this weird thing where you couldn't draw a map of all the rooms to get there, but as you enter each room you sort of instinctively know what exit to take next. How that scales into seven hundred freaking rooms is up for question though.

It would certainly be more true to the atmosphere to not have a map, that's for sure. But, playability trumps. Another version of a map that could perhaps work while keeping a bit of the mystery is something that's basically just a bread crumb trail - it marks the exits you came from so you can at least reliably find your way back. If you backtrack a few rooms the trail would be erased, and when you go into some side corridor the trail would branch in that direction instead. Just an idea! This particular implementation would probably be pretty redundant though, as I think most peoples' brains have a really good memory for "that's where I originally came from" when viewing a room.

A variation on the same theme would be an actual path finder that shows the way to either the shelter you emerged from or the closest shelter. That would however introduce the player to new routes and shortcuts that they might not have discovered by themselves, which feels a little cheap.





   jamesprimate on April 23, 2015, 11:45:19 AM:

What I mean is that instead of giving The player artificial bread crumbs, maybe you could give him natural, almost literal ones? Something he could change or add to the world that would give him directions and persist between cycles.

Edit: Also, for easier navigation I suggest giving a bit of a gradient to each region, instead of a single color. So the garbage region could have green-ish, gray-ish and brown-ish zones - without clear borders, but with background color serving as an approximation of your position.

these are both goooooood ideas. spears already CAN function as markers that persist between cycles, so perhaps something that makes a spear more visible as a marker. we can do the second one super easy just with the color effects layer as we have it already.  Hand Thumbs Up Right Hand Thumbs Up Right





   jamesprimate on April 23, 2015, 10:33:16 PM:

So I found real life rain world water:

https://gfycat.com/UnderstatedWateryFreshwatereel



WOW thats spot on... and disgusting  Huh?





   JLJac on April 24, 2015, 08:35:38 AM:

Ewwwww >___<

Update 417

New creature on the way! This is a backer suggestion as well - the lantern mouse. The lantern mouse is a creature smaller than you that is mouse-like and glows. It lives in the dark regions, and hang from the ceilings trying to attract flies with its glow. They work as a light source in the dark regions, and if you're skillful you can catch one and carry it with you in the same somewhat awkward manner you can carry a cicada or a snail.

I've already got some path finding and general behavior up and running, yay modular AI!



Sooo, hanging from the ceiling... At first I thought I was going to be able to skip all the rope physics stuff, and just have it lose it's thread(tail? Spider web? Well, the dangly thing) if the thread hit terrain. However, it turned out that the rope hits terrain ALL the time, especially as these fellas are not wall climbers and therefor actually have to secure their ropes somewhere close to terrain. So, rope physics it is.

I'm not doing anything super fancy, just want something like the ninja rope in worms - basically whenever it hits a corner that corner becomes the new attachment coordinate until the previous attachment coordinate is visible again. Slowly but surely I'm getting there, through horrible hacks:



As you can see I'm about halfway there - the sentiment is right, but at this point it can only keep track of one corner, when it hits a new corner it promptly forgets about the previous ones. I don't think this will be too difficult though, I'll just keep a list of the corners and de-activate them as they come into sight again. But let's see!

Really happy to be back to game-making again  Smiley Hand Thumbs Up Right





   JLJac on April 24, 2015, 11:33:17 AM:

@Christian, thanks! Size-wise it makes a lot of sense for lizards to be hunting them, so yeah I think so. The sketch was more me drawing a bunch of creatures on the same page and failing to crop the lizard out tho  Wink

@Prinsessa, yeah, they're a bit spidery now that you mention it! Everything I make becomes creepy... These will be more cute than creepy though, this particular backer is a friend and it has been made clear that the cuteness is not to be compromised!

@Crispy75, Actually they can't climb walls, they have to have a corridor leading up there, or they can hang from a ledge. Those corridors up top in the gif are connected to a chute that leads to the ground, where they scurry up. They should also theoretically be able to suspend from horizontal poles, but I haven't tried that yet.

@oldblood, thanks thanks! I'm really happy myself about how well the backer creatures are fitting in, it would be dishonest to not say I was worried as the suggestions came from a pretty motley bunch of angles and takes on what the game was about. I did sweat a bit over the backer creatures, but by now I've actually turned around 180 and view them as an asset rather than an obligation. Working with other peoples' ideas has turned out to be a really cool boost to the creativity, and I definitely think the cast will be more diverse for it. Also, all of them so far has really been working out really well aesthetically and thematically.

Other news: Yay, simple rope physics working-ish! The simulation is really crude and can only really deal with pretty calm movements or the rope will start sticking to corners everywhere, but it works for mellow dangling from the ceiling. I capped it at 2 bends, when the rope is bent the third time it snaps, as another anti-tangling measure. If I decided to go there, this could easily be a very similar hell to the tentacle stuff, and I'm sooo done with that, so I think I'm gonna call it a day. My main goal was to make them able to swing a little back and forth, because I want to show off the dynamic shadows.

Behavior-wise these critters are pretty simple, they just have an idle (dangling) and a fleeing behavior which is more or less  straight imported from the ThreatTracker module. They don't need a specific hunt behavior as the idle doubles as this - they'll wait passively for a bat to be lured astray among the pretty lights. What needs to be done is that they should be way less concerned about predators that are below them while they're suspended, as it wouldn't really make sense for them to spot something coming along the floor and then panic and drop down there - playing it cool and hanging out is smarter. If a predator is above them however, they should probably be more concerned.





   jamesprimate on April 24, 2015, 05:55:54 PM:

Oh we've got planz for them  Hand Point Left Well, hello there! Hand Point Left





   jamesprimate on April 25, 2015, 12:49:43 AM:

Thank you! Though I think I can speak for the both of us on this topic and say that the relief of finally getting this out is the only thing on our minds  Tired





   jamesprimate on April 25, 2015, 11:43:25 AM:

CUUUUUTE  Kiss

screenshot saturday or whatever. still playing in garbage:


detail: https://i.imgur.com/iQziA42.png





   JLJac on April 25, 2015, 12:08:39 PM:

Thanks!

And yeah, what James says, actually releasing and selling the game feels like in a long long time in a galaxy far far away - for now the story is on a more personal plane about finishing what you set out to do!

@marcgfx, stuff isn't really bats and mice etc, they're not even named those things in the game - we just need to have some descriptor for them to refer to them in the devlog! So, the internal relationships between the critters don't have much to do with those of the real-life creatures they lend their names from.

All these mice are super cute! Nice to see some cute in this thread, there's been plenty dark grim and creepy to go around haha.

James yeessss you just keep cranking out the pretty with this region! Really digging that black fungus tree! Grin





   JLJac on April 25, 2015, 01:01:25 PM:

Valid concern! I'm the one to write the code that outputs these, and I've drawn the palette, so I'm really not one to speak, but to me it's decently obvious what is the first - interactive - layer. The dark stuff that connects to the room borders is solid, the light grey stuff is background. Perhaps seeing it in motion helps a little bit as well, as the clouds sort of give away what's deeper into the image, but that might be wishful thinking. However I'm pretty sure that the interactivity of the game helps out a lot - if you're a bit unsure about whether something is interactive terrain you can try, and because the rooms are composed of assets you'll recognize and know that asset the next time. This should obviously not be the main way of differentiation, you should be able to do it at a glance, but it's a fallback.

The simpler and cleaner the geometries and tiles, the easier I imagine the terrain is to read. And that's certainly a concern in the messy garbage wastes. However I think James has been doing a good job with dumming the geometries down a bit for this region. Most regions have some pretty intricate maze stuff going on, here it's mostly just flat floors or large distinctive hills with the occasional garbage-sickle sticking up, and after interacting with one of those once I had a pretty solid idea how they work. But then again, this is a dev talking... The contrast though, which is the main way of communicating this, is changeable in the palette, and that's really easy. So if it's a problem I'm sure we'll be able to adjust it!





   jamesprimate on April 26, 2015, 03:49:48 AM:

@rainworldisawesome and tortiseandcrow: yesss thanks for the support! these 2 posts pretty much exactly sum up my feelings on the subject  Hand Metal Right

So I had mentioned the devlog in another forum earlier today and that got mw browsing the earlier pages again. It's incredible how far the game has come and how consistent the game has stayed over the past three years. Like you had Canopy rooms already all the way back in 2012



ill take this as a huge compliment! the reason for this is that pretty much all of the regions/rooms/etc were either directly inspired by or extrapolated from Joar's levels in the first alpha. He would do a room or two with a distinct look and gameplay mechanic (say the sky islands/chimney canopy look there, with the "small platforms separated by pipes and fall death" mechanic)  then move on to something else 2 rooms later. I took the most compelling ones of those little micro-regions and fleshed them out, picking apart all the ways that specific combination of game elements could be exploited, then built the larger "region" narrative to support that and give it some context.

For instance that room you posted above from the alpha exists in the current Sky Islands region. I saw that room as the top-most part of a large antennae structure, so its modified a little to fit that concept:


but then got to flesh out all the cool inbetween stuff to get to that point:


The larger scale world-building was essentially the same thing, taking these already strong looks / mechanics and hashing out what each implied about the greater world: "if this sky islands region is up in the air, whats below it? whats to the right? what is holding it up? why is it there?" etc., and then working to put it into some sort of cohesive whole. The ideal being a world map that explores all these various mechanics and does so in an exciting, comprehensible fashion.

So far so good! The only problem is knowing exactly when to quit the extrapolation engine and say "yep this is enough!" Tongue





   JLJac on April 27, 2015, 12:27:06 AM:

Incidentally, I just finished reading an section in a book that discusses the way maps work from an ethnographic perspective. When you're a local, the landscape is this mesh of lived experience, emotional memories, that sort of thing. A map abstracts from that lived experience to provide you with a view from elsewhere, both literally (maps are projections of the landscape from above) and culturally (locals don't need maps). Experientially and culturally speaking, a map is a tool to allow you to access an unfamiliar space without having to become familiar with it. If you do become familiar with a space via a map, your experience is mediated by the map's abstraction. The map comes to define (and thus distort, because abstraction is by definition a selective representation) the territory it describes, rather than letting the territory directly inform your experience.

So there you go. Be a local! Ethnographic theory has your back.

A really interesting read! Agreed on all points!

Hey Joar, would you be willing to describe some of the physics involved in stuff like the tails and dangling parts of vultures and such, I haven't learned enough math yet to get to things rotating around points with gravity or anything like that, but I'm starting to want to try some stuff in my games, and google is being unhelpful. Found the simple pendulum formula, which I can at least read, if not fully understand how it works, but I'm not sure what you use. (you probably use that for the ropes at least, if so, could you explain it to me as you would a baby? I'd appreciate that;))

If you're busy that's totally understandable,
Nico

The magic trick used for everything creature physics related in this game comes down to a couple of lines of code. Let's take a look:

Code:
public class Chunk{
   public Vector2 pos;
   public Vector2 vel;

   public Chunk(Vector2 initPos){
      pos = initPos;
      vel = new Vector2(0f, 0f);
   }

   //Called every frame
   public void Update(){
      pos += vel;//Apply velocity to position
      vel *= 0.98f;//Air friction
      vel.y -= 0.8f;//Gravity, with Unity's (non?)inverted y-axis. If you're using something else, flip it.
      if (pos.y < 20f){// Putting a simple floor in the simulation space so the chunks don't fall off screen when you try it ;)
         pos.y = 20f;
         vel.y = 0f;
      }
   }

}

This here is a class representing some physical object, or rather part of a physical object. I'll call it a Chunk. As you have a game with stuff that's moving around on the screen and is affected by gravity, I take it you know what's going on in this code  Hand Thumbs Up Right

Now, the magic trick! First a simplified example:

Code:
public void ConnectChunks(Chunk A, Chunk B){
   float wantedDist = 10f;
   float currentDist = Vector2.Distance(A.pos, B.pos);

   Vector2 dir = (B.pos - A.pos).normalized;

   A.pos -= (wantedDist - currentDist) * dir * 0.5f;
   A.vel -= (wantedDist - currentDist) * dir * 0.5f;
   B.pos += (wantedDist - currentDist) * dir * 0.5f;
   B.vel += (wantedDist - currentDist) * dir * 0.5f;
}

Explanaition - we want the chunks to be 10 units apart. If they are further away from each other, we pull them together by the distance needed. If they're closer, we push them away from each other.

(Small side note, I think the "(B.pos - A.pos).normalized" is correct, but it could be the other way around, haha! Try both and see what works, if you get stuff twitching out and disappearing from the screen, you have it in the wrong order.)

Ok, so let's step it up a notch. Notice that *0.5f? That means both chunks are affected equally. If we affect A more than B by the movement, it will appear as if B is heavier. Say that you add a mass parameter to the chunk class, you can do this:

Code:
public void ConnectChunks(Chunk A, Chunk B){
   float wantedDist = 10f;
   float currentDist = Vector2.Distance(A.pos, B.pos);
   float elasticity = 0.8f;
   float massFac = A.mass/(A.mass+B.mass);

   Vector2 dir = (B.pos - A.pos).normalized;

   A.pos -= (wantedDist - currentDist) * dir * (1f - massFac) * elasticity;
   A.vel -= (wantedDist - currentDist) * dir * (1f - massFac) * elasticity;
   B.pos += (wantedDist - currentDist) * dir * massFac * elasticity;
   B.vel += (wantedDist - currentDist) * dir * massFac * elasticity;
}

If A weights 1000 units, and B weights 2 units, we get a massFac of 1000 / (1000 + 2) = 0.998. If you look at the code, you'll see that this means that A will be moved pretty much not at all, and B will do almost the entire movement. This is why it takes 700 leeches to drown a vulture in rain world  Cheesy

Oh and I threw elasticity in there as well, but that's pretty straightforward.

I give zero guarantee that this is anywhere in the same galaxy cluster as approximating real physics, but it does what I want. I've heard that this technique is called "atomic bond physics" (in Swedish, don't know about English) and that makes a lot of sense, but I haven't seen it utilized much elsewhere, which is a shame seeing how it's so simple and effective.

Of course you can make it so that one of the Chunks is not affected at all, while the other do all the moving. Actually this is a good place to start - have one chunk, and lock the other connection to the mouse position, and you get a little swingy thingy to play with. In my game the creatures have a set of body chunks that affect each other, and then they have a cosmetic layer on top of that which is just connected to these, but can't pull at them - effectually a massFac of 1.0f. This means that when the creature is offscreen I can just drop the cosmetic layer (or "skin" as I've come to call it) and the actual game object will still behave the same.

A tail or tentacle in RW is a bunch of these that are connected to each other in succession.

This stuff locks two chunks to each other. If you want to turn it into a (wonky) collision physics engine, you just need to add "if (currentDist < wantedDist)" and the chunks won't pull at each other, only push at each other if they're actually overlapping.

Everything in my game is just variations and elaborations on this theme! Though honestly not very big elaborations, the majority of it is just straight up this here code. Good luck  Smiley Hand Thumbs Up Right





   JLJac on April 27, 2015, 11:16:20 AM:

Haha yes, consider it announced.

So theoretically, could you modify this kind of physics simulation to hold two objects at a certain distance and position relative to each other, then change said position to move them relative to each other? I'm mostly just curious because I once had an idea that I wanted something like that for.
Actually not even that, just a distance. To boil the entire thing one to one sentence "two points are locked at a distance" ~ that's all  Shrug

Update 418
Started skinning this little fella! Always the most fun part of my work, as the colored squares suddenly take on personality. Hope to have something to show you tomorrow!






   JLJac on April 27, 2015, 10:08:58 PM:

@RainWorldIsAwesome, yes, most certainly!

@NicoM, yep a creature grabbing another creature is just a temporary connection between chunks!

@NicoM and compostface, go right ahead, the world is big enough for both of us Smiley Also, I actually don't think our games are that similar, you guys certainly have your own style. Rain World basically started out as an attempt to rip off Lyle in Cube Sector, but took its own turns. If you have some sort of artistic urge you can't really truly rip something off, you'll always make it your own and that makes ripping off a really good starting point! Another big inspiration for me is Tsutomu Nihei's stuff, such as BLAME and Biomega, you should definitely check that out if you haven't - I think it might actually be even more relevant to you guys' project than it has ended up being to this one. This is the best part of the internet, inspiration and ideas flowing all over the place!





   JLJac on April 28, 2015, 01:13:31 PM:

Update 419

A first look at the lantern mice!

Entering lantern mode:



Startled:



Full panic scurrying!






   jamesprimate on April 28, 2015, 01:18:30 PM:

OMFG





   JLJac on April 28, 2015, 10:22:14 PM:

Thanks you! I'm glad you like them! Grin

Yeah it's probably some sort of strand more akin to spider web than it's their actual tail that's so long and elastic, but what do we know haha. On the question why they don't pull themselves up, that's a really good one, lol! I should probably implement that  Droop That said, they are technically able to pull themselves up, but very slowly, so they'd probably still resort to the drop if you get too close.

The tiny gnat-like insects are tiny gnat-like insects - they probably shouldn't be hanging out in the dark biomes, but here they are because I haven't written any biome code yet and just applied a dark palette to my trusty old test room.





   JLJac on April 29, 2015, 10:03:03 AM:

Yeah, all home brewn shader code! I can post the code if anyone is interested, but it's fairly contextual to the RW solutions so I don't know if it is applicable elsewhere.

Update 420
More mouse stuff!

Did a little touching up of the charging animation - I wasn't happy that the entire mouse turned monochrome for a moment, so instead I now have the eyes turn white first so there's always some color differences going on.



Carrying a mouse as a light source. Seems to work out well!



Also, mice dying Sad Felt pretty horrible of course, but had to be implemented. A dead mouse will continue glowing for some two minutes, so if you're that kind of person you can hit it with a spear and get a light source that fades away, but on the other hand won't run if you drop it.



Other than that, some more boring technical stuff concerning mice existing in a world contrary to just in a single room. They need to be able to do stuff such as determine if a room doesn't have any dangle positions, and if so move to another room, etc etc.

If stuck in some pit with nowhere to dangle, they'll just sit around wait for better times to roll around:






   JLJac on April 29, 2015, 12:33:00 PM:

Thanks for the kind words! Yeah, we've really gotten into a good synergy now Smiley

I don't really think there's any incentive to kill them, if they're dead they'll slowly lose their light whereas if they're alive they'll glow forever. It's maybe a little easier to hit them with a spear than just trying to catch them, but if there are a few of them they're generally not that hard to catch.





   JLJac on April 30, 2015, 07:44:47 AM:

Thanks everyone and welcome to you first timers Smiley

@fall_ark, actually I imagine them as being unable to simply turn the light off - it does get dim when they're charging, but that's more because they focus their energy inwards somehow rather than actually muting it. Also, if they could turn their light off to mess with you they wouldn't be very useful as a light source, making it sort of impossible to progress through the game haha!

#Facial expressions, thing is that I actually want this thing to be cartoony, I just fail miserably because most creatures are huge gross monstrosities that don't really have a face at all, or have a solid expressionless face such as the Vulture. So whenever I'm doing a creature where I can actually show of some stylized expressions, I'm really stoked. We'll have to see, maybe at the end of the day the inconsistency becomes a bit too much and I'll have to tone it down. But so far I actually like the contrast - it's not an entirely uncommon trope in comics and anime that some characters (that you're supposed to identify more with) have stylized expressions, whereas monsters and other mysterious creatures have less stylized faces that are harder to read ~
    o.0    >.<    x.x    ^.^

Update 421
Starting to think about assets for the new dark region. This one we had to think quite a lot about, because the darkness has some particular qualities. Basically it's two conflicting factors. On one hand, the more little details, the better the shadows look. "Porous" tiles with lots of holes and stuff look good in the second layer, because you get to see the shadows move around in them which really displays the volume.

On the other hand, the darkness makes the level way harder to read. Mostly this is because the darkness breaks up the simple rule the rest of the game follows - dark = close, light = far away. Usually you can look at a room and assume that the dark parts are terrain you'll collide with, and the light parts are backdrop. The light sources in a dark room however are in the room - and in order for that to work visually I had to make it so that stuff in front of the light source were darkened so that they would look back-lit. This means that with the light source we don't just have a dark-light gradient, we have a dark-light-dark gradient.

This works in most cases, but it is admittedly not quite as clear as the ordinary palette. Also, it gets way worse the more little details there are, and the less solid the tiles. Soooo, the same factors that made the light look good.

My idea for a solution to this is that we'll be rolling with big, chunky blocks, but on the blocks there are protruding patterns that the shadows can play with. I think this will get both birds with one stone - because the general contours of the blocks are big and square you quickly get an idea of what's terrain and what's not, but if you look closer inside those big blocks of color there are smaller variations of shadow play.

Here are some sketches:



And here's a "final" (huge quotation marks there, everything always end up hundreds of kilometers away from the "final" sketches) concept:



Basically the area will consist of of big boxes, that are somehow bolted together with huge clamps. These clamps will run on the exterior of the boxes, and leave shadows. Then the boxes themselves will have a patterned surface, that will also get some shadows going. I'm currently mocking up some tiles, let's see how it goes!





   JLJac on May 01, 2015, 01:04:12 AM:

Thanks and welcome!

@tortoiseandcrow, yeah, exacly the stuff I had in mind!

Update 422
A bit of a roller coaster today. I finally had a mockup of a protruding pattern tile, threw it in the game, and it looked... awful!

This gif is pretty huge so I'll here's a gfy instead:
http://gfycat.com/ScarySickBlacklemur

Also it looks awful so it might as well be behind a link XD

Basically what happens is that in the third layer, where shadow displacement is large, the fact that the shader isn't doing proper raytracing becomes evident as light is able to sneak in behind the pattern. This makes it look like the pattern is a free floating grate in front of the wall, rather than some detail on it.

I was kind of bummed at this point, and started thinking about whether I could go with some other solution. I didn't want to mess with the light shader, because the light shader was running at decent performance and looking good in all the other situations, so I felt I could pretty much only do damage.

After a bit of trying different stuff I decided to give the light shader a go after all. First I tried some sort of ray tracing solution, which would've brought the texture grabs up to like, 12 per pass, and looked proper awful. Then I tried another approach - which was basically to invert the highlight code. The shadows travel far and wide, but the highlights just ask a pixel one or two steps closer to the light source from the pixel being processed whether it's at a larger depth, and if so makes a highlight. I turned this upside down and created a "lowlight", basically a thing that asks the neighboring pixel if it should be casting a shadow at the current pixel. This is actually the same principle as the ordinary shadows, but it doesn't really scale with distance and is generally much smaller and subtler. Then I disallowed the ordinary shadows from being cast on surfaces that are close to them so they wouldn't intervene, and got an acceptable result:



This does admittedly introduce another texture grab in the shader, bringing it up to 4 or 5, but the shader still seems to be able to handle 50-100 light sources which I hope and believe is more than we'll need. Now back to art again!





   JLJac on May 01, 2015, 04:32:49 AM:

Yeah the grating effect is cool, and we're gonna use that as well - but I also wanted the standard bumpmap look. Slowly getting there, I think - here's a comparison of two coloration models I've been trying:

http://gfycat.com/WebbedDentalErne

The lantern mouse behavior is because the fleeing AI is really, really, really bad. I cry tears of shame every time I think of it. I just can't figure out how to make a fleeing behavior using A* path finding -_- I'll definitely have to get back in there some time haha.





   jamesprimate on May 01, 2015, 08:14:21 AM:

ha! i think that specific comparison was more geared toward me, who has a strong opinion of the differences of course. (left is vastly preferred for my purposes)

Since Joar is working on Shadow Urban tile stuff, and ive wrapped up what I can do with Garbage Wastes for the time being, im back at hacking away at the audio. (despite my upstairs neighbor noisily renovating his apartment!) I had promised a rough audio demo, so here is what we've got going on so far:





The volume is low here for audio nerd purposes (need that headroom!) You may notice its a much more naturalistic sounding direction from the more "gamey" audio of the lingo. There are a few "characteristic rain world" sounds, like the super jump, bat screeches and terrain impact "thud", that i kept from the previous version because with a little polish and contextual application they totally still work. and i like them!

From a technical standpoint its nothing terribly exciting, though we are probably doing 20x more sample instances and procedural implementation than a platformer usually has. basically every audio trigger (of the approximately 1 million that Joar set so far) has around 5-20 samples attached to it, and each of those samples is randomized by pitch and volume within a certain narrow range. This is mostly just because i get way too involved and micromanagy with this sort of stuff, but the world sounds much more alive and deep when you dont hear so many repeated sounds. i get completely taken out of immersion when i hear mechanically repeated sounds in game audio, so im stoked to get the opportunity to take the time and do it right.

anyway, another few hundred triggers, some polish and the same level of detail applied to the ambient audio, i think we'll have a pretty nice aural experience for you guys Smiley

here is an older lingo demo clip for comparison, and to slap me upside the head with how much progression has been made (warning the audio is much louder here):









   jamesprimate on May 01, 2015, 10:51:32 AM:

Thx thx for the feedback! Yes the super jump and backflip sounds are definitely worth further consideration. Joar wants to keep some nod to the cartoony aspects, so that's where that comes from, though striking the right balance between "cartoon" and "nature documentary" is going to take some fiddling. We have yet to implement the ambient (atmospheric) audio engine, so I'm looking forward to hearing how this current soundset works in that context.

Audio design is a weird process. It's like erosion smoothing away the corners of rocks in a stream.

And speaking of water, to tortoiseandcrows comment, yes  indeed! we just discussed adding a set of triggers for impacts and etc in specific environments, so wet splishes, dusty fuffs, metallic clangs, etc. this will be layered with the impact sound just as you described.





   jamesprimate on May 02, 2015, 07:49:40 AM (Last Edit: May 02, 2015, 08:22:51 AM):

ah this is fun, thank you! no one ever gets into debates about audio design philosophy around here  Tears of Joy

in defense of le Mario Bros jumps, one of the reasons they remain to be used in many games is readability. in a sound environment like this where most of the mid-ground aural texture will be composed of various ambiguous white/pink noise elements (bat flaps, wind, gravel, crunching steps, water, etc etc), having a distinct palette for important moves is key, as it functions as significant "aural UI". To the player in a chaotic sound environment, a white noise "whoosh" is useless in a sea of white noise "wooshes".

also there is a point to be made about diagetic audio vs experiential audio. in my design philosophy, conveying the mood and a satisfying "experience" of the action / sound / music / etc. takes a slight precedence over some sort of cohesion ideal: just like with the visual UI debate, it is a game and sometimes there will need to be game sounds. the reason i kept this specific sproing from the lingo alpha is that it *feels really good* in-game, and i can say this comfortably without bias since its not "my sound". I just like it!

*BUT* these are much more general comments about these topics! I think in this case its very possible were just so used to hearing that "pounce" sound (after playing it for 3 years) that it can't possibly seem out of place to us. Our ears are TIN for this specific case! So if its sticking out then its sticking out, and i value your opinions, especially as you both went to great lengths to describe the context for them. You guys are the best!

In this version, that sound is a blend of the original alpha sproing sound tempered with a filtered white noise air woosh like Teod describes, so ill def try some re-leveling and blending of sporings keeping these opinions in mind. Im sure there is a balance where we can subtly satisfy our sproing lust and ALSO make it not sound like mickey mouse just dropped randomly into the screen for everybody else. And if not, other options will be explored! Hand Thumbs Up Right  Hand Thumbs Up Right  Hand Thumbs Up Right

edit:
Quote from: tortiseandcrow
I get the impression from the levels that Rain World is such a soggy place that you could probably get away with using modified water sounds for pretty much everything.

oh! i wanted to talk about this a little, as Joar had said something similar. with such a large world that we have going on, in my opinion uniformly coating everything with a similar aural texture would be a huge missed opportunity for immersion, especially since its so easy to implement a more dynamic solution! its those subtle differences that add so much IMHO

and ill be honest, there is no way my obsessive audio micromanagement tendencies would let such a thing fly XD





   JLJac on May 04, 2015, 10:41:06 AM:

Good talk! I kind of agree on that jumping sound in particular, which might have something to do with me knowing the unprofessional circumstances it was created under haha! Think it was something like me blowing on my laptop mic and then messing around with a dynamic pitch bend in Cool Edit Pro Facepalm Anyways, on the more general cartoony/naturalistic discussion, I think this is a really interesting topic. I won't lie, I think it could totally work out to just lean all the way over on the naturalistic side - realism can't really be wrong. It can be a bit boring however. The art and animation is always straddling this balance of nature documentary and cartoon - and though I know many are more interested in the nature doc side of it, I do believe that it would be worse off without the cartoon element.

It's like onions in cooking, no-one likes to just munch down on an onion, but it's not as simple as onions=bad and removing them makes the dish better. The onion does unexpected stuff when cooked, mixes stuff around, brings out the other tastes. Similarly it tastes better if you add salt, but if you add a lot of salt you hit diminishing returns. In the same way I think the cartoony elements in Rain World add some value. The natural first reaction is "ewww cartoony", but if it was removed it would be obvious that something was missing.

It would be cool if the audio could strike the same balance the animation is already attempting. It's a fine balance though, and might take some tuning. That jump sound might be like biting into a rather large piece of un-cooked onion, to return to the analogy. Stuff should obviously not be jarring, it should feel like a smooth blend, but a smooth blend with some unexpected undertones is more interesting than just straight up one thing or the other.

Update 422
I'm preparing for the big region connect/divide structural change where the game will actually become open world, one way or another. I want to know what I'm doing with this one, as it's a rather important piece of the under-the-hood infrastructure. In the mean time while getting ready, I've been doing some assorted messing around. Today I did a lot of small things - touching up the light shader, streamlining the player controls for some situations, fixing a few issues with the player animation, hunting down a few bugs, etc. Maintenance work. I have also been working on assets for the dark region, but you'll have to wait for James to start posting screen shots of that stuff. I think this one is going to be pretty interesting visually! Maybe I will do a little bit more misc stuff, but I feel like a game plan for the "let's make this an actual open world game" process is taking shape, so I'll get in there hopefully tomorrow or the day after.





   jamesprimate on May 05, 2015, 10:21:20 AM:

OMFG so after a NIGHTMARE 2 days of trying to get kickstarters new update system to reliably load gifs, here is the messy result:
https://www.kickstarter.com/projects/rain-world/project-rain-world/posts/1220116

and now it turns out that old gifs on previous updates are broken as well. wats going on kickstarter  Cry





   JLJac on May 05, 2015, 11:25:46 AM:

 Cry Cry

Still, a good update! Two critters in one month :D

On my end, connecting regions! More news as I make some significant progress.





   JLJac on May 06, 2015, 12:42:29 PM:

Region gates technically working, and I have connected the regions we already have. Still a million things that are wonky, a million things that should be added, and approximately 400 000 things that need visual polish or to have their graphics be created, after which they too will need visual polish. However, large leaps! Moving around the world between regions makes you realize it's really, really big already. I've been doing one Rain World tour of the regions we have without actually running through it, just jumping from room to room with the dev tools, and it still takes me like, 7 minutes to find my way through the maze. With enemies in, actually having to run everywhere and do the platforming challenges, and the rain cycle to think of, I think just getting from one region to the next will be quite an epic endeavor, probably spanning over several hibernation cycles. Still, we don't know a lot about exactly how it will play just yet - I literally hooked up the regions a few minutes ago. Hopefully this is where we will start to get a better grasp of what our game actually plays like though. My first impression is that it feels pretty different with the large connected world, which is cool!





   jamesprimate on May 06, 2015, 02:58:49 PM:

just did a run of the quickest direct loop around the 6 finished regions (no side paths) with no creatures or rain and it took me, their creator who knows every shortcut, like 35 minutes O_O





   jamesprimate on May 06, 2015, 03:19:51 PM:

just did a run of the quickest direct loop around the 6 finished regions (no side paths) with no creatures or rain and it took me, their creator who knows every shortcut, like 35 minutes O_O

How many regions are planned now?

12!





   jamesprimate on May 06, 2015, 05:50:39 PM (Last Edit: May 06, 2015, 05:56:07 PM):

- Suburban
- Drainage System
- Heavy Industrial
- Chimney Canopy
- Sky Islands
- Garbage Wastes
- The Underhang
- Urban Dark

So far?

indeed! It's getting to the point where i wonder if soon we'll have to starting to think about spoilers here :/ Eh, we'll cross that bridge when we come to it.


This will be the Skyrim of ferret stealth platformers...

sheesh. yeah, and to a degree i'll admit its partially overcompensation on my part.

with the game being so reliant on the emergent experience of a big, fussy web of interacting AI's, when we started out on this new version there was no real concrete way to know ahead of time if any of it would really work out and be playable. That was sort of a paralyzing thought when expectations got hyped and it was clear we'd have to make "a real-ass game" rather than just some little ecosystem toy. So I thought at the very least we could make sure that there would be Content. Then worst case scenario if the interactive AI ecosystem experiment didnt work out, people would still be getting their money's worth in exploration/adventure game. And also, I mean, it is called Rain WORLD not "Rain Area."

At this point i think we're both pretty happy with how the experiment is working out, so hopefully the large scope is a bonus that will add a lot to the replay-ability and NG+ aspects. As its open world without much in the way of arbitrary "go here to find blue key" type of barriers, the player isnt going to be dragged through every room or anything, so i dont think the size will feel like a burden (to anyone but meeee  Cry ) I would guess a player could very easily go through the game a number of times before seeing everything, and thats always fun.

Anyway, I've just laid the foundation really, and I cant wait till we get to the "Joar adds tons of weird stuff and set pieces" part :D





   JLJac on May 07, 2015, 01:27:47 PM:

Update 423

Started animating the gates. Work still in progress, I want even more going on haha!



Oh, and yes James, I expect this thing to create insanely many sound triggers :D





   jamesprimate on May 08, 2015, 01:52:48 AM:


Oh, and yes James, I expect this thing to create insanely many sound triggers :D

yessss! i think the mockup i did of the shelter door audio for the last trailer had something like 30 individual sound events, so IM READY  Hand Metal Right






   JLJac on May 08, 2015, 11:01:40 AM:

Update 424

Working on the gates and cleaning up a bit in the new multi-world infra structure. As every big structural change, it did bring a lot of bugs with it as many parts of the games suddenly find themselves in an unfamiliar environment. For example, I earlier had rooms indexed by their room number within the region, the first one being zero. Under the new system I didn't like this, as "5" could refer to the fifth number in any of the regions - so I changed the indexing to be spanning over all of the regions, and had the world translate world-general room indexes to region-specific indexes on the fly, causing everything to crash horribly because every place in the code where I was looping over the rooms in a region suddenly referred to some unloaded rooms in the SubUrban region. Well, got that sorted out though, thanks to the search function!

Other endeavors has included making the script that loads a region able to run over several frames, being kept alive with an Update call, rather than doing it all in one go. This is so that a region can be loaded as the game is running without causing a huge hiccup. I know you should probably use threading for this, but the little research I did in threading scared me away. One article was named "Simple example of threading" and started out "There is no such thing as a simple example of threading."  Cheesy I've never before come across a phenomena in programming that can't be contained in a neat half-page example... So for now I'll just split processes over several frames instead. If I do learn how to do multithreading down the line, I assume I can put these split-up processes within the threaded class (if that's even how it works!?) and just call update on it in a loop till it's done.




On spoilers, how do you guys feel? Personally I would prefer to keep blogging, at least to some degree, as the devlog is good for my productivity. At least it feels so - writing down what you have done and have others read it confirms that you actually have done something. On the other hand I can totally see the point of it being a bit boring if every single little detail about the game is already known going into it.

I guess it depends on what your motivations for reading is? I myself read the Dwarf Fortress devlog, but I don't really play Dwarf Fortress - the project is more interesting to me conceptually than practically (you'd have to play for years to actually come across most of the phenomena described in the devlog), and with my interests geared like that the devlog is actually a superior medium to experience the project than the game itself.

On the other hand, a project that is more about the experience either as an action experience or an art experience would probably have way more impact as a game, and the spoiler discussion becomes relevant.

I can only speculate in what makes RW interesting to you guys, but I think that maybe it's somewhat in the middle of the two? There's some conceptual stuff like AI etc that might be interesting to other devs and enthusiasts, but the game is also a lot about the experience of exploration and encountering the unknown. So it's sort of straddling that line perhaps?

Let us know what your feelings about spoilers are! Obviously we are going to have a way more open discussion hanging out here than what goes out in the twitter feed etc, but the question is to what extent that should go. We could have a policy that the devlog is cards on the table, and if you want to stay unspoiled it's your own responsibility to stay away from here. That would make it possible for everyone to custom-tailor their experience, but it brings in a weird element of temptation. Another idea is that we could have a devlog black-out for a month or so, during which we will focus a lot on content creation. That way you'd still be able to follow the development of the game on a conceptual level, but you'd know that when you actually get your hands on it there will be at least some creatures and areas that can surprise you. What do you think?





   jamesprimate on May 09, 2015, 06:22:29 PM:

good feedback and questions!

Quote from: tortiseandcrow
  I'm very interested in the cards on the table insofar as anything dynamic or emergent goes, but would prefer to be kept in the dark where one-off events or encounters are concerned (though it would be really interesting to have some insight into at least one of those as well, just to see the thought-process behind it). I'd always imagined that there would be some fraction of the game that you'd simply not tell us about, much like Teod outlined.

this sounds about right. think its worth a discussion on our end about where specifically to draw the line, but probably being vague about a couple of regions and a few beasties and omitting a few others that might drop too obvious of hints would do the trick. as so much of the game is about observation and creature interaction, spelling out "this does this" would be a shame, but thats probably easy to avoid as well.

Quote
One of the reasons why I asked about your thinking behind set-pieces was that I was curious about whether you intended to have scripted events, or whether there was some other kind of process you had in mind. Scripted events can be spoiled, but I don't think that emergent processes are necessarily so vulnerable to being drained of their surprise.

interesting question! most of what we've done so far has been to organize the room geography, creature den placement, etc., in such a way that certain set piece-like outcomes are likely to occur. a simple example would be set-piece where you are first exposed to a new lizard type by having a pack of them chase you along a long bridge. easily done by having the lizards access to the player terrain be far enough away onscreen that the player has both visual alert and a running start before being in danger. it wont work perfectly, and sometimes not at all, but when it does it has a similar effect as scripting 4 lizards to spawn behind the player or something, etc etc. how feasible this is on a larger scale, we'll see. there are already plans for tools to make individual creatures more or less territorial, and then specify that territory, so that will definitely help structure set pieces while still being fuzzy enough to make the experiences unique.

a trade-off on all this that we have to be cognizant of is that there will certainly be people who get unfair / bad / boring experiences from us leaning on the cosmic dice roll, and they'll be like "this game is broken". so balancing the emergent with the static so its at least generally functional will be some WORK.





   JLJac on May 11, 2015, 11:36:59 AM:

Hi! Hope everyone had a nice weekend!

So, from what I'm picking up here most people would like to keep the updates pretty much as they are. I think that means that we are not doing some total devlog blackout. Maybe we can walk some kind of golden... not middle road, but two-thirds-road? Like, I devlog pretty much everything I do, but if there is something small I think would be particularly fun to find out for yourself (and which is small enough to not be a big project that strangely keeps me quiet for several days), I omit it. Also, we want to include a lot of what we call "set piece rooms", which will be a special room with custom art and maybe a few lines of code that creates some interesting visual or interaction in that room. The reason for having these is that we have this huge world, and if you go exploring you should obviously be rewarded occasionally by finding something interesting. To me it seems like these could be a pretty perfect fit for something to keep quiet about - they're there specifically for the joy of exploration, and they are not mega projects that will take forever.

 


* There should be at least one region we know nothing about (themes, mechanics, creatures, location in the world, etc).
* In every known region there should be at least one creature we know nothing about (looks, mechanics, behavior, etc).
* Every known creature should have at least one mechanic or behavior we know nothing about. For instance, if you'll ever come around to that knocking the mask off a vulture thing, don't tell us that you did, how it's done and what it does.


Number one and three here are sort of viable! For regions, it's James making those, and though he does use the devlog he doesn't as much as I am, so it would maybe not be too big a difference for him to just do a region sneakily without letting anyone know. Number three is sort of already happening a little bit, as I mess about with the creatures I sometimes add little features and interactions that never make it to the devlog. It's not that systematic (one per creature) but there are a few things going on with most creatures that are not on the devlog, small and very small. I could perhaps be a little bit more deliberate about this! For number two, a creature is generally at least a week-long project to implement, and the region to creature ratio is currently around 1:1... Meaning that this would basically be me making an entire new RW in secret, pushing the release twice as far and create devlog blackouts for half of that time haha! But good suggestions, I'll keep this in mind  Hand Thumbs Up Right

Update 425
Puuuuuuuh it's been a very region gate weekend indeed. Here they are:


(click to expand)

The central gate mechanism will look pretty much the same for all gates, but out to the edges there will be some room for James to add a little bit of individual flavor, and maybe hint at the regions the gate is bordering to. This one is Vanilla though, why it's just plain metal on the sides, real gates bordering to regions might look a little more interesting in those areas.

And a few gifs showing the walking through them. First of all, the gate closing behind you:



Mandatory sauna:



And passing through to the other side. Ignore the cheesy palette swap at the end of this, I still haven't entirely figured out how the palette swap between regions should work, so I just slapped on a ... palette swap. Gotta come up with something better for that.



Also, James and I have been talking about how these are going to work gameplay-wise a little bit. You might notice the water cistern up top - it's more visible when it's empty after you have passed through the gate:


(click to expand)

The gates are powered by the water in that cistern, is the idea. It's not visible in the gif because I had to crop it, but there is always water running as the doors are working to make this seem plausible. The gameplay implication of this is that you can only pass through a region gate once per rain cycle. You can technically go back to the same region twice, but you'll have to circle around and find some other way in - each specific gate only opens once. When the rain returns the water replenishes. The reason why we think this could be an interesting game mechanic is because it somewhat increases your stakes. When finding a new region you will naturally experience the excitement of exploration from entering a new area, and the idea is that this will be enhanced by making the experience a little bit nervous as well. Because with the gate shutting behind you, you don't have the option to just dip a toe in the new region and opt out if it wasn't to your liking. Instead you will have to find food and shelter (or at least a way back) in the new alien region. Most of the regions actually have a shelter and an easily accessible swarm room close by the gate, but maybe not all... So walking through one of these gates will really be equal to throwing yourself into the unknown. Hopefully this nervous feeling will be enhanced by the 40 seconds of gate mechanisms clicking and clacking and you being steamed like a dumpling, haha!

I'm really happy region gates are coming together, but there are still a couple of technicalities to be taken care of. One thing I have no idea how to solve is what to do with a creature that followed you into the gate room but ended up on the outside of the gate. Then we have a realized creature with an abstract representation that should actually be hanging out in another region from the room which the realized creature is in o__0 Going to be real interesting how I solve that one!





   jamesprimate on May 11, 2015, 01:34:26 PM:

these gates are going to be rad. the shelters added so much to the mood, so its exciting to imagine experiencing these for the first time as a player, not knowing whats going on. will be so cool and moody! and im quite looking forward to sound designing the hell out of them :]

past few days ive been working on the first dark region, and this talk about spoilers has made me realize that pretty much all of the dark stuff on my end will be fairly spoiler-proof already. screenshots wont show much other than a white blob, so unless we want to do a video literally running through a room or something, it'll just have to be left to the experience. which is good! but also might make for some dry spots in my contributions to the devlog tho





   jamesprimate on May 12, 2015, 01:09:15 AM:

My only gripe about the one-way thing... What if a first-time player discovers one of these right near the end of the rain cycle? I mean, most players might be a bit intimidated by the thing, and avoid it when it starts getting dark. I suppose new playtesters will have to decide if any action should be taken. However, if it is an issue in need of resolution, perhaps they should deactivate somehow when the sun goes down? For instance, the water in the cistern ices over?

i had the idea to have the water level of the cistern visually decrease over the course of the cycle, acting almost as a clock. you can go in and have an easy visual indication of if the gate trip is worth it, or if you need to rush back and find shelter. as the doors are (we assume) powered by the water, the gates simply wont open after a certain point in the rain cycle when the cistern is empty. shelters will generally be nearby though, so while it may be a scramble, it wont be *completely* unfair if you find a near empty/nonfunctional gate.





   JLJac on May 12, 2015, 11:50:29 AM (Last Edit: May 12, 2015, 01:19:50 PM):

Update 426

Did a little touching up on the shelter gates, bringing over some tech from the region gates to make it look better. Old ones were running on a different shader which had a bunch of problems, and suffered from compression making there be a lot of little pixel-wide holes in the machinery. Using some techniques from the region gates I got that back up to an acceptable degree of solid:



Also, little flaps at the entrance! As those of you who played the game at PAX might remember, you were usually blocked until the machinery was finished by some sort of invisible wall, which was obviously not the most intuitive solution. Now there are little hatches that won't open until you are actually allowed to go through. Crazy how this machinery used to seem extremely over-the-top, and now after the region gates it looks really simple!

Other than that, I'm trying to make it so that an AI creature can follow you through a region gate, or be brought with you in the case of portable critters. This is trouble, as all of the AI modules have an idea about what world they're living in, and have to re-adjust. I originally started working on a solution where each module got a NewWorld call and had to adapt and restart its internal processes accordingly, and it was to some success. However, there are maaaany AI modules, and more to come, and if I go with this solution I will have yet another piece of functionality that has to be created, tested and bug-proofed for each new AI module I write, after I have created, tested and bug-proofed it for the ones I already have. So now I'm exploring another option instead, which I hope will scale better. This idea is to just put out the entire AI of the creature and have it spawn a new one from scratch. This does have the side effect that the creature will forget a bunch of stuff, admittedly, but on the other hand most of the information it was storing was about the old region and isn't likely to be relevant again. Social relationships (when I finally get around to them) will be saved in a special data container tied to the abstract creature, to make it last over saves, and should be able to survive the AI switch. More on this as I actually accomplish something!

When this gets too frustrating, I have been resorting to some various poking around. Examples off the top of my head are: Fixing a shader bug where some distant objects would be red. Streamlining the player's in-corridor move set to make the jumps and slides more easy to pull off. Making the light source shader show one-way floors (crudely). Making a placable "garbage hole" object in the level editor for James to distribute through the junk piles in Garbage Wastes, where the garbage worms will later be able to pop out when I get around to it.





   jamesprimate on May 13, 2015, 01:51:45 AM:

testing out a Shadow Urban room illuminated by lantern mice. Shhhhh!






   JLJac on May 13, 2015, 11:28:36 AM:

I imagine to die a lot in the game, wouldn't it get annoying to wait 15secs for the gate every time I start a game before the action starts?

Suggestion: Before the flaps open two long bars move horizontal. The space does not look so good when the bars are gone. They could always stay in closed position, saving time and maintaining a narrow look.

Yes! Actually that is sort of why it's there. My reasoning is like this - with this little wait, you already have a bit of a stake in the game session as you go out into it - you have already invested 15 seconds. RW gameplay benefits hugely from higher stakes in my experience, if you care about surviving the nervous atmosphere is enhanced. Also this little wait creates a space for sort of debriefing and calming down before going out there again. "What went wrong, what am I going to do differently now, what route should I take" etc. Basically it's there to make the game not play like Super Meat Boy or similar, where you just throw yourself at death over and over. Not any disrespect to Meat Boy, I love McMillen and think he's an awesome game designer, but Meat Boy and Rain World are pursuing different goals. So the wait acts as ~ not a penalty for dying per se ~ but as an "Okay, you messed up. Here you have another go. But calm down first, think over what went wrong, and start fresh." When playing the game, at least I am enjoing it, and I didn't really hear complaints about it on the PAX floor either which has to be a good thing for something so boring as waiting. But we'll see what happens when we get beta testers on it - maybe I'll have to speed it up quite a bit at the end of the day.

What is it about the background in the shelter machinery you don't like? Should I throw some more stuff in there?

testing out a Shadow Urban room illuminated by lantern mice. Shhhhh!


Great grate patterns.

Overall the Shadow Urban atmosphere seems a lot more cozy and peaceful than I thought it would be. I was afraid that I will be afraid of going there (well, more than anywhere else), but now I'm looking forward to it.

Thanks! Good to know we have some connoisseurs of grate patterns among us, those took me like a day  Cheesy Actually there is quite a lot of creepy stuff going on in the dark parts of Rain World as well... But then there are also sleeping lantern mice. So it's a sort of sour-sweet mix of both!

Update 427
Yay, got pathing creatures to work while following through a region gate! Was actually not quite as horrible as I expected. Other than that, I fixed the weird bug alpha backers will know of where a lizard carrying you through a short cut sends you flying all over the screen. And made a few more art assets for Shadow Urban. James and I had a talk about the area aesthetics, and agreed that neither of us are big fans of how the effect colors on plants look in darkness, so I made a plant which doesn't use effect colors but is instead intended to look good just with the light sources moving over it. It looks decent in my test setup, but I'll have to see how it behaved in James' actual implementations and maybe do some adjustments later on - it's a heavily procedural beast that isn't always predictable.





   JLJac on May 14, 2015, 02:30:13 AM:

Diving into a bit of sound stuff - trigger placement, adjustments etc, so might be a little quiet here for a day or two. Basically we're setting up a powerful infra structure for sound randomization, so the aural experience is going to be really organic. Taking a look in the sfx folder today I noticed that James has SIXTEEN (16!) sounds for the backflip jump, and similar amounts for most other player movements. Minor co-stars such as the snail has to make do with meager 8-12 variation on most of its sound effects though, so don't expect too much  Shocked And this is when he had to manually input each variation, now I've made an interface for him where the system will automatically detect a bunch of sound effects with the same name and make a pool for random selection out o them. Who knows what craziness might come out of that!

We also need more sound triggers placed, for example the vulture is silent as a ghost atm, and lantern mice and a few other things also need to have their triggers placed.





   jamesprimate on May 16, 2015, 05:05:02 AM:

I'm thinking the Vulture is going to be pretty quiet outside of low pitched wing flaps, and maybe some assorted hisses and shrieks when you are dealing with it face to face. Oh also the gas jets too I guess. Want the ominous wing flaps to be an audio tell similar to how the shadow announces its presence. Something subtle, but makes you scramble for cover when you hear





   JLJac on May 18, 2015, 12:29:46 PM:

Hi everyone!

So, on the subject of the devlog thing we talked about earlier, I'm making a creature that I'd rather keep silent about as I think you guys will want to discover it yourself. It's a darkness dweller, and it's REALLY scary, so I wouldn't want to spoil that for you Smiley Estimate to be done tomorrow or the day after!





   jamesprimate on May 19, 2015, 12:25:02 AM:

Probably! or at least 2 of the 3. Right now were scrambling to get together a build for E3, so audio is taking a back seat for a week or so.

and regarding this creature... not to overhype it or anything, but damn it is LITERALLY my nightmare. as in, i was telling Joar what i hated most in the universe, and... then he goes and sketches it and builds an even more horrifying version in game. *shudders*

not sure if ive ever seen something like this done from a technical standpoint either. pretty cool, pretty cool.





   jamesprimate on May 19, 2015, 05:19:38 AM:

EUGHHHHHHHHHH  Screamy and i had just forgoten about that worm digestive thing too ick ick ick thanks christian XD




anyway, sad thing about this dark region is that nobody will see all the nice architecture Tongue








   JLJac on May 19, 2015, 01:11:36 PM:

I'd actually disagree. From a screenshot it looks like the darkness is just boring and you don't see anything, but in-game the entire thrill is moving around and only being able to map out the geometry one piece of a time. It feels like a nice mystery exploration situation, and that would be ruined if you lit the rooms or placed a lot of glowing things that could be used as reference points. I think the dark areas are going to be way better in-game than on screen shots, but let's keep it that way as it's otherwise officially known that Rain World is best in gifs... so let's let the poor actual game have something going for it  Cheesy

Icky darkness creature is starting to be done. Christian's super gross gifs are on to something, but I won't give too much away ~ The behavior and the skin is done, now to make it work in the connected world. This thing is horrifying! It hates light though, so when you go down there, grab a lantern mouse and run as fast as you can!





   jamesprimate on May 19, 2015, 05:17:40 PM:

oh geez youre right huh. right down to the description and everything

well thats what we get for taking so damn long  Cry





   JLJac on May 20, 2015, 02:43:34 AM:

Oh, really cool! I wouldn't really sweat it either though. The description sounded a bit similar, but the visual style and setting reminds much more of Limbo, and the gameplay seems quite different as well - more like a fighting/action game where the characters are large on the screen and geometries that are floor-oriented rather than maze like.

Also, there's a lot of room for good stuff Smiley I obviously design stuff in RW as I do because I like it that way, so when someone else is doing something similar I generally tend to like that as well haha! I wouldn't suggest that actual game makers that have actual releases in their belts are taking inspiration from me, but I really do like procedural animation and one of my aspirations for this project is that more people will get into that sort of stuff ~ So if it's already getting more common I'm stoked. Hopefully in 5 years the term "game animation" will naturally refer to the creation of body movements that are deeply tied to AI and environmental context, rather than just cartoon animation put on top of a moving block. Every step in that direction is exciting!





   jamesprimate on May 20, 2015, 05:54:06 AM:

Nah nah this is just an internal build for adult swim (if I can get the damn thing uploaded!) nothing to get excited about





   JLJac on May 20, 2015, 12:41:53 PM:

It's really hard to not give stuff away, I'm so used to communicating with you guys! The last thing I will say is that Chris is on to something - light provides safety only momentarily.

The world seems to share similiar elements to Nifflas' Knytt: Underground, but gameplay is very different. And the world feels way more alive due to all the moving stuff, ad the way platforming is smooth and fluid :3

Thanks and welcome! Yeah I'm also a big fan of Nifflas stuff, used to play a lot of Knytt back in the day. What's really fascinating to me about those games is how effectively exploration is used to propel the player - if I remember correctly most of the games had some collectibles scattered that sort of motivated you going all over, but those were really secondary, mostly you just kept going because you wanted to see more. And it was pretty much only about the environments, the enemies were simple and few. If I remember correctly there was one or two of the games where the enemy/danger aspect was toned down almost to zero, the game was only about the joy of exploration and some light platforming challenges. It's pretty awesome how a lot of hand-made rooms can acquire that degree of value or "aura" just by you having to move between them and explore them. If you had screenshots of all the rooms in a folder you'd just flick through them pretty indifferently, but because you had to find them yourself in this huge sprawling world they each felt like a discovery.

Rain World is not as conceptually tight as those games though, it can't as easily be reduced to a core like that as it has lots of other stuff going on as well (AI, emergent interactions) for better and for worse. But we'd definitely like to harness some of that joy of exploration from the Knytt games if possible! And I think James has been doing an awesome job so far in making each room unique while still tied to its region, which is in turn stylistically tied to the game's general atmosphere as a whole. If we could pull off the stunt of having Knytt-style joy of exploration and then add the AI stuff etc on top, I would be really happy!

In progress news, I finished up creature X to the degree that it works in a connected world, reacts properly to the rain cycle, etc. Which is more than what can be said about some of the other "finished" creatures haha  Cry Garbage worms still don't have a solid functionality for placement in the world, for example. But I'll get to it! In the mean time, I'm doing some sound stuff that James has been asking for - fixing a few errant sound triggers, adding in new sound triggers, etc. The next big challenge is water sounds, that's going to be a big one! Either it proves easier than expected, and just firing off random somewhat-contextual watery sounds will blend together and work really well, or, well, we're in for a ride!





   jamesprimate on May 20, 2015, 04:07:27 PM:

Just going through some numbers, so here is the terrain report for Rain World so far: 7 regions (well, 6.5 really), 270 rooms, 359 screens.

As you know there are 12 regions planned, plus additional set pieces and transitions. So its gonna go be deeeeep!





   jamesprimate on May 21, 2015, 05:57:43 AM:

finally getting to design some proper RUINS!



(well, arguably its all ruins, but you know what i mean...)





   JLJac on May 21, 2015, 12:10:14 PM:

Update 428

We have been talking for a long time about how the black death screen doesn't really hold up to the visual/interactive standard of the rest of the game, so today I finally got to work on some actual in-game death rain.



Obviously still a lot of work to go, but it's a start! What I've got going so far (aside from the start of a rain shader) is basically a texture that shows what parts of the level is sheltered under terrain, and doesn't render the rain there. Basically the texture is the same size as the room's tile matrix, with pixels that represent solid tiles or tiles beneath solid tiles as black and others as white. The shader then grabs from that texture, and my usual eternal enemy the automatic smoothing of scaled-up textures actually helps me out this time by softening the edges a bit.

A concern is the water splashes going through walls, as you can see... I'll have to figure something out with that. Maybe instead of having a radial splash I could have a directional, and aim it upwards from the surface being hit.

There are a million tricky design choices that go into this. I was hesitant to even get started on it for a long time because the plants and wires are static, and it feels weird that they don't move in a situation like this. For that reason I still want the rain to be pretty binary - on or off - instead of a gradual transition, because if the rain is intense enough to mess up the image completely you are less likely to notice the adamantium ferns standing strong against the pounding.

On the other hand, we want to have some rain-related gameplay going on, fleeing from rain and the like, and that speaks for a more gradual approach where the rain can be there, but you aren't instantly dead.

Currently my idea is that the rain first comes in this stage shown above, where you can actually hide under terrain a bit. If you go out into it you should be thrown around pretty badly and drown/get crushed quickly, but scurrying a few tiles through it should be possible (if you can do it in the blind, it's impossible to see what's going on out there).

Then obviously the rain need to step it up a notch from there, or you'd be able to survive by just waiting it out in any old spot such as in the gif, which would undermine our entire game mechanic with shelters etc. What this second step should look like I don't quite know yet, currently I'm thinking about having it just gradually fade to some sort of all-encompassing complete rain mayhem. That could sort of make sense given the ambiguity of the 2D/3D aspect of the game ~ are these rooms completely closed, or are they open in the front? The answer to that question changes according to what's convenient for us haha, and in this case I'd probably say that they're open and as the rain gets really intense it gets in there and smashes everything with general watery violence.

Then comes the question of the rooms that are very obviously completely underground, what to do there? The current idea is flash flooding, just a water level that rises quickly, and maybe underwater currents that smashes everything into the walls and wreck mayhem on whatever wasn't quick enough to swim to safety. But I'll have to get to that when I get to it - outside rain first.

Another concern I have is that rain like this should generate a whole lot of water, that should be washing around and dripping/pouring everywhere. Currently I don't really know how to animate that, but it'll have to happen through shaders somehow. The super realistic scenario would be that the water has an actual fluid simulation going and is just washing along in the corridors, but I really doubt I will be able to make that happen, at least at acceptable performance. So I'll have to wing it somehow. Stay tuned!





   jamesprimate on May 21, 2015, 12:54:02 PM:

Oh god I love this so much!!! It already looks better than I imagined! You guys don't know how long I've been waiting for this  Tears of Joy

Complete agree with Christian, the radial spray through the walls looks great, adds to the perceived intensity and depth. Feature rather than a bug! Also, maybe it's hard to tell from this pic, but the rain seems to blur and obscure the exposed terrain so much that I wonder if the plants will be seen as anything but a vague outline, which would be perfect imho!

A few months ago I did a survey of literally all instances of rain in videogames, and it was pretty bad, even in modern/next gen games. This is already better than any of them, so if that's one day's progress then HELL YEAH.  Hand Metal Right Hand Metal Right Hand Metal Right

I mean, it's called Rain World, we had some expectations to meet!





   jamesprimate on May 22, 2015, 10:19:12 AM:

@mark: Lydia went to last weeks! She said it was super boring other than your game, which she couldnt even get near due to the crowd of people XD I do need to make it out though. Next time!





   JLJac on May 22, 2015, 11:58:48 AM:

@fizmat, that idea of a potential pause or at least slight dial back of the death rain is kinda interesting! I'll try it out!

@Teod, yeah I think so too, today I implemented some "inside" rain, or maybe rather "in front" rain, I prefer to just call it "everywhere" rain haha. It looks good in an open level, but I'll have to come up with something else for rooms that are, say, more or less underground but with a skylight where there should be rainfall.

@oldblood thank you  Grin Yeah this doesn't make sense at all. Also I think that the terminal velocity of falling water isn't all that high, so I doubt you can get a fire-hydrant sort of effect from rain even if you have a lot of water. But, this is art here - I try to chose my moments when to attempt at things making sense and when to go with more weird expressionistic stuff, and this is definitely the latter.

@tortoiseandcrow, I think there will be a lot of flash floods, as there are a lot of underground and underground-ish rooms, but I don't want to flash flood everything. If you get flooded while you're all the way up in a Sky Islands antenna that'd mean that there is an entire ocean coming and going with each cycle, and that's more hyperbole than I can sign up for  Cheesy

@darklight, welcome! I might attempt something like it, but it would be quite difficult. As RW has lots of fluid animations it wouldn't really do to have some square stuff going on for the water, it would be super Jarring, so if I do try to get water washing around it would be ~~~coooomplicated~~~

@Gimym JIMBERT, Christian, Woodledude, Nope, I have not actual fluid dynamics running. The water fall is just a square with a shader. The water in the game does have a water surface simulation running, but that is a very specific thing where it is assumed that the surface is just a curve in 2D space with water below it and air above it. Actual fluid dynamics where the water can go all over would be something completely different. I haven't really seen many examples in 2D (or 3D) games, McMillen's "Spewer" would be the exception. But if the water were to match the other water stuff visually I'd have to go crazy with shaders on top of it, and doubt the computer would be able to do millions of water particles all interacting and then the shader stuff on top. Granted, it is CPU and GPU so the burden would be split, but for the GPU I'd have to work with blurring and render textures etc (on top of grab passes) so I really think it'd be too much there, aaaaand the CPU would most likely not be able to handle the amount of particles I'd need to be happy either (which would be about 600 times more than in Spewer). So, if anything I think I'm gonna fake it some other way.

@Osteel, hi, welcome! On Rain World is James, who posted right above you there, and me! Feel free to hang around and talk, we're really nerdy and technical but if you're into that sort of stuff we're happy to answer questions etc  Hand Thumbs Up Right





   JLJac on May 22, 2015, 12:15:27 PM (Last Edit: May 22, 2015, 12:25:33 PM):

Update 429

More rain stuff! First of all, fixed the splashing through walls. But mostly I made the shader able to fade between different rain intensities, and added physical interactions for the rain.

First, very light rain:



If performance permits I can imagine rain at this intensity come and go a bit during normal play, it could even look pretty good with the sunlight out. But it's an entire new grab pass, so idk, I'll see if that works.

Heavy rain:



This is what I imagine to be the equivalent of very intense real-world rain. It still doesn't cause your locomotion any trouble as you can see from the pole climb, but it assumedly makes you wet and cold.

Grade A death rain:



Possible to move through, and it doesn't outright kill you, but certain movements such as jumping and climbing are really hard as you're constantly pushed down. If you're under a roof you're not affected at all though.

Grade B death rain:



Unless you have a completely covered route to the shelter you're in trouble now. It's still possible to move through, but you have limited control and are violently pushed out at the sides and thrown around in the middle. You need some horizontal momentum to go through it, so the charge jump might help you out. This rain should also kill you, although I haven't implemented that yet. I think it'll be a counter that goes down while you're in the rain, which has a constant ticking and is also decreased when you're pounded into the floor. If you're under cover you're still free to move, but in most situations you're probably done for by now.

Grade C death rain:



From here it's basically a death screen. You gradually lose control where ever you are, and everything fades to rain mayhem.

Oh, also, I just divided these into different "grades" for the sake of showing it off, in the game they exist as a smooth continuum. Also I realized looking at the gifs that the grades A and B look very similar despite having different effects, so I'm tuning that now.

Now to hook these up to some sort of progression that happens naturally in the game!





   jamesprimate on May 22, 2015, 03:09:18 PM:

impending real deal death rain will have other significant tells as well, creatures hide, the screen darkens, the palette changes, etc etc., so shouldnt be that confusing to have some occasional dynamic light rain. plus, the player SHOULD be nervous about the rain! the initial reaction you describe is exactly the idea! the rain should be this constant looming existential threat, and im hoping that even as the player gets deeper into the game and understands the mechanics, the dynamic light rain instills a sense of dread, double checking to see if the other tells are there, etc. And if/when it fades out, a huge sense of relief is felt. thats the idea at least!

Quote
I'm a little confused because I seem some regulars posting like they work on it, yet other times post like they're seeing udpates for the first time.

we live on opposite sides of the planet, so you are right: sometimes the first time actually seeing some element implemented is on TIGS! works just as well as slack or basecamp (more reliable in some ways), and way more fun too Smiley





   JLJac on May 23, 2015, 03:22:37 AM:

@Christian, thank you very much! The encouragement means a lot!

@Teod, that water seems to be tile-based rather than particle based, and something along those lines is not out of the question. Just want to mess around with the visuals and make sure it's actually needed first - it would be a pretty huge project regardless. As for the light rain, there's not really a big risk of mixing it up. The actual death rain announces itself with screen shake and rumbling before it arrives (in the lingo build only that, no rain buildup) so it's probably the shaking you're going to rely on for knowing when the death rain will arrive rather than the slight rain effects.

@tortoiseandcrow, on the rain timer, that's not entirely settled yet, but will be very easy to tune. James is in favor of randomized rain cycle length, but I'm a little more hesitant. Pros are that it keeps you on the edge of your chair, and that it goes hand in hand with the procedural nature that much of the game relies on. Pros for having it be a set time (or randomized within a very narrow limit) is that then you will gradually start to learn how long a cycle is, which feels like you would be internalizing a bit of slugcat instinct, which is cool. We'll just try both, I think!

@Slader16, the annoying dev answer is that everything does, to different degrees. The less annoying dev answer is that I don't quite know yet - so far it seems to be running fine with creatures in a connected world, but I have more water effects etc that I want to experiment with, so I'm not quite there yet.

Also the performance is different between my dev environment in Unity and the compiled and finished executable, which sometimes causes some confusion. My current idea is that I will use the slower performance in the Unity editor as a sort of development "handicap", whatever I do should be playable there in order to make sure that the executable will also be playable on slightly slower machines than mine. However, sometimes the Unity editor has weird slowdowns that doesn't seem to have to do with anything - the game gets framy in just a single empty room with the player in it. It might have to do with how long the computer has gone without a restart or something like that. To make it even weirder, the fps display in Unity doesn't seem to know of these weird slowdowns. Currently I have a little bit of "ghost slowdown" like that, so it's hard to know about the rain performance until I grit my teeth and go through the horrible effort of actually restarting my computer  Cheesy





   jamesprimate on May 23, 2015, 09:55:15 PM:


I think variable within a given range might be the best of both worlds (say, 8 to 10 minutes, or whatever it ends up being). You would eventually learn the minimum amount of time, and every second you push it after that is risk/reward.

yep, this is my thinking exactly. i mean, obviously you cant have anything approaching full randomization, that would be unfair and awful to play. the regions are setup in a way that you can find food and navigate between shelters within a certain time-frame, and so the randomization im thinking of would be a fuzzy border around that to keep you on your toes. if we could do it on a bell curve, where every once in a while you get some more extreme effects, that could be cool though. Blend that with the dynamic light rain weather patterns and you've got some potential rain PTSD brewin!

Also Joar is talking about some some subtle experience-enhancing stuff that could potentially be hidden within that variability too, so i hope it winds up working out that way!





   JLJac on May 25, 2015, 01:03:47 PM:

#shelters, I'm basically agreeing with you guys' reasoning - for world building purposes they should definitely close, for gameplay reasons they should definitely not. Like hypedupdawg points out, the idea is that they should not really feel like they're designed for you - nothing in the world is. That said, looking at them it seems reasonable to assume that they are built as shelters, which they can be without specifically being built as shelters for you. This is world building stuff that is a bit fuzzy, and I don't want to explain or make explicit too much about the world. I think though that maybe we can sort of walk a line where not everything needs a very reasonable explanation - one of my favorite games is Matt Thorsons "An Untitled Story" a strange metroidvania where there is a million things throughout the large world that doesn't have an explanation, little hovering sparks that you can jump on for example. It's all very weird and if you start thinking about who placed the little sparks everywhere and why, you can't really come up with anything reasonable except "the game needed to work". STILL, the world feels really good, because it follows its own logic rather consistently. There's a ton of gamey stuff, but that just feels like the way this particular world works.

Rain World is perhaps a world that attempts to approximate physical reality more closely than An Untitled Story, but I think we must count on at least a little bit of lea way like that in this project too. There is a ton of weird stuff going on already, the shortcuts being the most notable example (you crawl into a thing, become a couple of dots and tick away through some kind of pipe until you pop out elsewhere, wtf? Not to mention all of it being 2D!!) and some of these will just have to be made a part of this world - once they feel like a natural part of the world they won't be jarring any more, and might even add to the experience by setting this world apart from ours.

Right now the shelters and the region gates trigger the same way - you run to a specific spot, and have to stand still for a couple of frames for them to activate. This is a little piece of logic, but it obviously doesn't make much sense from a physical or technical point of view. A motion sensor would've rusted, right... This is more the game's logic than anything else, and you could even argue about whether it's canon - maybe in the World of RW it works some other way, but in the Game of Rain World it works this way, similarly to how Master Chief probably will lose the bullets left in a clip if he reloads in the World of Halo, but they've excluded that part from the Game of Halo. Really fuzzy grey areas here!

@easternDragon, maybe, yes, don't know, yes! Saving might depend on how rough serialization etc is, so it's a technical thing. It's obviously going in sooner or later. Spears disappearing should definitely be fixed! Fun bug trivia - actually they don't disappear, they turn into rocks while remaining stuck to the creature, but because most creatures are black and the rocks are also black you don't see them... Vultures through short cuts, I don't know... James and I never considered it a bug and we rather like it, but no one else seems to, so maybe. Region gates should definitely be in, that's basically the big thing with this build we're working on!

@New peeps, hi and welcome! Thanks for being interested Smiley





   JLJac on May 25, 2015, 01:24:37 PM:

Update 430
Have the rain hooked up to the game now, so it goes through some different stages of death rain according to a semi-random pattern. I don't sweat it too much about a little bit of randomization maybe being unfair, as if you're out and about as the rain timer reaches zero you're on borrowed time anyways - you should basically be thankful for each extra second you get  Evil The rain has two distinct fade in behaviors, the more common being that it simply transitions from normal rain into more and more intense rain until you have the death rain. The other one has a "calm before the storm" moment where everything suddenly turns still and quiet, and then instead of fading through normal rain you will first get singular death rain drips which turn more and more dense until the wall of water strikes. I think this latter one will be really cool with the sound!

Now I have moved on to flash-flooding of underground rooms. The game recognizes three death rain modes, "rain", "flood" and "flood and rain" - the first two are self explanatory, the latter is for semi-underground rooms where you might want to see rain coming down through a skylight or something, but you'd still want to rely on flooding to actually off the player as the room is too underground-themed for it to make sense with the rain drips in front of the terrain and all that.

Flooding is going okay - I have moving water surfaces, which took a bit of work to adapt stuff (mostly the waterfalls) to work with, but now it seems to work. Where I've run into a bit of resistance is with rooms that don't have any water in them to start with - a bunch of things are uncomfortable with water suddenly being added to a room for various reasons. I definitely could add water to all rooms, and just have it hibernate off screen or something until the flooding is about to start, but that would seriously mess with my sense of cleanliness haha!

Another interesting challenge is that it seems like a Futile sprite with a shader that runs a grab pass will run that grab pass even if the sprite is turned invisible, which creates a bit of trouble. Basically the level sprite and the water sprite use the same grab pass, reading from the same register. The rain effects are supposed to do their own grab pass after that, but also write to the same register to save some memory. This has been working fine so far, but with the post-startup added water the order seems to be jumbled, and the water renders after the rain with the wrong stuff in the grab register, turning it opaque. Fun challenges!





   jamesprimate on May 26, 2015, 01:07:36 PM:

Honest question: is there a point where there is too much content? No, right? Like, as long as a good portion of it is optional, then it's there for people who want to explore the world, but doesn't bog down the casual player. Interested to hear your thoughts.





   JLJac on May 26, 2015, 01:46:28 PM:

Also the super mega amount of content is mostly in terms of rooms, when it comes to creatures we have a pretty manageable amount - not necessarily by choice but because I can't cram them out fast enough hehe. So it seems like what we're going towards is a very large world with not quite as many (species of) creatures in it, for good or for worse. This definitely creates the risk that people will find the world "dull" as there's a lot of rooms, but not a lot of variation as to what you actually find in it. However I think we have some measures to steer clear of that - first of all the region system, where the regions are not too huge in themselves and they each provide some visual variation. Then to that comes that many of the rooms are interesting in themselves, you'd want to explore them for the sake of it, Knytt-style. And then we have the set-pieces, which will be a boon to the explorer every now and then. So I don't think we need to worry all too much, but hey, who knows!

If it does become a problem that the world is too big, I think you could pretty easily hook up the regions with a few new connections to solve that. Like, if each region has just a few "highway rooms" that connect its region gates, that would effectually make the world smaller, and then the other rooms would exist more in the periphery to be explored or not. That's sort of the idea we're already working with right, just a bit more extreme?

Update 431

Now I have the three game over modes working, rain, flood and floodAndRain. Each of them exist and work, but I don't yet have a system for how to decide which will occur in which room - that leads into a small can of worms which is some kind of interface for manipulating room-specific settings. I've also connected them with sound triggers, so James can get started on that. We have run into a bit of a catch 22 with some of the sound stuff that requires more sophisticated code - what generally happens is that I ask James if I can get the sounds in advance because I feel I need them to tune the sound manipulating code. Then James tells me that he can't really work on them until I've placed the triggers so he can see how they behave in the game... I think the solution we're gonna roll with is that I put in a simple placeholder behavior to get James started, and then when he has some material I can go back and do a bit of tuning. We'll see how it works.

Other project of the day has been hooking the vulture up with sound triggers. Making the woooosh loops for the wings was a lot of trouble, but now I'm pretty happy with how it sounds using a placeholder sound. There's a sound trigger for when the hard (metal/glass?) feathers bump into terrain, which pitch-shifts according to feather length, which sounds pretty cool, I'm really looking forward to what James comes up with for that! There are a few triggers left to be placed, then I'll try to get a few water interaction sound triggers in as well before shipping it to James so he can get started on sound stuff after finishing the Shadow Urban region up.





   jamesprimate on May 26, 2015, 11:59:59 PM:

probably rejected RW track 31 https://clyp.it/dwrl0wgk





   jamesprimate on May 27, 2015, 12:16:31 AM:

oh there is still plentyyyyy of time left for dev. so dont think ill let him get off so easy on the creature bestiary XD

also, its not like each creature has to be MIT CS research paper level. hes been enthusiastically tackling the hardest ones first, but sprinkling some easy to implement / dum AI creatures that flop around will add a TON to the atmosphere but shouldnt kill us with time.





   JLJac on May 27, 2015, 12:32:52 PM:

Oh those are awesome Chris Smiley Love the little slugcat face! Suburban, Drainage System, Heavy Industrial and Sky Islands (or Chimney Canopy, but that palette is the Sky Islands palette now, there has been a little switching around). I know them all too well by now!

Today I don't really have a good update for you guys, the work day has not been going amazingly Sad I started out by finishing the vulture sound trigger placement, and then moved on to water sound trigger placement where I got stuck because my sound engine has become a convoluted mess. So I cried to James about that for a while before giving up, had lunch and walked the dog. If I didn't tell you guys, I've moved from NY to the swedish country side, and NY problems have been replaced with swedish country side problems - long story short the dog chased a cat up a tree, in the middle of the woods. It was a really tall tree and it seemed the cat couldn't get down, why I spent most of the afternoon in angst over the cat in the tree, and attempted a very failed rescue mission involving me climbing up with a sports bag that the cat did not want to get in. Don't worry though, last time I returned to the scene there was no cat in the tree and also no dead cat in the perimeter below the tree, so the cat seems to have been able to climb down after all. I basically had the same amount of trouble as I usually have with my digital little animals, just with meat space animals instead...

Sooo, I finally got back to the grind, where I've gotten started on an interface for changing what rooms will be flooded and what rooms will be rained on, and it's going quite well so far. This interface will also allow for some other room settings such as palette fades etc, that are well due by now.

In the mean time, James has been finishing up Shadow Urban, and I've given it my first spin! Don't want to say too much as we decided that this would be our semi-secret region, but I can say that it's quite beautiful and really creepy at times :D





   jamesprimate on May 28, 2015, 08:37:12 AM:

probably rejected RW track 31 https://clyp.it/dwrl0wgk

Okay, definitely buying the soundtrack now Grin - if I buy now on Humble, I presume the content will be Steam accessible as well as the main game?

Edit: @jamesprimate - PM'd you

ahh thx thx! Yes indeed, the humble will include steam keys!

we rarely post the link, but for people who are interested: https://www.humblebundle.com/store/product/rainworld_earlyaccess_soundtrack/FpSDLkj8s





   jamesprimate on May 29, 2015, 04:13:09 AM:

is it that bundle listed above? if so, it certainly should give you access! use this: http://www.humblebundle.com/resender





   JLJac on May 29, 2015, 12:21:25 PM:

Update 432
Woho! The last couple of days I've been working on a new part of infrastructure for the game which will be very important for the visual aspects. Basically the game consists of a bunch of rooms, as know. The pipeline was that the macromedia director application spit those rooms out in an incredibly slow rendering process, and generally everything that had to do with that room specifically had to happen in the director editor and then go through that rendering. Now I have set up this new separate system which will mostly be supporting the visual stuff. Basically it's a second .txt file that contains data on what palette the room is using, if the room is considered by the game as an outdoors or indoors location, and other data that will come along such as the placement of cosmetic objects. There's a little editor interface for this stuff in the Unity application, where you can load and save the settings etc. Also there's an inheritance system in place, where you can create setting templates for the regions and have the rooms in that region inherit from the templates. So you can do stuff such as setting up a region template that contains the palette for a region, and then all rooms will have that palette unless you specifically tell a room to override it.

There isn't all that much settings at this point, but the idea is to start filling that stuff in now. Thing I have in mind is for example region-specific fauna of little cosmetic insects, palette fades as you move through the world, and so on. Placement of ambient sounds and different game objects will also branch off of this system in the future.

I've passed all of this over to Prime Content Creator James Primate, so he can start working with his regions. Before sending it over I've been trying it out a little myself though, and already I think there is some cool stuff that can be done. For example I've made it so that the interior rooms in Sky Islands have a different, slightly shadier, palette than the exteriors. There's going to be a lot of little graphical touches like that coming up!

Anyhow, with the system up and running I can now move on to more specific cosmetic stuff. Hope to have something gifable soon!





   jamesprimate on May 29, 2015, 07:52:29 PM:

we are *terrible* businessmen





   jamesprimate on May 29, 2015, 08:18:54 PM (Last Edit: May 29, 2015, 08:36:39 PM):

oh, we have a website: http://rainworldgame.com

and like everything else it is absurdly out of date. but its like... we could spend a day updating that or we could do *actual work*, and with the crazy impossible deadlines we are slaving for, you can see what our choice tends to be.

but that said, there is a plan! (sort of.) If a couple of things come together we might be doing a re-brand for E3, fingers crossed. If that winds up being the case, updated website stuff is definitely in order. Also, a little bit further down the line once we start showing off the multiplayer build, i'll be gearing things up for streamers, and that will be our big pre-release push so efforts will be made.

for now though, keeping the head down and grinding it out. Bro Fist Right Bro Fist Right





   jamesprimate on May 30, 2015, 04:48:22 AM:

holy shit! joar sent me a build with functional rain / flood cycle. its IN-CRED-I-BLE O_O





   jamesprimate on May 30, 2015, 04:55:30 AM:

i think i want to try to go all out and implement sound for it before doing any vids, for MAXIMUM IMPACT. because it sooooo deserves it.

literal tears of joy  Tears of Joy





   JLJac on June 01, 2015, 01:38:07 PM:

Further somewhat unexciting stuff - the "effects" framework is working with inheritance and templates and all of that, now I'm moving on to palette fades, a functionality we've been talking about for a loooooong time in which James will be able to make certain rooms or screens have a blend between two palettes, to make soft transitions between regions and sub-regions. Seems to be going well enough! I think I will be butchering the old palette fade code though as that will get in the way, and create a new two-dimensional system where the palette status exists as a coordinate between a palette A and a palette B, and the "lit" sub-palette and the "shaded" sub-palette that it switches to as the rain gets closer. Sounds more complicated than I expect it to be, by tomorrow afternoon I think I'll have this down unless I run into some major unexpected trouble.





   JLJac on June 02, 2015, 12:24:58 PM:

Okay, got palette fades working and am now pursuing garbage worms functioning as supposed to. Sorry about the state of the devlog, we're pushing for a new build which as usual means less "adding fun stuff"-mode but instead "getting the previously added stuff to actually technically work"-mode.





   jamesprimate on June 03, 2015, 05:53:03 AM (Last Edit: June 03, 2015, 06:36:47 AM):

I did something I've never done before, and I bought the alpha. There's a lot of tiny little control & level design details that jump out to me, but I don't want to sully the enthusiasm of this post with things I'm sure you'll turn your attention to when it's time to polish gameplay. Even in its current state, this game is exquisite. I've been having a lot of fun exploring the world already, and I can only wait in excited anticipation for the next build.

You've got something beautiful on your hands here.

thx thx thx Tears of Joy we very much appreciate the encouragement! yep, its the alpha (or one of the many many alphas at least). if you bought it a while ago, might be worth using the humble key resender to see if there is a new version up: https://www.humblebundle.com/resender

one of the reasons we've been pretty quiet about posting pre-order links, etc, is that doing all the customer service stuff associated with it is a HUGE time sink, and we just dont have time to do it properly right now. So sorry if thats a nuisance for anyone!

that build was done for pax east, so is around 3 months old. i did a playtesting event with it last night (since its still the most stable), and man is it weird to demo old builds! all i wanted to do was show off the buggy new stuff, but alas its not ready for public consumption yet. E3 build is going to be quite a quantum leap of advancement. Joar is on a dev rampage!

Oh and just to spice things up a *tiny bit* from our boring text posts, Joar did a bunch of new procedural plants recently to give the region flora some diversity. These climbing vines from shadow urban are some of my favorites:


detail: https://i.imgur.com/WFIDwTg.png





   jamesprimate on June 03, 2015, 05:58:42 PM:

i think were just showing at the adult swim booth and indiemix? idk, ive been so busy with dev i havent been keeping up on the business end tbh.  similarly, neither Joar or myself will be *actually physically* going to E3. too much work to do and we're saving our budget for actually finishing this thing rather than flights to LA and hotels!

yeah were boring, i know Tongue





   JLJac on June 03, 2015, 11:44:15 PM:

Check out this weird plant!






   JLJac on June 04, 2015, 01:23:42 PM:

Update 433

Working on visuals. How do you guys feel about this? Better?






   JLJac on June 05, 2015, 12:00:32 AM:

Thanks for the feedback guys! The darker palette is because I'm doing a thing where "inside" or "underground" rooms have an alternative darker palette, but I might have gone a bit too far with that. When it comes to how "clean" it is, that's a weird balance; obviously I want it to be an image of a dirty place, but it should be a visually clean image of a dirty place haha!

I tried taking your comments into consideration and came up with this, what do you think?






   JLJac on June 05, 2015, 12:31:09 AM:

Slightly subtler still:






   JLJac on June 05, 2015, 12:54:45 PM:

Thanks tortoiseandcrow for the very well thought through and argued opinion. When you make the comparisons like that I actually get a bit of cold feet. I really do want some dirt and stuff though, and the graffiti was an important world building aspect to me. I wanted to use it to set a tone and to tell little bits about the world, perhaps. Your input makes me realize that I have to think about it more though, I can't just slap it on top or I risk ruining what I already have.

Maybe placement could play a part? Maybe it's preferable for decals (be it dirt or graffiti or rust or other) to be confined to some sort of definable geometrical object rather than existing everywhere as an ambient?






   jamesprimate on June 05, 2015, 02:43:41 PM (Last Edit: June 05, 2015, 02:54:11 PM):

i havent been posting because tortiseandcrow keeps making all my points for me XD

we've been discussing this all in depth the past few days and i think a good part of the problem is that the layout and structure of the test room just isnt really suitable for what joar wants to do with the large graffiti. when i did these rooms originally i wasnt taking into consideration the yet-to-be-built decal editor, so i saturated them with interesting visual elements so they could stand on their own. trying to just slap a decal on now isnt going to work, as its just competing for attention with the structure, lighting, effects, depth, tile work, etc etc. Its not the graffiti itself, its how its used in this context that looks off. I think everybody would agree this looks awesome:



the obvious solution from my perspective is to work in some new rooms that take into consideration the graffiti visual element so we can nail that look, and then add a bunch of smaller graf element details to surrounding rooms to tie it all together. The suburban region specifically has a lot of re-working to be done, and even an entire sub-region to add, so this is all part of the visual polish plan really! And this doesnt mean "here is a randomly convenient wall for graffiti", but more just some rooms that aren't already so visually saturated so we can get the look for the graf elements nice and tight without 30 layers of clutter getting in the way.


We both agree that this is something worth spending some time to fuss with and get right, so considering the rush were in to get an E3 build put together, were thinking that now is probably not the right time to dive too deep into all that. so... TO BE CONTINUED! next posts will be all about boring technical things like getting slugcats to stand on poles better, soooorry





   JLJac on June 06, 2015, 10:37:27 AM:

Placing sound triggers, placing sound triggers, placing sound triggers...

@hypedupdawg, nah, not really possible, the level images are created by the level editor and then rendered to a static texture. One of the big technical hold backs we're constantly fighting with!

@Jimym GIMBERT, whatever built this place had two distinct alphabets, as you can see in the neon signs. The graffiti generally uses stylized versions of the same alphabets. I'm going to include some typographic graffiti because I like the look of it, but there'll also be some graffiti that is more "out there", such as the big spleen or whatever in that picture James posted. I want to explore that direction more, to create that sense of "why the hell would someone draw this!?" in order to further make you empathize with the slugcat's semi-animal nature; it can understand that the signs and images convey some sort of meaning, but can only have a very dim and confused grasp of what that meaning would be.





   jamesprimate on June 06, 2015, 11:37:57 AM (Last Edit: June 06, 2015, 12:10:41 PM):

YES. the "techno mayan / aztec" design influence is something weve discussed a lot, and have plans to go more explicitly in that direction for future regions. good catch and gooooood glyphs!




Quote
Speaking of gibberish in games I can recommend this article on RPS (the comment section is particularly interesting).

OH WOW, good link, that game looks incredible O_O im getting it immediately





   JLJac on June 07, 2015, 12:40:11 AM:

Remember this?



Don't really know, the mayan stuff was pretty cool but doing a switch would mean replacing a looooooot of assets. I think James' enthusiasm would be curbed  by the outlook of having to re-render every room with a neon sign in it (which amounts to... every room) >__<

I already have two fictional alphabets going, and I absolutely won't introduce a third without cutting one or both of the old ones out. They were however made sort of quickly, a long time ago, for a game I imagined would be a month long side project... So maybe it is actually time to switch them up. It wouldn't need to be too harrowing, as I could just replace the neon sign assets but have the same names for them, and then they'll be naturally replaced as the rooms are re-rendered for touchups without us really having to do anything manually. That assumes that we'll re-render every room at least once more, which I think is probably the case. Otherwise there's a mass render function in the editor. So, it'd be annoying, but it's not entirely out.

Here are the current two alphabets:



And here's a piece of graffiti with the letters clarified:



One thing I could do to get a tribal/mayan vibe going without replacing the alphabets, is to work more with the pictographical "proto-comic" sort of layout many ancient cultures seem to have employed. Like, images that are in some sort of chronological sequence with small bits of text flowing in and out of it. That could be really interesting to mix up with a graffiti aesthetic!





   JLJac on June 07, 2015, 03:02:56 AM:

Update 434

I got tired of water in dark areas just being a black blob, so I got started on some darkness+water+light source interactions. First, a surface reflection:



And an underwater light source shader. This one is probably gonna get its fair share of tuning, just like the ordinary light source shader already has.



I'm digging the "beaming" quality of it, but it's a little too blurry and fuzzy to go with RW's art style, that will have to be straightened up somehow. But a good start :D

Yay shaders!





   jamesprimate on June 07, 2015, 08:53:56 AM:

LOL, I didn't mean REPLACE ALL CURRENT ASSETS, just move in that direction for new assets when we do the stone heads subregion  Tongue

Love the new darkness water shader though!!!





   jamesprimate on June 07, 2015, 12:11:25 PM (Last Edit: June 07, 2015, 12:17:08 PM):

Joar has mentioned the palette fades a few times, so i figured its time to show a bit of whats going on with that. this is a first pass at the transition into the shadow urban region:





this example could still use some work to the blends, the sunlit rooms could use to be toned down a bit (there is a whole little subregion devoted to that look), but it seems like the palette toolset is going to have a big impact! in polish phase i plan on going back and adding subtle touches of this through all the regions to indicate things like depth/height, inside/outside, and blend the palette transitions between the regions a little. im really looking forward to it!


edit: ehhhh, youtube image compression is totally borking the fades and introducing weird colors / artifacts. they are WAYYYY more subtle than that in game. but you get the idea.





   jamesprimate on June 07, 2015, 02:43:19 PM:

these are both some of the fascinating mysteries to be solved in the upcoming new game Rain World™!

sorry, I forgot there was an embargo on SH region stuff for a reason  Facepalm






   jamesprimate on June 08, 2015, 09:51:23 AM:

i love this, especially the descriptions. cheers hypeupdawg Toast Right





   JLJac on June 09, 2015, 02:26:37 AM:

@adge hi, welcome! Yeah those pillars are perfect  Shocked Protruding spirals is such a horribly complex shape, though... I might give it a try :D

Update 435

Secondary light and light oversaturation:



Quite happy with how the bounce-off light brings out the depth in the room  Smiley

Also, have I mentioned that I've been developing this snazzy dev interface?





The bounce-off light works by placing ambient light sources where the light hits. You can see that the lights are "environment" - this means that they will pick up their color from the environment they're placed on, and "Sun", this means that they understand to fade in and out with the sun.

Some lights are the same as the old light sources you've already seen, but some lights are "flat", which means that they're basically just a radial gradient rendered on top of everything looking a bit like a lens flare or a bloom effect. However they're rendered below the sunlight oversaturation shader, which makes for some interesting interactions.





   jamesprimate on June 09, 2015, 11:26:44 PM:

ah! yeah the rain world email has been going nuts because of it. as far as we (and adult swim) know, its just randomly there?

not entirely incorrect though; it is "coming soon", relatively speaking, for instance, compared to the heat death of the universe etc etc. gabe is just playing the long game





   JLJac on June 10, 2015, 09:59:28 AM:

Update 436

A flare ... fruit? thing that you might get your hands on in the dark regions.



These have the benefit of allowing you to get a split second of vision on a frustrating dark room, and can also be used offensively. Deep dwellers that are shy of light are obviously not going to be big fans, and also I think it could be fun if ordinary creatures such as lizards could be rendered blind temporarily or permanently.





   JLJac on June 11, 2015, 01:22:23 PM:

@adge, thanks a lot :D I'll try to make something inspired by that next time I get around to making assets. The resolution will be a problem so I'll probably have to go pretty big. We have a region planned with some more tribal stuff, where I think some big columns etc would fit right in.

@Teod, I think of it as a chemical fire/light emission, similar to when you put flame to magnesium or something. But again, cartoon world  Wink

@tortoiseandcrow, when I implement enemy hearing I will also give their vision some tuning and combine those into a little Stealth Push. Right now vision is entirely binary - for a creature with a limited cone of vision it does that dot product check, some creatures have a distance cap, and then it checks if there's terrain in the way - but all of these are either YES or NO and it needs all YES's to get a visual. My idea for what I want to happen in the future is that a bunch of conditions will be considered as floats and combined. Such conditions could be camouflage, muddy water, and darkness. The factors should be able to interact (by multiplication or subtraction) so that you could stay hidden more easily if you're smart about it.





   jamesprimate on June 13, 2015, 08:14:50 AM:

some fresh new video of alpha150607d for E3:






   jamesprimate on June 13, 2015, 01:00:55 PM:

awww thanks guys, seriously!  Tears of Joy its been a rough one, but seeing peoples reaction to the video (and a little bit of destructiod hype!) seriously makes my week: http://www.destructoid.com/new-rain-world-footage-justifies-the-title-293879.phtml





   jamesprimate on June 13, 2015, 09:05:59 PM:


The individual sfx and music from the video are great as well - how is sound implementation going overall?

thx thx! i appreciate it! sound implementation is going pretty well so far, though we only have 1 of the 3 planned audio systems in place right now. SFX seemed like the obvious way to start out, so thats in now, but we are also looking to have dynamic systems for both atmospheric (ambient / weather audio) and music. atmospheric is probably next on the list, and although the music is hugely important from my perspective, i think the implementation of that aspect will wait until the narrative elements are in place and we can have that all work together tightly.

it should be mentioned that im going way, waay, waaaay over the top for the audio stuff. as i see it, its unlikely ill be in a position to be this impractical with depth of content and level of detail again, so im going all out.





   jamesprimate on June 14, 2015, 09:22:56 AM:

PC Gamer Hype! #slugcatlife http://www.pcgamer.com/you-might-need-a-brolly-for-this-new-rain-world-footage/

Brolly DLC confirmed





   jamesprimate on June 14, 2015, 03:25:30 PM:

wow i guess people liked this update! http://www.rockpapershotgun.com/2015/06/14/rain-world-trailer/





   JLJac on June 15, 2015, 12:00:42 AM:

Thanks dude! :D

Yeah we have been thinking about the logo too and there has been a bit of movement in that area lately, we hope to have something to show soon!





   jamesprimate on June 15, 2015, 11:26:26 AM:

thx thx!

Quote
I wonder how Rain World would look after another year

ahahah dont give us any ideas! its already late enough XD





   JLJac on June 15, 2015, 01:23:15 PM:

Update 437

Working on lizard hearing. It seems to be making the game pretty brutal, but it also opens up for more fun sneaking scenarios such as throwing a rock to trick the lizard into thinking you're somewhere you're not, and of course crouching and being tactical about your jumps.



Currently I have a system where the creature's noise detection ties in with the already established visual tracker. When it hears a sound it will go through the creatures it knows to be in the room, and tribute the sound whichever memory of a creature is closest to the sound source. Then it will update its perception of the creature to that new spot. A fun scenario this system supports is a lizard that has fled from a vulture but hasn't seen that you are in the room - if you make a bunch of noise without showing yourself it will assume it's the vulture and flee from you haha.

Next step is having a little "go check out what made that sound" behavior for situations where the creature does not have any idea what might have made the sound, such as the standard stealth game situation where you throw a rock to have a stationary NPC go investigate and move out of your way.

Also I'm going to need to work a bit with the lizard animation to attempt to communicate when the lizard has picked up a sound. That's going to be a fun challenge haha!





   JLJac on June 16, 2015, 09:29:22 AM:

Yup, there should probably be some little error margin - especially if the lizard is just only at the edge of the sound's range and barely heard it. Could probably do this simply by displacing the perceived sound source a bit in a random direction in those cases. I think I'll try it out, but while it is realistic it also introduces yet another random factor into the game - something of which there's already too much. If the game is completely unpredictable it can't really be played because each action may have any outcome. If it's deterministic however you can count on stuff to work in a specific way - for example jumping on a floor above a lizard and have it go to that spot to investigate, rather than going somewhere else. So it's a balance, but yeah, there should definitely be a little bit of fuzziness to the hearing.

Haha yeah we want to avoid the exclamation mark if we can! We have a bunch of other things going on, none of which are as clear as an HUD element, but I think that all of them combined will be enough to make an experienced player know their stealth state. A lizard that has spotted you starts emitting bubbles from its head, the head is shaking, the lizard starts moving much faster and opens its mouth. I haven't yet gotten around to the actual lizard vocalization, but that's going to play a big part as well - there'll be hissing and screeching. One thing we've been talking about is subtle sound cues for "hostile creature spotted you" and "hostile creature lost track of you" etc. Not a loud ugly sample, but just subtle little effects that can weigh in with the rest of the little signals the game gives you to help you form an idea about what is going on and how bad a situation you're in. This won't be very clear to a new player compared to a HUD pop-up, but hopefully you will grow into it. This is sort of where the player's progression is at in our game - we don't have levels and barely any equipment you can carry with you, instead it's about the player slowly learning how to interpret and maneuver the signs and signals of this fictive world. Or that's the idea at least, let's see how well we do haha!

Update 438

Further messing around with hearing. I got the "go check out what made that sound" behavior in for lizards, and then had to do a lot of tuning to make them less confused about everything that was going on. The main situation was two lizards fighting and me running by on a floor above - the challenge was to make them understand that they each saw the other lizard right in front of them, and thus conclude that the sound above probably was coming from a third entity which might be worth checking out. After some fussing it seems to roughly work! Also crouching mode is now silent - actually completely silent, which might be a bit too much. But it's a lot of fun to trick a lizard by jumping in some spot or throwing a rock, and then quickly slithering away along some clever route in the crouch mode.

Also, we're starting to think about a new region.



James has been trying out some architecture and layouts, and I've been messing a bit with a palette and some settings that are going to be needed, such as wave amplitude settings for the water.

The waves don't look very amazing at this point, a bit too regular and machine-like. I think that some light randomization might help a lot.

This region is going to be ocean-inspired (maybe it's the actual ocean, maybe it's just a very large cistern or flooded area, depending on if you want to imagine this industrial complex as something city-sized that ends at the shoreline, or something larger o_O).

Contrary to Drainage System where the water elements were coupled with some claustrophobia in narrow underground pipes, this is going to be about large spaces where you can swim freely, which I think will be a lot of fun. Part of the gameplay will happen up in the structures sticking out above the surface, part of it down in the actual water, and obviously you will be safe in neither place.





   jamesprimate on June 17, 2015, 04:28:00 AM:

sorry, neither of us are there so we dont even know! there is supposed to be some sort of gamespot stream preview today too, but i dont have links for it yet Tongue





   jamesprimate on June 18, 2015, 03:22:11 AM:

thx! sort of funny weird that people are doing interviews, playing it and partying and all that jazz while were here grinding away like we usually are. if anyone here is into gamedev for that rockstar element, i'll use this opportunity to urge you to reconsider XD

anyway, back in basement reality: already pretty excited about how this Shoreline region is looking



detail: https://i.imgur.com/OP5RsPs.png





   jamesprimate on June 18, 2015, 11:33:00 AM:

sorry, neither of us are there so we dont even know! there is supposed to be some sort of gamespot stream preview today too, but i dont have links for it yet Tongue
Here it is
Gamespot preview




Was he making some of the stuff up? I don't remember reading anything about breeding in this thread (although that would be totally rad to have).

And he killed lantern mouse and called it a spider. Sad

LOL, probably yes to both *sigh*. Or rather probably more a case of me briefly describing things on a noisy Skype call a few days, and then having a person need to fill 10 minutes of time live on air without much preparation. It's hard enough to do when you've been developing the game for 4 years! Certainly not happy with it, but at the same time it's not entirely unexpected either. The game is huge and unwieldy, so this is what we get for not presenting it ourselves this time. Anyway, a good lesson to learn. It won't happen again!





   jamesprimate on June 18, 2015, 03:21:21 PM:

I'm going to assume that since there's going to be an entire water-focused region, you guys probably have some ideas for aquatic life beyond just leeches...

Indeed! Joar has some really cool stuff cooking, so I won't spoil it. High expectations for this region!





   jamesprimate on June 18, 2015, 03:59:15 PM:

oh, yeah secrets for sure, but dont worry he'll definitely be showing off some of the fun stuff here too. i just meant i didnt want to steal his thunder for when he post progress some fishy creature progress in the next day or so :D





   jamesprimate on June 19, 2015, 01:26:04 PM:

ewwwwwwww these are all really good suggestions. nothing elicits that surge of primal fear like large weird things moving around underwater  Waaagh!


"RUN, SLUGCAT! RUN AS FAST AS YOUR SLITHERY, FURRY SLUG BODY WILL TAKE YOU!"
 http://killscreendaily.com/articles/latest-gifs-adorable-rain-world-confirm-there-death-rain/


im super excited that this little update is getting so much attention. when youre in the trenches its pretty hard to see how much progress is being made, but the reaction to this update and vid has been so encouraging. its just what we needed as we head into this next grind  Toast Right





   JLJac on June 20, 2015, 12:06:40 PM:

Update 439

I'm working on a new creature, a fish! Not a backer creature this time, but as none of the backer creatures were aquatic we felt we really needed to go outside the list with this one. It's a quick swimmer and it hunts by bumping into its prey knocking the air out of its lungs and keeping it below the surface until it drowns. You will be able to grab it and use it similarly to the cicada and lantern mouse, I'll show you some gifs once I have a little bit of skin going for it.

Aside from that I started on a fog shader for the new region:



It's quite tricky because I want to create the impression of depth, while at the same time keeping the color count (or the perceived color count) somewhat under control. Still needs a bit of tuning for sure!





   jamesprimate on June 21, 2015, 05:49:44 AM (Last Edit: June 21, 2015, 07:36:29 AM):

Thanks for sticking up for us! In this instance I think it was just the gamespot crew having the whole timeslot labeled as "adult swim games" rather than any nefarious intent. That stuff gets crazy hectic!

in other news, been working on some HUGE rooms concepts for shoreline region. was legitimately concerned my computer would catch fire and explode, but so far so good! here is a screen from a mysterious island, with fancy new fog shader and everything:


detail: https://i.imgur.com/fSBLpLE.png





   JLJac on June 21, 2015, 12:28:35 PM:

Update 440

The waves looked a bit mechanical, so today I added the ability to add "rollback" waves, ie a smaller wave pattern moving in the opposite direction as the main wave pattern. I think it looks a bit better.

Also I've started skinning the new creature. James and I call this critter "Jet Fish" and its specialty is fast swimming. What the head will look like I'm still sketching on, but I've started on the lower part used for locomotion.



The creature has two strong tadpole-like tails that work together to create an even forward thrust in the water. It's important to the feeling I'm going for that the speed is even, and these two spiraling tails seem to create a plausible constant swimming motion. When jumping out of the water the creature uses water stored in its body to propel itself upward with a jet, and the two tails are just flexing, probably their muscles help squeezing the water out somehow.

The actual water coming out should probably look nicer than this, just not sure how to do it. Perhaps a similar technique to the smoke.

For the upper body I'm not sure yet, I think it's going to have some pectoral fins as the two tails seem to be way better at pushing forward than they would be at any actual steering.





   JLJac on June 22, 2015, 04:51:36 AM:

@Christian haha don't worry, there will be something that can eat you all by itself as well!

@adge, yep, correct! That's how I do tentacles etc, but not everything is triangle meshes. Quite a lot is also hand drawn 1-bit sprites that are rotated and stretched etc, and there is a bit of traditional animation in there as well - for example I might do a bunch of frames for a creature showing it rotated around its own axis, and then I combine that with actually rotating the sprite in code to get a 2-axis rotation. As for the engine, Unity's render pipeline and input are used, but the main loop, the game architecture (what is a room, what is terrain, etc etc) and all the object classes are my own.

@hypedupdawg, the waves are just a sine wave that's applied on top of the physics simulation :S

@Crispy75 haha let's be done before that!

Update 441

Jet fish coming along! Still no pectoral fins, but a body and some eyes. Also they sprout whiskers like carp, which are individualized. Now it looks like a tadpole/carp/squid/prawn - I'm always happy when a creature takes on a style of its own and sort of leaves its real-life inspirations behind.



The eyes switch between underwater mode and air mode - under water they're big with a large pupil, up in the air they become like small amphibian eyes:






   JLJac on June 22, 2015, 12:55:41 PM:

Lol you guys hold me to high standards  Cheesy Thanks for pushing through until it's good though, instead of just accepting any old animation I throw at you!



I sort of agree with this, I'm looking into solutions for making it more like that. I think making the first tail segments very rigid and then have it taper off might achieve something like it.

For the poop propulsion and general grossness, that was actually sort of what I was going for...





   JLJac on June 23, 2015, 11:16:42 AM:

Update 442

Further work on the fish creature. I've also stared on some water splashes, which I know are not really all the way there. It should probably have some sort of highlights on it making it appear less dark - but that is difficult without making the individual sprites more obvious. It's supposed to look like a unified mass of water rather than sprites, and if I add some kind of specular effect in the shader the shader would still only know about the specific sprite it handles, so it would be difficult to keep it unified.



Suggestions?





   JLJac on June 23, 2015, 11:51:06 AM:

Poop fish gonna wreck ya!

Yup, the segmentation is the main problem. Just don't really know how to make a continuous flow that's also flexible. Is this better?






   JLJac on June 24, 2015, 07:58:17 AM:

I hereby retract writing "poop fish" and want to state for the record that it was meant as a joke, never as a suggestion  Cheesy

Update 443



Am I getting there?  Tired





   JLJac on June 24, 2015, 08:47:44 AM:

Cool! Then I'll apply this on the surface splashes as well  Hand Thumbs Up Right Hand Thumbs Up Right Hand Thumbs Up Right

@Wolfgang141, hi, welcome! Those cucumbers are awesome! I especially like the one where you can see how the seeds are propelled by the water.





   JLJac on June 24, 2015, 08:53:25 AM:

Not at all sir, I think this is good proof that you guys giving me a hard time yields good results Smiley





   JLJac on June 24, 2015, 12:15:51 PM:

In the actual game the fish needs to take in water to spray out water, I just gave it infinite water for the sake of the gif. Remember that what you see here is generally tailored to show off the technical progress, not to indicate the canon of the game. So assume that the game will not work like what you see in the gifs, but if you're curios feel free to ask!





   JLJac on June 24, 2015, 01:50:07 PM:

Puh!



Remember in the kickstarter budget breakdown when we said no jet skis? Lies!  Evil





   JLJac on June 25, 2015, 01:46:55 AM:

Hahaha tough crowd >__<

I did some smoothing of the surface, but seriously, now I have to move on from water stuff. Could keep messing with it literally forever...

Also, free willy, gross edition!








   jamesprimate on June 25, 2015, 02:06:34 AM:


Also, free willy, gross edition!





LMAO that's amazing.  Messing with them in the new build, they have so much personality!





   jamesprimate on June 25, 2015, 06:24:51 AM:

from my playing i see procedural fins, whiskers and flippers. they can look pretty unique! not quite lizard-level, but more-so than the current vulture or any other creature so far.





   JLJac on June 29, 2015, 02:43:05 AM:

Update 444

Doing a little stealth/sneaking push. I hope that this, together with the now implemented creature noise tracking will finally introduce stealth as a viable tool to the player.

Basically what is going on is that the old binary laser vision of creatures (is there terrain in the way yes/no?) is giving way to a soft visibility calculation for any position on the screen.

The most basic part of this is that vision deteriorates with distance. But on top of that calculation comes other stuff - for example the lizards have a forward-centered vision, meaning that their vision is better in front of them but worse in the periphery. If the vision is worse to the sides, that means that the target needs to be closer there in order to give a "yes" in the vision check, which causes a bubble-shaped vision cone.



You can probably see that the vision is a bit movement dependent as well - when the player is moving the vision reaches a bit further. This motion dependency for the vision can be set creature by creature, meaning we could potentially have some creature that is virtually blind unless you move, making for some tense Jurassic park-style scenes where you remain totally still as some beast is sniffing around uncomfortably close.

The main factor in the above gif is however a camouflage mechanic, which is here applied to the player when sneaking (basically when crouching). When in sneak mode the player is 50% camouflaged, which is mirrored in the lizard's halved vision range. This is the same mode that makes you pretty much soundless as you move. I hope that these two things combined will actually make sneaking a real viable tactic when traversing the environments - after posting this I will give the game a spin trying to traverse a region and see how it feels.

Also, the vision system allows for using some elements of the environment to hide.




The water has two negative vision bonuses that can be set creature by creature. One is a simple negative that applies if either the "eye" position or the "test" position is under water, basically meaning that a creature might be able to see half as far under water or similar. The other is a negative bonus that occurs if the "eye" is above water and the "test" position is below, or vice versa. This symbolizes the surface itself as being difficult to see through with reflections etc - if you try to look down into the water you might have a harder time seeing what is going on than if you actually stick your head down there.

I don't yet know how this affect performance, but I can actually imagine it being for the better. I have put the super heavy ray-trace at the very end of this whole calculation, and of course only do it if the environmental factors, camouflage etc has not already ruled out that the vision check might be a "yes". So potentially it might save a ray-trace here and there!





   JLJac on June 30, 2015, 01:54:45 PM:

@Christian, yep, all of those are possible! When it comes to creatures with eyes on the sides, that's hard in this weird 2D context, as the sides would be towards and away from the camera. What makes sense from a gameplay and sneak perspective is having the vision be concentrated in front of the creature.

@tortoiseandcrow haha I will do the test run soooon! I'm just way too bad at actually playing the game hehe

Update 445

Made lizards swim. These standard sub-species generally just swim at the surface of the water, and quite awkwardly. But at least they can swim now! It felt really weird to have that strange cop-out with lizards dying in water but nothing else - the game world has been taken beyond that sort of stuff since then. With that out of the way there is another interaction that makes sense, and one less strange exception the player needs to learn.



Also it looks funny!





   JLJac on July 01, 2015, 12:24:21 PM:

@Keith, thank you so much :D Keep in mind that animation != gameplay though O___O

Don't worry, instead of weird chemical death you will be able to have them eaten by leeches!

Update 446

I've been working on a water lizard, it will be salamander or axolotl-inspired in its appearance. During the day I've been setting the creature up and dealt with the various path finding related issues that I inevitably run into. Drawing a head for the lizard took about an hour, bug hunting why the hell it wouldn't go into shortcuts under water took 2, after which I tried several fixes that didn't work, after which I applied a 5 minute fix that I feel like, in the back of my mind, that it might break the vulture. Hahaha. Inheritance is great for the fact that if you solve a problem in one place, you solve it in all of them. The backside however is that if you solve a problem for one of the inheriting classes, you might break something for another one. We'll see what happens.

It's strange how much more time I spend messing with my damn technical issues rather than adding content, and maybe not a good thing. But what to do? I have to get it to work, one way or another. Anyway, now it can enter the shortcut and I'll try to get some cool swimming animation running ~





   jamesprimate on July 01, 2015, 01:23:41 PM:


Also, just a kind of cool idea, but I have been looking at pictures of the Kowloon walled city. What are the odds of having a region like that? Kind of a cramped urban area, kind of like a jungle gym.

spot on! we originally intended to do a Kowloon-inspired region early on, but couldnt get the scale and tile to work right. also, it veered a bit too close to showing the specifics about the previous occupants of rain world, how they lived, etc., so we opted to go in another direction.

How many creatures officially is left to implement?

quite a few, and the list keeps growing. some are going to be really challenging too.  Cry we have our work cut out for us





   jamesprimate on July 02, 2015, 08:23:33 AM:

Yellows! I hope so. Seems like something that will go well in the next region actually.

So ive been quiet the past week or so, mostly because this Shoreline region that im working on has become all-consuming. Im finishing it up now, and minus the narrative-specific rooms that we'll be adding in later, its already over 100 screens... which is a little over 3x the size of the Suburban region. So its *huge*.



That said, it might actually be the tightest region conceptually, and im super happy with how it is turning out. The game mechanic possibilities of open water swimming was just too good to not explore in depth, and that we certainly have! Plus, you can't imply the scale of "ocean" without some serious scope, right?





   JLJac on July 02, 2015, 09:18:42 AM:

So cool looking  Shocked

Just thinking about the sneaking mechanic, where a creature's vision is tied to your movement or stance - wouldn't that mean that if you were sneaking a lizard would not be able to see other creatures as easily either?

Don't worry! This visualization has the camouflage value of the player specifically weighted in, but when several creatures are around it calculates a value like that for each of them separately.

Talking about creatures, are the pack hunting lizards still planned?

Yup, yellows and reds will feature - they're actually in the game at this point, though they don't have much specific behavior written for them, they're basically just pinks with slightly different speed etc right now. But they will get some more attention when we get to the regions where they live.

Update 447

Got some visuals on the water lizard/axolotl! Now I have to give it a unique swimming animation, and it should be good to go.






   JLJac on July 02, 2015, 10:20:32 PM:

Nah we don't have 700 rooms yet, but now the forecast is looking like we'll break through that, and 1000 might not be entirely impossible either if James keeps this pace O___O

But keep in mind that strictly we are counting screens here, not rooms - which makes comparisons a bit difficult. In Knytt a screen is a room I remember correctly, so there the comparison makes sense, but shadow complex is a side scroller where each room is several screens large right, so then the comparison falls apart. Back in suburban region I think the average room was something like 1.2 screens (almost every room was a one-screener with a few two- or three-screeners) but in this latest region I'd say that the number has gone up to something crazy like 3.5 screens per room on average or similar. So despite being waaaay larger than SU I wouldn't be surprised if it actually had fewer rooms.





   jamesprimate on July 03, 2015, 12:00:58 AM:

Hi Fumito Ueda! Nice to see you dropping here  Smiley

Reminds me of Shadow of the Colossus! In the best of ways.

 Tears of Joy you guys...


So with Shoreline, are you guys past 700 rooms yet? Shadow Complex's map was 780 rooms.

Real question is if the Rain World will be bigger than Knytt Underground (1000+ room)
http://i3.minus.com/iKXxdSAe7YUF2.png

quick look says we're near 500, which seems about right pace from current estimations. A couple of these next regions are of a similar sort of scale and structure to Shoreline, so 900ish seems very possible.

Worth pointing out though that the larger-scale regions are generally much less complex from a terrain standpoint. In a lot of ways, the game layout is such that there are "dense rooms designed for things to happen in" and "transition rooms that give an impression of movement through the world". So often the time spend in a single screen room will actually be greater than the 4-5 screen room that preceded it.

Similarly, the conceptual effort that goes into a single-screen room vs what goes into a 10-screen room is roughly the same (tiling and etc takes longer ofc, but thats not nearly as fussy), so whereas i can probably do 3 solid single-screen rooms in a day i could likely do 2 8-screen rooms in that same period of time. so basically what im trying to say is its not the size that counts!!111 er Blink

but that said, this all bodes well for the production rate. Despite being the largest by far Shoreline was also the quickest to complete, and since the next 2 or 3 regions are of a similar sort of structure and scale, im hoping that carries through! if so it could do wonders for our timeline.

/wonk





   JLJac on July 03, 2015, 10:44:10 PM:

Are those alien words actually creatures, that would so cool if that was the case Tears of Joy

The cool thing with ambiguity is that they can be if you want to! You think that explanation is cool, so you can project that onto it, but someone else might think something else is cooler, and they can project that Grin James and I have our ideas about what's going on, but that's hardly relevant - art happens in the observer, or however that saying goes. What is relevant however is how we implant some patterns that create a half-visible fragment of context throughout the world. The "project what you want" thing is only fun as long as you think that you're on to something, if you find out that it's just a grey glop of ambiguity to project your own ideas on you'll just be very annoyed when you eventually see through that bluff *hrrrmm* So it's all about a balance - we will have our ideas about what's what, but keep it quite blurry, and you'll be able to map your own understanding on the world and hopefully find some interesting connections between one thing and the other, while never being outright told what's going on. Wish us luck!

Update 448

Salamanders!






   JLJac on July 04, 2015, 01:33:13 AM:

Thanks :D

Question: I've started looking at lizard voice now, and want to do something similar to what happened in the lingo version where the animation responds a bit to the audio. Ie I want audio visualization. I've been glancing a bit at this but it seems to be a bit too unity-specific and seems to utilize the unity UI rather than a code interface. What I want is basically a thing that is hooked up to a unity audio source, and then you can ask it for volume and maybe pitch of the sound it's playing right now. This looks a bit leaner and maybe better, but I'm really wanting for some documentation for these assets - just a list of what methods you can call on them, that sort of stuff. Am I just being stupid for not seeing some button that bring that stuff up or something? There's gotta be something like what I want in the asset store, but the asset store appears pretty pig in a poke to me - I can't seem to find much technical details about exactly how the stuff works without buying it. Maybe because they're written in C# and could pretty much be re-created by any unity user; an explanation of exactly what it does would be giving away the blueprint...?

Any experienced unity users that have some tips about light-weight, code-based audio visualization? Or just about how the asset store works haha? Jimym GIMBERT?





   JLJac on July 04, 2015, 02:04:55 AM:

A related question: is it allowed to buy a unity asset, but then not use it in its entirety but instead pick it apart to get the pieces you want? Or just look at how it works and partly re-create the same solution?





   JLJac on July 04, 2015, 10:24:42 AM:

Thank you gimmy! Once again your assistance paved the road to glory  Tears of Joy





   JLJac on July 05, 2015, 09:01:02 PM:

 Hand Thumbs Up Left Cool

Update 449

Lizard vocalization is in! For each sub-species there are 5 audio triggers that can be used to give different individuals a randomized voice. On top of that they randomize a specific pitch and some other variables from their ID seed. Each lizard gets a "phrase" - a sequence of pitches and volumes - and the sounds it actually makes are combinations of a few pre-set phrases that depend on context, and this own individual identity phrase. For example, when reacting to a noise that the lizard doesn't know the source of, it will make a sound that pitches up slightly towards the end to signify surprise or curiosity. That would be the curiosity pre-set phrase, and it's blended with the lizard's individual phrase to determine the final sound.

The idea behind this is that the combination of a randomized sound trigger (basically a selection out of 5 samples) and these pitch and volume modulations will make each lizard sound a little bit unique, while at the same time making it so that the experienced player might get a bit of a clue as to what's going on from hearing the sound.

It seems to be working pretty well ~ it definitely needs some tuning, but the technicalities are basically in. When two pink lizards have one of their dominance battles you can (or at least I can, haha!) differentiate two different voices creaking at each other.





   JLJac on July 06, 2015, 12:09:36 PM:

Thanks Christian! Grin A perfect summary of what we're striving for!

On the subject of releasing a build, we're actually at a pretty bad stopping point right now - lots of stuff that's half-implemented... But I'll talk to James about it, we're definitely excited to show you guys the progress when we get to a spot where we can do so!





   JLJac on July 07, 2015, 07:41:03 AM:

Update 450

Big sea monster under construction!



This scene is actually under water as you can see from the floating slugcat, but I turned the water sprite off to see what I'm doing.

My inspiration for this thing is that fear you get from seaweed when swimming - the fact that it's a lot of floating flaps in constant movement makes you uneasy because you can't tell what's what. The idea is that this thing, partially obscured by the water shader, will cause the same sort of discomfort, combined with the fact that it's huge. Tail and all it's about two screens long!

As of now it's not as dangerous as it's scary (not that it can even grab you at all, but just from testing whether it's able to move up to me and boop me with its head) so it might need some sort of extending mouth parts to make it live up to its appearance.

For the behavior I have several things I haven't decided on yet, such as if it will hunt you near the surface or not. On one hand it would be cool if it never came up to where you could see it clearly, because if you never get a good view of it it will remain ominous. But it's really cool when it breaks the surface and creates a bunch of waves as well, so idk!






   JLJac on July 08, 2015, 09:28:59 AM:

The big fish is gonna eat everything, is the idea. Like, why wouldn't it? It will have trouble catching up with the jet fish though!

Is there a post where you have explained the systems behind making such wonderfully smooth soft bodies?
Here's technical guide in case you want to do it yourself:
http://forums.tigsource.com/index.php?topic=25183.msg1133480#msg1133480
The basic principle is that the creatures are composed of several 2D points with velocity vectors, that are locked at certain distances.





   JLJac on July 08, 2015, 12:12:42 PM:

Oh yes!

Update 451

Progress coming along nicely! First a moody one with the water, showing what this beast will mostly look like in the actual game. Swim slugcat swim!



This next one represents about the maximum amount of the creature you'll see in the actual game - the water is my friend here, because it's super hard to do the psuedo-3D stuff I usually implement on this scale, so everything being obscured by the water is a godsend. The idea is that never quite seeing the creature in its entirety will both make it feel ominous and also allow me to cut some much needed corners in the animation.



Here's a slow motion gif of what I've got for the mouth parts so far:



I think it's an interesting visual contrast that the entire thing is some sort of soft mushy kelp-grub, but the mouth parts are straight up heavy duty industrial machinery. It also serves a gameplay purpose - in the monochrome underwater environment the dangerous mouth parts need to be somehow distinct from the rest of the creature. If everything was just billowing tentacles you'd not be able to understand what part it was eating you with, it'd just feel like sometimes touching it randomly kills you.  Hopefully this will provide a visual contrast that works even in monochrome; squishy parts - not so dangerous, square parts - very dangerous.

Currently my plan is that the mouth will extend to the position where both jaws are parallel but slightly apart. There it will pause for a little while, before very forcefully with an almost instant movement smash together, and then pull into the head again. Anything that had the bad luck of being in the square-ish area between the jaws at that particular frame gets pulled in with it. Once retracted, the jaws will glide outward towards the resting position again.





   jamesprimate on July 08, 2015, 10:07:14 PM:

hahaha you know we cant just spill all the narrative and world aspects here right? that would spoil all the fun!  Well, hello there!





   jamesprimate on July 09, 2015, 08:56:04 AM:

oh no, there is plenty of deep to swim in, so you'll get to see them in their full glory in the deep dark below. he means that physical creature size (for singular independent moving creatures at least) wont get much larger than the leviathan, as we could use water physics and huge open water rooms to make it work out.





   jamesprimate on July 09, 2015, 09:27:46 AM:

oh yeah definitely! that all has to be tweaked and re-balanced for navigating the open water swimming aspects of this shoreline region. right now its completely unplayable, lol





   JLJac on July 09, 2015, 11:43:38 AM:

Oh I really like this one!

Considering the Leviathan is still on the small side...
Cheesy Cheesy Cheesy

So, on the subject of this car compressor jaw haha! It's a tough balance for me, on the one hand I have my vision, on the other I of course take in what you say. It might be the case that it looks a little out of place compared to the already existing creatures, but according to me that's because the other creatures aren't enough like this, not the other way around. My idea for this world has always been a broad gradient of strange biotechnological stuff and less strange stuff, with something like intestines in a box on one end and an apparently all-natural leech on the other. This is the first one where I've really gotten some clear, unambiguous machine parts in (the vulture feathers are metal in my head, but I don't know about you), and I'm pretty stoked about it. However I can see that some of you might not be, if you started following this project thinking it was something else.

It was the same with the blinking lizard heads, if you remember? I had my idea, I knew what I wanted it to look like, and no-one agreed. To get pretentious for a bit, I think the problem is inherent to sharing an art process. Why do we make art - because we have some idea we want to get across where we need pictures and music and stuff, because words just doesn't work to explain this particular thing in its entirety. If James and I could write everything we wanted to express in this project, we would have done so, it could not possibly have been more time consuming  Cheesy

So, because of this, it's sort of by definition impossible for me to fully explain what I want this thing to be, because that explanation is nothing more or less than the final product. We're working our way there!

That said, it's definitely not impossible or unnecessary to talk about a creative process. And I really do value you guys' input, it has contributed to huge improvements. Remember a couple of weeks ago when you just wouldn't leave me alone about those water jets? Water jets now look 800% better because of it!

Also when talking about lore and world building stuff your input has been really valuable. But in this domain, James and I have to have the last word because, well, it's our project ~ The cool thing about being indie is that you're not trying to appeal to some focus group or something, after all! So, I guess we'll have to ask you to just trust us a bit here - we have a cool idea, when things start coming together you'll get a better picture of it! Maybe you'll be disappointed because it doesn't line up with the idea you had imagined for the project's future, but we can't possibly line up with everyone's ideas, so just give us the benefit of the doubt that it might still be a pretty cool idea regardless Smiley

TLDR; I hear you, but wait and see for a bit and I hope it will make sense. If it doesn't it's definitely not impossible to change cosmetic stuff later!

Update 452

Jaw slamming shut:



I've also made it able to eat creatures. Contrary to other RW creatures that usually need to bring their prey back with them to their dens, this one just swallows them whole there and then. Even several at a time!






   JLJac on July 10, 2015, 01:45:37 PM:

Thank you everyone! Glad you like it  Grin Still a bit of work on this one, but now it will be mostly AI stuff.

Update 453

The next waypoint is making this beast swim between rooms, but the "map" we had (colored squares, you might remember) got broken in the region connection project which would make it very hard to know if I had managed to make it roam the world, haha! So the question was, make a new map or fix the old one? As the old one basically didn't work - it was just colored squares and to check if two rooms were connected you had to search for squares of the same color hahaha - I decided to go with a new map. This new map gives soo much overview compared to anything we've had up till now, feels really good to watch the little creatures move around in abstract space!


(Note that this is not some canonical arrangement for the region - how the rooms are located relative to each other you'll have to ask James about, this is just me pulling them into some configuration where I can see them.)

On top of this I actually got the leviathan swimming between rooms ~ but it's not completely finished yet. It can use this "sea highway" as we call it to teleport between rooms if swimming off-screen, but it also needs an AI behavior that tells it to do so. I imagine this working pretty much exactly as the vulture; it will slowly roam the region, if arriving in a room where there are edible creatures it'll make a quick detour into that room.





   JLJac on July 13, 2015, 06:09:39 AM:

Update 454
General technical housekeeping. The leviathan needs to be able to travel and hibernate in a system completely free from the normal den-and-exit framework for abstract space, which means that some new abstract node types need to be defined. This opens up for a long awaited other change as well - no more vultures through shortcuts! With this new system vultures and leviathans alike should be able to travel between rooms completely without using the usual shortcuts.

Seeing the dev interface map, James and I had another talk about in-game maps. What we would trade away is obviously the complete no-UI purity, but we would gain some pretty nice pros as well. One is of course playability, it will just be easier to navigate this huge world if you have some sort of map system to guide you - however minimal it will be a huge difference from not having any at all. The other would be vanity, haha - these environments are HUGE and very complex, but that doesn't come through very well viewing it screen by screen. A map would give an immediate visual impression of how large these regions actually are, giving more credit to all the work James has put in.

Here is a 5 minute mockup I made using a few of the HI rooms. It's put together very haphazardly and the region depicted doesn't match the screenshot behind it haha, but it might be a starting point for a conversation:



The idea for a map like this would be that it fills in organically as you move through the environments, and that everything is drawn as a unified shape somewhat breaking up the very distinct room-by-room nature of the game and making it feel more like a united whole.

One problem that James brought up is that in games with a map, there is a tendency that the player will end up "playing the map" rather than the game. I can imagine a few solutions to this, one of which would be that you can't actually move as the map is up (the controls instead pan over the map) and/or that you can place a waypoint on the map and when you then bring the map down you instead get some very small piece of UI that only guides you to the waypoint, such as a little compass or something. That way you could bring up the map, place your waypoint, and then not have to bring it up again until you've gotten there. Basically any idea that keeps the player from having the map up all the time is game, because even if a map might be a nice aid we want the player immersed in the game, not the map.

Another question is what a map should look like if one is included. If it could look more "slugcat instinct" than "computer interface" that would be cool, but it still needs to be crisp and clean.





   jamesprimate on July 13, 2015, 08:20:32 AM (Last Edit: July 13, 2015, 08:27:42 AM):

im torn on this too. personally, i hate the UI aspect and think it will break immersion. but on the other hand the game world is so large and complex that there needs to be some way for the player to visualize it. also, to if we are to convey destinations and locations to the player, how do we do it without a map of some sort? its either that or literally "showing the way" (arrows or illuminated exits) which i think would be even worse, as that removes the sense of exploration altogether. its not something that is going in right now, so we'll ponder it for a while as we go.

one thought i had was to have the map develop as you explore, but have it only be viewable from certain locations, say some sort of large map terminal in rooms connected to the region gates or something. then you can have some way of planning your route region per region and seeing where is unexplored, but its also far enough away that it doesnt have you "playing the map" breaking the immersion. joar doesnt like this idea and im kinda meh on it as well.

another possibility that might work similarly would be to have the map only be visible during hibernation. this solves a couple of problems actually, as for now the hibernation is sort of just "there" without much utility. having it be the time when you can peek at the "slugcat dream map" creates an added function for it, keeps immersion and doesnt interrupt the flow of the game at all, making use of a natural pause in the gameplay. the more i think of this the more i like it.





   JLJac on July 13, 2015, 11:17:49 AM:

Wow, loooots of interesting discussion!  Smiley

#Arrow pointing back to den: This would be really easy to implement, and maybe sufficient, or at least a great step up from nothing at all. It would basically be a breadcrumb system, but where the breadcrumbs are deleted if you double back - so if you go back and take another branch or cross your previous path the trail would just be cut at that point and then continue in whatever other direction you started off in.

#One-way rooms: If we do have a bread crumb system, a one way room will become a risk and that's kind of fine right? I imagine a rat would be hesitant to drop down a pipe or something for this very good reason.

Map options:
1) No map (cleanest, most immersive)
2) Simple hints (highlight shader on corner of screen that points to shelter/home)
3) Compass hints (waypoint markers that are more discrete than the shader, but still Slugcat/world appropriate)
4) Fade/Memory Map (show current room's geometry fully, and "simple" geometry of previously explored rooms that are out of sight)
5) Full Map (show full geometry of current room with creatures, shortcuts/etc, show "basic" geometry everywhere else, show all discovered shelters/homes, show vague marker for "big" creatures (last time leviathan spotted, last time vulture spotted, etc), show markers for doorways/gateways/etc)

Nice line up! All of them except number one seems to have some UI though, so if we are going to rip that band aid, maybe try to get max value out of it and go all the way?

another possibility that might work similarly would be to have the map only be visible during hibernation. this solves a couple of problems actually, as for now the hibernation is sort of just "there" without much utility. having it be the time when you can peek at the "slugcat dream map" creates an added function for it, keeps immersion and doesnt interrupt the flow of the game at all, making use of a natural pause in the gameplay. the more i think of this the more i like it.
This is also a nice idea, as it would give hibernation a sense of purpose. Maybe if you could see what swarm rooms are active in this mode (slugcat sense!) and place a marker, and then when you go out you get a compass to that marker or something? Would make for a nice "planning mode" similar to DF's embark screen. "This is the idea, but we all know it's gonna go to chaos once we get out there."

I don't think either of those are good ideas. You either have a map or you don't. Limiting its use in any way is really annoying. I remember being infuriated by a game when if didn't let me open the map during the jump. If you want to nerf map's power - keep those nerfs within the functionality of the map itself: how much it shows and how accurate it is.
This is also a valid point. But if the hibernation mode feels very separate from the game, almost more like a between-mission menu screen, maybe you wouldn't get that frustration? Also coming home to the den and getting to see the map grow when your newly explored rooms are added could be a nice end-of-cycle reward?





   JLJac on July 14, 2015, 07:59:07 AM:

Hm, I don't know... I think the very expressionistic and emotional stuff is a bit stylistically off-key. The game is rather matter-of-factly in its general tone, the idea is that what happens might be emotional but the presentation is a very straight forward. I generally want to avoid forcing a subjective experience on the player, and from the level work I get the impression that James is on the same page. It's not like Lion King where there is an Evil Land at the horizon, instead it's just strange environments fading into each other and it's up to you how you want to feel about them. The slugcat's mind should be a little bit of a black box, not because it doesn't have emotions about what is happening but because if it is a blank slate you will project your own emotions on it. Then there can never be an awkward dichotomy when the game tells you that you should have this or that emotion about something, but you actually experience something else.

So, if we're diving in slugcat's mind I'd be way more comfortable with accessing information in there rather than emotion! But, death star assault map certainly doesn't sound like what we want either haha! So, maybe information but animal-like information, somehow? As someone pointed out animals have a great spatial sense. I was amazed a few weeks ago when I was babysitting a dog how it was always able to know the direction back home after taking several turns on city streets, way better than I would be. I read somewhere that if you teach a rat a maze, and then change the maze, the rat will still tend towards the coordinate where the food previously was when exploring the new maze, proving that it doesn't simply memorize an array of lefts and rights, it has a developed concept of space. Humans obviously have a lot of that going as well (if there is road work you aren't just stopped in your tracks because your memorized order of left and right turns is broken, you find a way around) but in the super artificial environment of this 2D game that sense is definitely impeded and might need some extra enhancement to make it not frustrating. I guess the key question would be what is the minimum that can be done to achieve that? Just a little compass arrow, perhaps? Or a very simple map?

I guess I'll put it this way: I'll almost certainly need one, and if it isn't there, I'll end up downloading a fan-made map and jumping in and out of the game in order to use it... now, how immersion breaking is that?
A very valid point as well! There will be maps around, and the last thing we want is people playing in windowed mode switching back and forth to some pdf they've downloaded... If it can't be avoided, maybe make the best of it?

Update 455
Good news, vultures through shortcuts is over! And they work much better for it  Hand Thumbs Up Right

Today I'm doing some art assets. Very time consuming, but relaxing to get some time away from the code!






   jamesprimate on July 14, 2015, 10:05:36 AM:

I really like the sea grass concept! Will keep it in mind for when we return to that region in polish pass





   JLJac on July 15, 2015, 12:33:12 AM (Last Edit: July 15, 2015, 12:39:50 AM):

Wait, do you pixel everything or are those 3D models in a custom renderer?
I draw it pixel art style! But then I split it up in an array of images, usually 10 for an asset, that represents the different depths. That way the level editor can render it in a kind of semi-voxel fashion (basically 30 bitmaps) and create some subtle 3D effect.

Puh, these things are complex!






   JLJac on July 15, 2015, 02:39:51 AM:

Yeah, maybe in the water it could work. This has come up a few times and I've been pretty obstinate towards the idea because we have these super static, pre-rendered backgrounds with plants and everything in them, and those are a very base component of the game that's not gonna change. If the entire environment is super static, including plants, but there are some plants that moves, that would bring even more attention to the static nature of everything else. For that reason I'm doing a strict division in the artwork: creatures move, plants and environments stay still. However, in the water there is already the water shader that slowly wobbles the entire picture, so there it might actually be game to do something like that. As you say though, actually filling one of those rooms completely with physics-based seaweed isn't really viable. However it would perhaps be possible to further use the visual obstruction of the water to make some magic happen with shaders or similar.





   JLJac on July 15, 2015, 02:47:34 AM:

In other news - everyone who's enthusiastic about Rain World should definitely check out this short film I found the other day:



http://www.omegastopmotion.com/watch.html

It's amazingly similar to Rain World in many ways! If you dig it you should also check out this article about the making of:

http://makeitshort.fr/eva-franz-omega/

Not surprisingly they mention two main sources of inspiration that overlap with rain world's - nature documentary and (japanese) science fiction.

Isn't it awesome? Grin If Rain World could be basically that but interactive, the dream is real!





   JLJac on July 15, 2015, 11:45:55 AM:

Update 456

Pixelling along ~








   jamesprimate on July 15, 2015, 01:41:48 PM (Last Edit: July 15, 2015, 01:50:03 PM):

early testing of some of the harvester tiles in context:


detail: https://i.imgur.com/uubiEcP.png

top looks a bit messy, will clean that up in future iterations.

and some concepts for a deep crevasse / chasm:


detail: https://i.imgur.com/vbbBMcd.png

the procedural sway of the thorn growers plant in that last one is so nice  Hand Thumbs Up Right





   jamesprimate on July 17, 2015, 02:40:23 AM:

we've discussed something similar actually, but was thinking of attaching some sort of colored _______ to spears, so you could place them like a flag to mark routes. idk, infinity choices is hard. if only i were garnet or muad'dib...

anyhoo, showing some more of the WIPs going on with the Line Farms region:


detail: https://i.imgur.com/4TJag0b.png


detail: https://i.imgur.com/Wl5EoMB.png


detail: https://i.imgur.com/xlSLzjX.png





   jamesprimate on July 18, 2015, 01:10:09 AM:

Hey Saijin! Good question, thats something weve talked about a lot.

The general audio experience is mostly ambient / atmospheric / environmental sounds to establish a sense of place, with "music" being used to establish specific moods we want to convey to the player, such as when discovering a new region, highlighting the emotion of a narrative point, or surrounding some object / creature / whatever that has some significance attached to it.

In this context the audio should function almost like a natural HUD, giving you hints as to what creatures are nearby, how close the rain is, etc., so we dont want to clutter it up too much with music-for-music's-sake.





   JLJac on July 21, 2015, 10:41:44 AM:

Update 457

Worm grass!



The worm grass is not very dangerous though a bit creepy. It's mainly sticky and slows you down:



However, if you really get stuck in it, it can actually eat you:



Basically, the higher speed you keep the less dangerous it will be. If you jump and roll, or even just run at a good pace, it won't get you, but if you slow down it can get a grip, and then you get slower, and more worms latch on, etc...





   JLJac on July 21, 2015, 10:16:27 PM:

Do they move a little in their idle state? If no - then it's just super evil towards the player. "Immobile plants are safe. Wait, what? Shitshitshitshitshitshitshit!!!"

I don't see the problem  Wink In all seriousness tough, this shock value is sort of what I was going for - I trust James to introduce them gradually to make it fair for the player though.

I dunno, it gives them the kind of suspicion you want out of them.

Moving or not, they kind of look like rubber to me. The second GIF there, it looks like they are stretching. They don't really look like the kind of plant to do that. That is my main complaint.

Looking good otherwise though.

Unrelated note:
@James and Joar
I have been looking at the old alpha pictures from way back. I think there is a certain appeal in them for me. What are the odds of maybe having a setting to turn off the wavering shadows and fog and such? Especially for lower end laptops, with that shader bug...?  Smiley

I was actually going for something like this:



rather than a plant per se. It's kind of in the nature of a plant not to be able to move and grab stuff after all! As for the shader stuff, yeah there will likely be some graphics settings to turn the effects down or off. I recognize that we have lost a certain quality that the older, more lo-fi look had, but we've been gaining a lot of other qualities in exchange!





   JLJac on July 22, 2015, 12:45:42 PM:

Thank you :D

Logo sketches over the years. Please ignore the different levels of finish, and try to look at the general shapes and moods.

1:


2:


3:


4:


5:


6:


7:


8:


9:


10:


11:


12:


13:


14:





   jamesprimate on July 22, 2015, 03:31:26 PM (Last Edit: July 22, 2015, 03:37:26 PM):

it probably seems like quite a lot dropping all these ideas all at once, but we've been working on this in the dark for months and months and months of course, (with multiple graphic designers even!) and quite a lot is skipped over as well, haha.

Note that the work Joar is showing here is about the font specifically, as the setting and use of the illustration are just quick mockups to show context. In that regard, *i humbly request that these not be shared around* as we intend to do a cool "Big Reveal" sort of thing when it is all polished and where we want it to be. The ceiling is MUCH higher than this  Cool

Those slugcat pics are sweet. Are they canon now? Have you contacted the author?

Yes indeed! We've been working with the extremely talented Del http://deldraws.tumblr.com/ for a couple of months now, and have some Big Plans in that direction. These just are some of the early pose sketches shes done for us so far:



Detail: https://i.imgur.com/sx89CJR.jpg






   jamesprimate on July 22, 2015, 03:48:16 PM (Last Edit: July 22, 2015, 04:06:40 PM):

sorry, bumping so it doesnt get lost in the page turn:

it probably seems like quite a lot dropping all these ideas all at once, but we've been working on this in the dark for months and months and months of course, (with multiple graphic designers even!) and quite a lot is skipped over as well, haha.

Note that the work Joar is showing here is about the font specifically, as the setting and use of the illustration are just quick mockups to show context. In that regard, *i humbly request that these not be shared around* as we intend to do a cool "Big Reveal" sort of thing when it is all polished and where we want it to be. The ceiling is MUCH higher than this  Cool

Those slugcat pics are sweet. Are they canon now? Have you contacted the author?

Yes indeed! We've been working with the extremely talented Del http://deldraws.tumblr.com/ for a couple of months now, and have some Big Plans in that direction. These just are some of the early pose sketches shes done for us so far:



Detail: https://i.imgur.com/sx89CJR.jpg




@ Oldblood: indeed indeed! its a really big change from the past...3? 4? years. tbh I expected much more of a *cars flipped and trashcans on fire* sort of response, so im quite relieved, haha.

The clean style of the fonts will follow through to the UI and blend really well with the updated aspects of the visual presentation, which is super essential. As much as we both liked the funky distorted style of the alpha and the clever architectural rain silhouettes, they just introduce too much visual noise to be able to do anything else with, meaning that we'd have to be introducing other fonts, figure out ways of making it work with the illustrations, and it just gets super messy.

Perhaps most importantly, we came to the conclusion that the thing people care about in Rain World is THE SLUGCAT of course. So thats where we should to put the focus. Everything else should serve to support that, rather than fight for visual space.





   jamesprimate on July 23, 2015, 03:56:12 AM:

@ crispy: this aspect is something were really cognizant of, and plan on keeping the two visual realms as discreet territory so as to avoid visual conflict. in fact, thats one of the reasons why we stopped working on the "architectural letters" concept, was that it required a lot of already very visually-distinct elements to be represented in a different style. the characters are tiny, 24 pixels or whatever, so there is a lot more leeway. and if you are going to take that leap and do detail on *anything*, its got to be slugcat!

its a tale as old as time though, and pretty much every videogame has to deal with this visual incongruity in one way or another and each path has its own potential pitfalls haha








   jamesprimate on July 23, 2015, 12:55:14 PM:

 just talking about the font work here tho. we've got some cool plans for the actual logo and title-screen presentation, so wait and seeeeee

But for people who do like that 3 color architectural logo, I do plan on using it for tshirts  Hand Money Right Hand Money Right  Hand Money Right





   JLJac on July 25, 2015, 01:52:49 AM (Last Edit: July 25, 2015, 02:10:03 AM):

Hey everyone! We have a candidate now that both James and I agree is good and which has been getting generally positive responses Smiley I'm sorry if it feels like we're bulldozing a bunch of your opinions here, that's not at all our intention - but we are in a slight tight spot because we're stuck between a deadline and our talented illustrator being off to a convention, so we had to pick something and go with it for now.



It's pretty probable that the illustration might change - this one was actually created as a "sketch" by Del and then given a slight clean up and pixel finish by myself, so I think we'll give her an opportunity to do a final version at one point or another. Also I have this idea that I'd want to see a version similar to this but with the slugcat looking out to the left which would add a bit of drama to the composition, I imagine.

That said, we are really stoked about the direction of this one - it's clean and stylish, legible contrary to the old one, and the slugcat hits that sweet spot between cute and creepy!

As a result of showing the game at conventions we know from public feedback that to many people the game is "the slugcat game", meaning that the slugcat being the main character of the logo would make a lot of sense for public recognition. For this reason we also decided to go with a rather toned down version of the typography - the slugcat should draw the eye, the letters are there to discover next. You might also notice that the letters aren't quite as bright as the highlights on the illustration. Still the character is lit as if it was the typography giving off the light, bringing the two elements together and placing them in the same imagined space.

(Edit - cropped it a bit so it fit in the forum formatting ~ )





   jamesprimate on July 25, 2015, 02:02:22 AM:

You guys don't even know how much I am in love with this logo  Tears of Joy





   jamesprimate on July 25, 2015, 10:41:05 AM:

ROFL





   JLJac on July 26, 2015, 01:11:20 AM:

Oh interesting! I'm not convinced about those Rs of yours, to me they have a bit of club foot with that one leg being thicker and extending to outside of the curved line, but I really like that W!

The font is based on a public domain font called rodondo, but has undergone some modifications where I've for example made it thinner and adjusted a bunch of stuff around. If you look at the R there you'll see that it's actually even more pinched together than the one I'm rolling, I've been moving that leg out a bit. So I agree with you in kind but not in scale, if that makes sense  Smiley

The all white slugcat looks pretty nice IMO! Actually I have been doing a few tests like that myself as well, as a logo needs to be able to work in one color print. Maybe the silhouette could be a bit more distinctive in some places, but as said we're rushing to a deadline right now and it's pretty likely we'll return to this down the line.

As for the reduced color count on the slugcat, that was my attempt to clean it up a bit and make it closer to the graphics of the game, but I would be totally up for seeing what a smooth unlimited color finish would look like as well! As long as the outline is sharp rather than blurry and there's a way to get around obvious brush strokes. Maybe when we get Del back!





   JLJac on July 27, 2015, 12:11:49 PM:

Thanks! As I said I'm pretty sure we'll return to it for polish, so I'll try it out then  Hand Thumbs Up Right Hand Thumbs Up Right

Update 458

New creature coming up!



The idea is that this critter will be able to lay on the floor like a big sea elephant/grub, but then it can also shoot up in the sky with looooong extendable legs.

I'm very inspired by Dali's long legged elephants for this one.



With these long legs it will be able to stride across the worm grass fields and then pull them in and lay down to eat some sort of plant in its grazing pastures in between. The leg movement is supposed to be a little bit less clumsy, though I don't know how good I can make it. Good thing it's all fantasy creatures  Wink

I'll work a bit more on locomotion, and then my plan is that in the skinning phase I will draw legs on top of these tentacles that are only somewhat true to their orientation, hopefully enabling me to fake a slightly less wobbly movement haha!





   jamesprimate on July 28, 2015, 08:48:19 AM (Last Edit: July 28, 2015, 09:09:28 AM):

^^^ actually, i think Joar will *love* that you are making that connection!


Thanks for opinions gentlemen! All will be considered. For the time being, it is water under the bridge though. As Joar mentioned, we had a tight deadline for this aspect, and assets have already been shipped for the purposes of this particular logo iteration. It will likely be revisited again when we get nearer to release and we have everything else set. We've had universal positive response to it outside of the devlog, the people less familiar with the project, so we'll look at this all with the long view a few months down the line and see how things feel  Gentleman

(Whats amusing for me is remembering how much everyone HATED the last logo, and the nightmare thread fires that happened around the creation of that. Now of course many people fondly remember it, haha. As always, change is bad.)


Anyway, moving on! We've got a lot of game to make, so have to keep on the grind. I was very much enjoying the posts of screenshots from The Mist and war of the worlds, etc, as inspiration for this new beast (nicknamed the Raindeer, yes yes we know.) As for the behavior and role, I dont want to spoil too much of course but as usual Christian and Teod have made some very close guesses.

I havent been posting much recently, as most of the level stuff right now isnt so flashy. Im currently working on a subregion that connects Suburban to Linear Farms, so ive been experimenting with finding a gradation of the plainer, boxy "valley" SU style and assets with the more much detailed open horizon LF style:


detail: https://i.imgur.com/pUzLpvX.png

you'll notice a liberal application of worm grass, which has quickly become my favorite rain world creature.  Hand Thumbs Up Right Hand Thumbs Up Right Hand Thumbs Up Right

and other task is creating the wide stretches of crop farms:

detail: https://i.imgur.com/r5990VA.png

not terribly exciting, i know. that should change soon though, as new tiles are incoming.

We're probably a solid halfway through the region, but of course i want to wait to see how the Raindeer plays before going too much further with LF room geometries, as the rest of the terrain will be its turf.





   jamesprimate on July 28, 2015, 10:53:46 AM (Last Edit: July 28, 2015, 11:08:46 AM):

oh we're definitely not doing steam early access or anything like that. i hope that hasnt been implied anywhere, as it was never considered. it'll be more as you have described: a closed beta with the adult swim games testers, some kickstarter backers, some old rain world pros, etc. the "early access" of the kickstarter tiers was for the alpha versions we've been sending out over the past months, but they were essentially mechanical prototypes stripped of the narrative and progression elements, aka "the game".

but this is just planning ahead, were not there quite yet. its as you've said, there is a looooot of work yet to be done and we have no desire to show off our bugs just yet!





   JLJac on July 28, 2015, 11:57:39 AM:

For the logo stuff James said it ~ we are gonna return to it when the general packaging is to be touched up close to release, but for now we're really happy with what we have, especially the cute cartoony aspect actually. The mood we're going for is "grim cartoon", with the slugcat being more "cartoon" and most other stuff being more "grim". Still its black stare and the dramatic lighting conveys a hint of that gloomy atmosphere, meaning it hits the right balance for us.

Update 459

More work on locomotion and I also started a bit of the skinning process of the legs, as it didn't really make sense to work on leg movement without knowing somewhat what it will end up looking like.

Also the creature is now better at handling uneven terrain; instead of just throwing its body out over a ledge (and stumbling and falling) it carefully places a leg or two on the below level and then ease itself out.



Going up a ledge is a bit more difficult as the corner tends to "cut off" the trailing legs and make the creature lose its support, but by having it stay a bit more clear of the actual corner this behavior is also getting better.






   JLJac on July 28, 2015, 01:37:32 PM:

@christian, yeah, good point. ATM it doesn't really have a good distinction between front and back, it mostly just thinks of them as "my four legs", but that could def be a nice touch!

@Keith, thank you sir! If you go one page back you can see a debug visualization of what the legs work like behind the skin that is pasted on top of them. Those tentacles are composed of two main components, the semi-transparent "ghost tentacles" which work in tile space and make sure that they never overlap terrain, and the jointed physics tentacles on top of that which provides a bit more plausible movement.

The creature ray-traces from its body downwards trying to find a good grip position when it moves a tentacle, and when it does so path-finds a way to it in tile space. Then the tile space "ghost tentacle" starts to move along that path, dragging the floaty physics tentacle with it.

On top of that I draw what you actually see in this post above. I use the positions of the physics tentacle in the debug visualization, but relate to them somewhat liberally, basically just using them to make sure that the leg is not super obviously sticking through a piece of solid terrain. The elbow bends are accomplished with a simple inverse kinematic formula, google inverse kinematics for more info.

Hope that was somewhat helpful, it's getting a bit late over here haha  Tired





   jamesprimate on July 28, 2015, 03:14:15 PM:

^ i think at this point it'll take that long just to explore all the rooms  Well, hello there!

@tortoiseandcrow: i love that strip sooooo much. spot on  Hand Thumbs Up Right





   JLJac on July 29, 2015, 02:09:07 PM:

Yeah the idea is that it will usually lay around sort of like a walrus, but if you get too close it shoots up on its legs Smiley

Update 460

Working on antlers... At first I tried to draw them by hand, but that looked kind of meh... Also it wouldn't allow for individual antlers for each rain deer.



So I decided to take the most difficult path possible and randomize a 3D tree shape and rotate it, hahaha  Tired



Pretty happy with the result though! There is a few problems with disconnected branches, but the general impression is cool and it does allow for each rain deer to have a unique set of antlers Smiley






   JLJac on July 29, 2015, 02:50:18 PM:

@Chromanoid, Oh that's a nice idea! I'll think about possible implementations!

@Teod, to me it seems to fit pretty well! Maybe I'll tone down the general rotation and keep it to a brief moment when it's actually turning around, but right now I'm just really happy to see it working so I'd like to look at it for a bit longer ~

Some more messing around and I found out that a bit of color difference goes a long way in conveying which horn is which, and also enables you to see that the two antlers are slightly different:






   jamesprimate on July 29, 2015, 03:36:03 PM:

Seeing 3D objects in the context of this game feels weird. I always thought it will stay 2D only. Doesn't it go against the art style?

RW has always been 3d, or at least faux 3d:





im deeply in love with this raindeer btw. in context its going to look stunning.







   jamesprimate on July 30, 2015, 12:01:04 PM:

parallax was never considered, because a key the look of the game is the forced perspective and vanishing points of the faux 3d terrain and objects. Early into the port from the old programming language, Joar considered using an effect similar to the one above to "snap to" camera points when moving from screen to screen, but it would have made level files literally 30x larger and caused all sorts of other problems for what was essentially just a 1-time "hey coooool" eye candy transition effect, so we dropped it.

But that said, all of this is perspective is actually in every level screen now, subtly transitionings to other perspectives when going through multi-screen rooms. i just choose how its framed when its rendered to give specific effects to highlight aspects of the gameplay of terrain.

its pretty hard to communicate this without seeing, so i think even a lot of long time thread readers get thrown off when we talk about it, so let me see if this helps.


detail: https://i.imgur.com/3082xt7.png

notice how you can see the tops of the platforms here, especially the square-ish ones? and the pipes with the grating on the bottom left and right point down and outwards? Thats a top down perspective to highlight the surfaces that you can jump on and set some "im on some tall precarious thing surrounded by a big fall" mood.


detail: https://i.imgur.com/JPGimVF.png

here in the bottom part of that room, everything is facing upwards to show scale: "now things are towering above me". you can see it in those same sorts of grates mid screen, but facing outward and slightly upwards. etc etc. its a subtle thing, but a totally essential aspect of the rain world look. so thats what we talk about with all this 30 layers / diorama /  perspective stuff.





   JLJac on July 30, 2015, 02:02:40 PM:

Yeah I knew the ground engine setup of the game before, great explanation though and great environments. But I never thought that moving "pictures" even 30 at a time could be a problem for nowadays computers. Or is there a difference between pictures/images and textures. Maybe I'm also digging to deep. Just interested.

Yeah I thought so too! Turns out that even in modern 3D games, you usually don't seem to run that many high-res textures where the color of each pixel down to the 256 color values must be maintained and conveyed - they do other tricks such as repeating the same texture in clever ways by for example re-coloring it. A lot of stuff happens in shaders. When researching this I came across a pretty amazing little community that made an art out of rendering super good looking 3D scenes using only shaders, basically no textures. Either they'd use some little 10*10 noise texture or something, or just generate perlin noise in the GPU. Really cool stuff!

But yep, moving about 30 (larger than) screen sized pixel perfect textures turned out to be too much for even my modern computer, at least through unity's rendering pipe line (which I have no reason to believe to be particularly bad) so we had to scrap the parallax effect. Basically everything else that is cool looking in the game since making that decision is based on our current setup (pre rendered screen per screen textures that have the depth coded into them) though , so I'm pretty happy with the trade-off!





   jamesprimate on July 30, 2015, 05:33:57 PM:

@Charliecarlo: thanks!! yes for a while it was quasi-randomized, so occasionally you'd get more extreme angles, but now that i am the master of perspective  Cheesy i use it sparingly for effect and keep the angles fairly consistent per region.


Hey James, are you still working on areas like this?
http://i.imgur.com/FL81aH7.jpg
That concept room looked fantastic

most certainly! working on a *huge* one right this moment actually.

The bottom looks like a death trap. Is there any way out of there, or it's essentially game over?

it *can* be escaped, but basically a death trap.

in some of the early regions, we used the occasional "fall out of the screen pit death" for platforming challenges. but many people found this frustrating, considering that in other situations where the screen was open you could move through it. So that room above was a test of using "soft death pits", where the death is shown either due to the fall or to some gross creature lurking at the bottom. seems to work just fine, so when we get into the polish pass of the levels ill go back and turn every one of the terrestrial off-screen death pits into something like this.

note: that wont apply to sky regions such as Chimney Canopy and Sky Islands, which are supposed to be very high up






   JLJac on August 02, 2015, 01:00:10 PM:

Thank you Smiley

Update 461

Big worm grass!



Contrary to the small stuff, this is not just a sticky nuisance, it's instant death  Shocked

The main difficulty here was performance - originally I thought the worm grass was just going to be here and there in small patches, but James picked up a liking for it and wanted to use it in much larger quantities, which did cause a lot of framerate issues. Also it wasn't quite dangerous enough for the huge fearsome fields he was making. The two birds with one stone solution was to make the worm grass transition to this super worm grass in larger patches, which also works a bit differently than the original worm grass - rather than tracking the pull of each worm it works tile by tile, creating a more classic gamey "lava" effect; basically if you fall down there you die.

We plan on making large swaying seas of this, with the rain deer striding across it. I think it's gonna look really cool!





   JLJac on August 03, 2015, 10:20:54 AM:

of course the follow-up question should be, can we ride atop raindeer to safely cross the wormgrass fields?
Well, hello there!

Every time I check back at this thread I'm overwhelmed by how amazing this game is getting. That Spiderdeer thing is incredible and disturbing.
Thank you! I really like your pixel art Smiley

How would you otimize performance on something like that?
Mostly by culling them if off screen, and by having the interaction be tile based rather than worm-by-worm.

Update 462

Puffball spore bombs!



Let me know how horrible an art style breach you guys consider this. The low color count is maintained - it only uses 2 colors, but it uses dithering which I haven't been messing with before.





   jamesprimate on August 03, 2015, 11:27:46 AM:

what fun would it be if we explained everything on the threads? Tongue





   JLJac on August 05, 2015, 01:25:47 AM (Last Edit: August 05, 2015, 01:39:48 AM):

Yeah, the puffballs can be used as a smoke screen:



It's sort of doubtful how useful that'd be though, as they make a sound when they pop so a lizard that isn't aware of you would be made aware by you throwing it. Maybe in some situation when hunted by a lizard you could plant one and take to a side corridor to confuse it, but that's a pretty specific situation. Any little advantage you can get, though!

However, that's not their main purpose  Well, hello there! Sorry about being secretive, but we're down to the last 3 regions and want to keep some stuff for you to find out by yourselves!





   JLJac on August 05, 2015, 08:18:57 AM:

Thanks thanks! Backer creature list is looking good too, 60%-ish with some of the worst ones behind us Smiley

Those mushrooms are called "vesse de loup" in french. Also, their literal English translation is puffball... :| Huh?

These puffballs brought back huge nostalgic flashes of playing with these mushrooms which burst in a puff of spores...

Hahaha yeah, me too! It was modeled after that species ~ in swedish we call them "smoke mushroom", but puffball is definitely better! I suspect this is a case of co-evolution where the mushroom has adapted to the adolescent homo sapiens' scientifically proven preference for kicking things that are round and white on grassy fields. Seems to be a european thing though, James claims not to have been massacring these when he was 10, and if you're 10 and not massacring these that means they don't exist on your continent.





   JLJac on August 06, 2015, 10:15:25 AM:

Nah, they generally use textures. I've been looking but couldn't find it Sad Can't remember if it was some tesselation technique they used... Something in my memory is about fractals, but that might just be because I don't know how tesselation works haha!

Aside, sorry about the slow devlogging pace lately! James hit me with a put together version of the new region, and now I'm working on getting the Rain Deer to path properly between rooms, and as always when doing this inter-room movement it's a total mess and I have to spend basically a day bug hunting. After this one there will only be one more creature like that though, the rest will use the trusty old shortcut system! In other news the region is AMAZING, definitely the best one yet as for basically everything! Really stoked about this one!





   JLJac on August 07, 2015, 07:05:33 AM:

For all you  Wizard out there, just in case anyone knows - I'm hunting an infinite loop somewhere in my code (or at least something that behaves as an infinite loop, whatever it is) and it should be really simple to find with visual studio because I should be able to just hit pause and see the current call stack. Instead I get this:

http://imgwiz.com/images/2015/08/07/RSE74.png

 Huh? Huh? Huh?

Anyone has any idea what that might be? Or alternately if there is some other clever way to force the application to display its current call stack?






   JLJac on August 07, 2015, 10:57:07 AM:

I guess you know what code you have been changing? maybe you can set a break-point and find the issue like that. sometimes this is the only solution for me, but I am no  Wizard

Yeah, at the end of the day I managed to solve it by placing console logs before and after where I believed the freeze to be, and then moving those closer to slowly pin down the problem. But, it should be a 30 second problem rather than a 3 hour one, haha T__T

I don't have any experience with Unity in VS, but usually when this happens with C++ it relates to having no debug symbols for the code running on the 'current' thread. Possibly something to do with the managed/unmanaged code mix in Unity?

Try opening up the 'Threads' window while paused and see if there's any other threads running that you can peek into, they might help you track down your issue.


Yeah, this is the idea I've gotten after some research too - and last time I had similar problems it also showed to be about this. Problem is that I basically don't know what "symbols" are, this is where some kind of education could have come in handy I guess haha :S Is there some simple explanation? What I understood last time was that it was some kind of registry keeping track of where each point in the compiled code was coming from in the uncompiled code, so that if something went wrong it could show where and why and launch the debugger ... is that about right?

When the symbols are missing for a piece of code, how can you like, tell it to add that code in then? Or why doesn't it do that automatically?

For your more practical idea - in VS all the windows are empty, I only get that message and that's it. In mono develop I can pause and it shows a call stack and a thread, named something that makes me think it has to do with waiting (as in some kind of framerate cap) but no code, and there's nothing I can recognize as written by me.  Huh?

Well, at least I solved the problem by now, good old manual way ~  Hand Thumbs Up Right





   jamesprimate on August 11, 2015, 04:23:28 PM:

hey peeps! pardon the quiet, we've been putting polish on the Linear Farms region and discussing plans for THE FINAL THREE REGIONS. That and preparing for PAX Prime, where (as usual) Rain World will be showing the newest build at the adult swim games booth. None of which is terribly exciting to post to the devlog about. But we'll return to the regularly scheduled program shortly!  Gentleman





   JLJac on August 12, 2015, 09:37:22 AM:

So sorry about the silence! Lot's of tying up loose ends for this latest region, but it feels like we are more or less there now. Because you waited so long, here's a little taste of what the region will have to offer:



Back to regular update frequency very soon!





   jamesprimate on August 12, 2015, 10:12:33 PM:

come on, don't you guys have any design skills at all?  this is much more fitting with the game's atmosphere



ship it!





   JLJac on August 13, 2015, 01:52:17 AM:






   jamesprimate on August 13, 2015, 02:28:51 AM:

^ TRUE ART.

seriously though, thanks for some good suggestions and we'll take them into consideration when we get to the polish phase. but for now... were off to The Wall!




* here being region 10 of course.



you might remember this early early sketch i did for it way back when we were starting on Chimney Canopy:


detail: https://i.imgur.com/NoV05Ka.png

Joar is working on some custom tiles for it right now, so me thinks it will probably change from there quite a bit, but the idea is the same: a mega huge wall that you scale. got some clever ideas for mechanics for it, so we are pretty excited to get going on it (and out of linear farms)  Hand Thumbs Up Right







   jamesprimate on August 13, 2015, 06:39:51 PM:

I wanted to plane many with all video game visor as a joke, but by now it had became a bandwagon :p

i dont know what you mean






   jamesprimate on August 14, 2015, 05:46:56 PM:

twitter seems to like it  Hand Metal Right

https://twitter.com/brandonnn/status/631942065316691968





   jamesprimate on August 15, 2015, 10:12:41 PM:

views from the wall:



detail: https://i.imgur.com/jVhyDuO.png



detail: https://i.imgur.com/1ZE6mQf.png





   JLJac on August 18, 2015, 12:25:57 PM:

Oh don't worry guys Grin I've just been quiet because I've been doing some classic non-devlog stuff these last couple of days, like finishing up the last region, providing tiles for the new region etc. But yeah, maybe this deer thing got a tiiiiiiiny bit annoying somewhere halfway through page 3  Cheesy

Both James and I like the deer, and that's generally what we go by. I'm a fan of the beard suggestion though, maybe I will try something like that out in polish pass! However, the deer in its current form took something like 2.5 weeks alone, and we just have to put a pin in it for now.

At the moment I'm making tiles and palettes for this new region we've gotten into. This one is going to have a lot of palettes and fun custom work, as we plan for it to be kind of the big end-of-game scene and want to spice stuff up quite a bit! Now we are starting to tread some spoiler territory though, and maybe not everything in this region will make it to the devlog as we want you guys to experience it for yourselves. Super excited to finally be reaching that point of the development!





   jamesprimate on August 18, 2015, 03:14:35 PM:


Two things:

1) Is the final game still planned to be an interconnected open world?

2) If so, and there are no skill-based gates, keys, etc., how do you make sure the final regions are the ones the player reaches last? That the big end-of-game scene in the aftermentioned region is encountered towards the end of the game? I'm guessing narrative events funnel you toward certain regions...

1) oh yes, totally. thats been my life for teh past 2 years

2) there are quite a few soft lock-and-key-ish aspects, and a few main ones that have to be figured out in order to traverse some of the later endgame regions. but none of them are hard barriers per se, they are more to guide the player to some essential spots where certain narrative / development events can take place. but in replay, in NG+ or just a fresh game, a player who has previously gone through the game should have pretty much full run of the map with the knowledge they accumulated. if you know what you are doing and have a plan and some outside resources (or are really lucky), you can access any point from the start.





   JLJac on August 19, 2015, 01:31:46 PM:

Update 463

Today I made a huuuuuuuuge tile:



This is in another league than any other tile so far. Maybe the largest chimney got close, but that one had basically no complexity - this one is huge and full of details. James will be able to make some really impressive rooms with this one!

The hollows can be stuffed with custom machinery, which has turned out to look really good in testing. Really looking forward to see what comes of this one!





   JLJac on August 21, 2015, 10:52:10 AM:

Update 464

More tile work! Huge chains:



A random machinery tileset:



The idea for the random machines is that they'll be used mostly as "padding" around larger and more deliberate machine parts - not necessarily on large areas by themselves. My hope is that this will allow James to make some cool super-intricate looking machines.

James is working on an area now that is looking preeeeetty awesome! There'll be a lot of very large tiles, some intricate machinery, and some cool visual effects. Much looking forward to see what's gonna come out of this!





   JLJac on August 21, 2015, 11:38:02 PM:

Thanks! Actually "quasi 3D" is a pretty good way to describe all the background graphics in the game. The level editor creates 30 bitmaps, each representing a layer in the z-dimension and then bakes them together into a composite which saves the depth value of each pixel. This means that the final image you view could be thought of as a still projection of a crude little voxel space. Most assets are created layer-by-layer and then interpreted by the editor so that they all line up, forming a rough (and very flat) 3d shape.



This is why making new assets takes so long - I can't just draw them, I have to figure the three dimensional shape out, lay it out as layers, write the instructions for the editor to place everything in the correct layer, etc.

When it comes to the actual visual 3D effect, some assets work better than others, and I'm really happy about these chains! However, even the boring boxy assets have a bit of the effect going on. If you look at the chains screenshot you can aaaaaalmost see how on the left hand box, you get a little glimpse of its right face, and on the right hand box you get a little glimpse of the left face.

The saved depth value of each pixel is used for basically every shader effect that looks good in the game, that's like the one magic trick Smiley The shadows playing over objects in the background for example are very simple - just fetch the depth of pixel (x,y), depending on that depth step a certain amount of pixels diagonally up/left to say, pixel (x-6, y-8). Once there, check if there is something rendered in the sprite layer at that location - if so, the pixel should be shadowed.





   jamesprimate on August 22, 2015, 05:33:22 AM:

#screenshotsaturday

showing off some of these new tiles on The Leg:



detail: https://i.imgur.com/YYlMI60.png






   jamesprimate on August 22, 2015, 09:25:38 AM:

Yessssssss





   JLJac on August 24, 2015, 12:57:53 PM:

Update 465

Working on a new creature! This one is going to need a bit of rope physics, which I'm painstakingly trying to figure out. I did try my hand at this with the lantern mouse, but there I could always assume a static base position - here I have to consider both ends of the rope moving as a possibility.

I've figured out that as long as the rope ends manage their own terrain collision, the rope itself should only have to care about convex corners, which should simplify the task a bit by making the things necessary to think about a lot fewer.

I have managed to get something together that works theoretically. In practice though, it's not perfect yet - sometimes the "sweep" the rope does for corners will miss a corner, and the rope can only create one new bend point in a frame, as well as some other problems. The theory should be sound though, so if I work with it some more I imagine this solution should work.






   jamesprimate on August 25, 2015, 05:27:22 AM:

new kickstarter update! this one actually has a lot of stuff the devlog hasn't seen yet:

https://www.kickstarter.com/projects/rain-world/project-rain-world/posts/1333057





   jamesprimate on August 25, 2015, 05:51:38 AM:


Btw, saw on Steam that the release timeframe was pushed to 2016


nah thats a typo, it should actually say 2106





   JLJac on August 25, 2015, 09:22:16 PM:

Quick question: is the raindeer hide final? Just seems odd to me that entire body, even the antlers, is black.
For now ~ I want to do a bit of color variation on them, but we just had to, had to, had to move on haha! Hopefully I'll get an opportunity to return to them, and for then I do have some ideas.

Update 466

Grappling hook!








   jamesprimate on August 25, 2015, 10:06:26 PM:

every new technical demonstration has enough complexity to drive a whole game on its own!

case in point: spider slug





   JLJac on August 25, 2015, 10:23:56 PM:

The rope script is decently solid, and uncharacteristically clean/self contained compared to the utter mess my code usually is, so if anyone's interested in it I can hit you up with the source.



This version of the script assumes square tiles and only account for 4 types of corners, up/left, up/right, down/right, down/left - but I think it would be possible to adapt it to work with other types of terrain. You'll need to run your own collision code for whatever objects are attached at the ends of the rope, but if that code works and makes sure that the ends are not overlapping terrain when the rope gets its update command it should not clip through any corners or anything.

Working with this I kind of felt the inspiration coming on for some kind of touchscreen puzzle game, but any side projects are like 1200 light years from possible now and for the foreseeable future, so if anyone else is interested I'd be happy to hand it over  Smiley





   JLJac on August 25, 2015, 11:22:26 PM (Last Edit: August 25, 2015, 11:35:47 PM):

I did check it out! The effect is similar, but I think the algorithmic approach is more different than same. As you see in the gif, my rope thing can wrap several times around the same object, cross itself etc. The convex hull algorithm is about mathematically finding the perimeter of an object - it's a way more "mathematically clean" line. For example they mention that one of the definitions of their line is that every angle is a left turn,  that certainly doesn't go for my line haha!

My approach is less pure maths, more hands on. Whenever a rope segment moves (and it's only the first and the last rope segments that can move) I sweep over the area it covered in its movement and check all the corner points in there. The corner point that is closest to where the segment was before it started to move is picked as the position for a new bend on the rope.





   JLJac on August 26, 2015, 05:25:44 AM:

@JobLeonard, your sketch illustrates the method I use nicely Smiley I don't see the need for the convex hull though - I just use a line/vector distance to check which point that the rope hit first (on your sketch that top left one) and because that point will be convex and far out from the middle, it'll be one of the convex hull vertices either way, without having to explicitly calculate it. The concave points (such as the one in that crevice on the shape in your sketch) there's really no reason to bother with at all, because as long as the tips of the rope have terrain collision those can never end up inside a sweep.

@Christian, TheWing, yep, 45 unless you hold up, then straight up. And a little bit of auto aim - if the original aim direction seems to be all empty of terrain it'll check a few angles to the sides as well and see if any of those hit something.

@Paul, wow yeah, that looks super similar! Let me know what was and wasn't the same in the code!

Code:
public class Rope
{
    public Room room;
    public Vector2 A, B, lastA, lastB;
    public float totalLength;
    public List<Corner> bends;
    float thickness;

    public RopeDebugVisualizer visualizer;
    public List<Corner> corners;

    public Vector2 AConnect
    {
        get
        {
            if (bends.Count == 0) return B;
            else return bends[0].pos;
        }
    }
    public Vector2 BConnect
    {
        get
        {
            if (bends.Count == 0) return A;
            else return bends[bends.Count - 1].pos;
        }
    }

    public struct Corner
    {
        public FloatRect.CornerLabel dir;
        public Vector2 pos;
        public Corner(FloatRect.CornerLabel dir, Vector2 pos)
        {
            this.dir = dir;
            this.pos = pos;
        }
    }

    public Rope(Room room, Vector2 initA, Vector2 initB, float thickness)
    {
        this.room = room;
        A = initA;
        lastA = initA;
        B = initB;
        lastB = initB;
        totalLength = Vector2.Distance(initA, initB);

        bends = new List<Corner>();
        corners = new List<Corner>();

        this.thickness = thickness;

        //finds all the corners and stores them in a list. This could also be done locally on the fly, for very large spaces with lots of corners that might be preferable performance-wise.
        for (int x = 0; x < room.TileWidth; x++)
            for (int y = 0; y < room.TileHeight; y++)
                if (room.GetTile(x, y).Solid) {
                    if (!room.GetTile(x - 1, y).Solid) {
                        if (!room.GetTile(x, y - 1).Solid && !room.GetTile(x - 1, y - 1).Solid)
                            corners.Add(new Corner(FloatRect.CornerLabel.D, room.MiddleOfTile(x, y) + new Vector2(-10f - thickness, -10f - thickness)));
                        if (!room.GetTile(x, y + 1).Solid && !room.GetTile(x - 1, y + 1).Solid)
                            corners.Add(new Corner(FloatRect.CornerLabel.A, room.MiddleOfTile(x, y) + new Vector2(-10f - thickness, 10f + thickness)));
                    }
                    if (!room.GetTile(x + 1, y).Solid) {
                        if (!room.GetTile(x, y - 1).Solid && !room.GetTile(x + 1, y - 1).Solid)
                            corners.Add(new Corner(FloatRect.CornerLabel.C, room.MiddleOfTile(x, y) + new Vector2(10f + thickness, -10f - thickness)));
                        if (!room.GetTile(x, y + 1).Solid && !room.GetTile(x + 1, y + 1).Solid)
                            corners.Add(new Corner(FloatRect.CornerLabel.B, room.MiddleOfTile(x, y) + new Vector2(10f + thickness, 10f + thickness)));
                    }
                }

        //  visualizer = new RopeDebugVisualizer(this);

    }

    public void Reset()
    {
        bends.Clear();
    }

    public void Update(Vector2 newA, Vector2 newB)
    {
        lastA = A;
        lastB = B;
        A = newA;
        B = newB;

        //sweep terrain to add bend points
        if (bends.Count == 0)
            CollideWithCorners(lastA, A, lastB, B, 0, 0);
        else {
            CollideWithCorners(BConnect, BConnect, lastB, B, bends.Count, 0);
            CollideWithCorners(lastA, A, AConnect, AConnect, 0, 0);
        }

        //delete bend points where the rope has come free of the corner
        if (bends.Count > 0) {//could optimize here by making it only check first and last bend point
            List<int> deleteBends = new List<int>();
            for (int i = 0; i < bends.Count; i++) {
                Vector2 prev = A;
                Vector2 nxt = B;
                if (i > 0) prev = bends[i - 1].pos;
                if (i < bends.Count - 1) nxt = bends[i + 1].pos;
                if (!DoesLineOverlapCorner(prev, nxt, bends[i])) {
                    deleteBends.Add(i);
                }
            }
            for (int i = deleteBends.Count - 1; i >= 0; i--)
                bends.RemoveAt(deleteBends[i]);
        }

        //Calculating new total length of rope
        if (bends.Count == 0)
            totalLength = Vector2.Distance(A, B);
        else {
            totalLength = Vector2.Distance(A, AConnect) + Vector2.Distance(BConnect, B);
            for (int i = 1; i < bends.Count; i++)
                totalLength += Vector2.Distance(bends[i - 1].pos, bends[i].pos);
        }


        if (visualizer != null) visualizer.Update();
    }

    private void CollideWithCorners(Vector2 la, Vector2 a, Vector2 lb, Vector2 b, int bend, int recursion)
    {
        Corner? firstCollision = null;
        float firstCollisionDist = float.MaxValue;
        foreach (Corner c in corners)
            if (DoesLineOverlapCorner(a, b, c)
                && c.pos != la && c.pos != a && c.pos != lb && c.pos != b
                // && Custom.BetweenLines(c.pos, la, a, lb, b) && Custom.BetweenLines(c.pos, la, lb, a, b)//old sweep function that would give some false positives
                && (Custom.PointInTriangle(c.pos, a, la, b) || Custom.PointInTriangle(c.pos, a, lb, b) || Custom.PointInTriangle(c.pos, a, la, lb) || Custom.PointInTriangle(c.pos, la, lb, b))
                && Mathf.Abs(Custom.DistanceToLine(c.pos, la, lb)) < Mathf.Abs(firstCollisionDist)) {
                firstCollision = c;
                firstCollisionDist = Custom.DistanceToLine(c.pos, lastA, lastB);
            }

        if (firstCollision.HasValue) {
            Vector2 bendPoint = firstCollision.Value.pos;
            bends.Insert(bend, firstCollision.Value);

            Vector2 divPoint = Custom.ClosestPointOnLine(la, lb, bendPoint);

            CollideWithCorners(divPoint, bendPoint, lb, b, bend + 1, recursion + 1);
            CollideWithCorners(la, a, divPoint, bendPoint, bend, recursion + 1);
        }
    }

    public bool DoesLineOverlapCorner(Vector2 l1, Vector2 l2, Corner corner)
    {
        IntVector2 cornerDir = new IntVector2((corner.dir == FloatRect.CornerLabel.A || corner.dir == FloatRect.CornerLabel.D) ? -1 : 1,
            (corner.dir == FloatRect.CornerLabel.A || corner.dir == FloatRect.CornerLabel.B) ? 1 : -1);

        if (l1.y != l2.y)
            if ((cornerDir.x < 0 && (Custom.HorizontalCrossPoint(l1, l2, corner.pos.y).x < corner.pos.x))
                || (cornerDir.x > 0 && (Custom.HorizontalCrossPoint(l1, l2, corner.pos.y).x > corner.pos.x)))
                return false;

        if (l1.x != l2.x)
            if ((cornerDir.y < 0 && (Custom.VerticalCrossPoint(l1, l2, corner.pos.x).y < corner.pos.y))
                || (cornerDir.y > 0 && (Custom.VerticalCrossPoint(l1, l2, corner.pos.x).y > corner.pos.y)))
                return false;

        return true;
    }

}





   JLJac on August 26, 2015, 07:03:32 AM:

@Franklins Ghost, thanks! I actually did spend too much time swinging around once I implemented the thing, so I had to remove the player from the development room to be able to continue hahaha :D

@JobLeonard, yup exactly, when hitting a corner I split the rope in two at that point and then apply the same logic on both the new segments recursively - stepping down in a tree like way until all the intersecting points have been handled. I actually only calculate distance for the points that are inside the sweep area, but what points are inside the sweep area is determined using a triangle/point overlap which calls the line/point distance three times haha  Cheesy So yeah...

Working with Rain World has made me become pragmatic rather than idealistic when it comes to optimization - usually all attempts at optimization of stuff like this are utterly soaked by some pathfinding line that is called 14 000 times per frame, outweighing anything that could or couldn't be done differently in a thing like this astronomically. So I've started to gravitate towards writing the easiest, cleanest solution, and then if there is a performance problem optimize it. So far, no problem with performance! Most rooms seem to have less than 100 convex corners anyways, so it blazes through those pretty quickly. If I were to optimize however, I'd take out the tiles that are affected by the sweep and find the corner points in there frame by frame. As most swipes are probably very small and not overlapping any corners that'd likely save some time. For a non-tile based situation like your sketch you could divide the space into sections and only check the points in the affected sections.

I do think that the convex hull algorithm could be useful as an optimization in a non-tile based scenario, but it would have to be complemented by something, as not every convex vertex is necessarily part of the convex hull:



@Christian, no comments  Who, Me? Yet  Who, Me?





   jamesprimate on August 27, 2015, 06:52:11 AM (Last Edit: August 27, 2015, 07:38:38 AM):

Quote from: Princessa
will it be possible to play the game without killing stuff and eating bats? Again, if not, please consider.

Most of the fundamental mechanics of Rain World are built around the core idea of the player creature being at the center of an ecological triangle as both predator and prey. Through that we're able to explore the concept of resource scarcity on a micro and macro scale through the narrative design, the world design and down through the gameplay, etc. What happens when an ecology of creatures (or civilizations) are forced to compete for a pool of dwindling resources in a world with a climate dangerously out of whack? I want the player to feel the existential pressures of this, the bleak prospect of comfort and even survival slipping further and further out of reach as time goes by, not through "enemies" or "bad guys" but only due to the consequences of the player characters basic needs for survival and the natural self-preservation behaviors of those around it. For me, thats the thesis of the game and something i feel very strongly about conveying, for reasons that should be fairly obvious.

That said, I really like the idea of the game not forcing a players hand, allowing the game to be playable in a variety of ways provided they fit the criteria of the central game mechanics of "get sufficient food" and "survive rain cycle". These are "emergent narrative paths" that open up based on how the player naturally approaches the game and i'd like to support and encourage them where possible. "Vegan Slugcat" is hard because it compromises a good deal of teh structure already in place, but if things work out in a certain way it could *possibly* be explored as an achievement path later in the polish phase. But other than the necessary sustenance it should currently def be possible to get through the game as a pacifist using entirely stealth and misdirection. In fact, Joar even has a system in place to reward altruistic behavior, though we'll keep quiet on the specifics of it for now.

Note: from my experience of the alpha, it is entirely possible to play the game without purposelessly killing other animals. In fact, it is appropriately difficult (often impossible) to just run around murdering all of the predators hunting you.

This is def a key element as well. Its not fleshed out yet, but there is also a system in place where the more aggressively you play, the more aggressive the creatures around you become. If you kill weaker creatures, it opens up their ecological niche to other more dangerous creatures, etc. Plays to both the thesis of the game and creates a challenging "warrior" emergent narrative path, etx etx.

A lot of this stuff is really "balance focused", so nothing were touching right now and very subject to change. Plenty of work to do just getting the core game and geography in place.





   jamesprimate on August 27, 2015, 09:30:42 AM:

i wouldnt take much from the audio in the coub videos, as coub automatically apply volume normalization and huge amounts of compression that isnt in the actual audio. you can hear it really strongly in the leviathan video, which should be all subtle background sounds and ambient water swishes with tons of headroom. whatev.





   jamesprimate on August 27, 2015, 04:37:35 PM:

Thank you based oldblood!

Anyway, I'm off to PAX Prime for the next few days, to interact with the masses! If you happen to be there too, I'll have the newest build [150826-b] to play over at the adult swim games booth so stop by and say hi Gentleman

Joar is going to keep on trucking here, so I expect to have like 5 new pages of devlog to read when I get back  Cheesy





   JLJac on August 31, 2015, 07:09:35 AM:

So happy people are enjoying the game  Grin

@prinsessa, The game has creepy elements, but we don't want to go all out horror!

@Teod, Yup, we're totally aware of the promo material situation! It's just that it's just the two of us, and we're all caught up in making content atm. When we finish the map up (soon) we'll probably need to get a grip and make an effort in those areas.

Update 467

Tube worms!



(Sorry about the gif artifacts!)

These guys shoot a mucus rubber slime tongue thing at a wall or a pole, tube along it, retract it, and shoot it somewhere else. Sometimes they hit a creature passing by, or each other - it can end up a pretty tangled mess.



If you catch a creature with it and then release it, it will continue to dangle from the creature but try to attach to terrain with the other end. This means it can be used to restrain creatures - In two player mode with my cousin we've had a lot of fun trying to tie down a vulture with a bunch of these, as well as creating horrible tangled messes with for example a vulture, a lizard, three worms and the other player in a katamari ball of despair.





   JLJac on September 01, 2015, 11:13:56 AM:

For science!



Update 468

Next creature coming along! This time it's turn for "daddy long legs", a huge spider monster with thin tentacle legs.



Currently working on locomotion, trying to get the legs right and have the thing feel weighty as it moves. I want to make it so that the legs are at their strongest when they pull, so that the body is basically suspended between the legs, and it has to get legs in front of it in order to move forward.

The generic tentacle class is coming in handy yet another time! This time I'm rolling a hybrid between the old tentacle code and the new rope physics developed for the tube worm - the tentacle behavior is similar to the vulture, but the rope physics engine is used to connect the segments of the legs making them a bit more solid when it comes to terrain interaction. These very long legs were sort of unforgiving visually as you'd see any movement through terrain clearly, but this combination of methods seems to be something I think I can make look good.





   jamesprimate on September 01, 2015, 06:02:39 PM:

Is there going to some kind of Sandbox mode? I'd love to just an empty room or some enclosed maps, where you can spawn different species to watch how they interact, play around with tube worms, etc.

Especially watching the different species. I have to say, this game has this incredible voyeuristic quality, where simply watching the different creatures is just fascinating. After my slugcat gets killed, I tend to watch for a few more minutes to watch lizards fight over the carcass or fight each other. It's so cool.

I'd love to have a separate mode to enjoy that without having to worry about the coming rain or other dangers

Like a mode titled "Vivarium" or something like that

yes definitely! we were actually just talking about that a little bit. in the old Lingo alpha, multiplayer and sandbox were combined, so you could throw creatures and players into levels of your choosing and just go at it. what were planning now is a bit of an elaboration on that, tying in the narrative portion of the game so as you explore the world in single player / co-op, you are unlocking new content (rooms, regions, creatures, etc) for use in the multiplayer/sandbox mode. this will get us a lot of extra mileage from fun stuff like the water elements, tube worm grapple, cicada jumps, etc., that otherwise would just be confined to a region or two.

but more related to your question, i know Joar is super keen on having some sort of ecosystem observation mode, so a "vivarium" that pulls from these same elements sounds perfecto.



Also hey hello hi im back from PAX! Did a ton of interviews and talks with media peeps about Rain World, so i expect to see that stuff popping up the next week. Probably nothing new for you long-time devlog readers, but who knows!

We had front and center billing at the adult swim games booth, which was pretty slick...



and got to finally see the new slugcat pup plushies that Sanshee is going to be putting out...



and most importantly, the game didnt even freeze ONCE. Tears of Joy







   JLJac on September 01, 2015, 10:51:05 PM:

Welcome back James!  Grin Grin

Joar, between raindeer and this thing, you're going to give a lot of people nightmares. Keep it up!

Oh man, you don't even know...  Who, Me?

Wow! I really like all these creatures. But what about the biomechanical touch the seaworm got? I thought you would like more creatures to have it. Would fit the setting perfect. And it adds a lot of creapyness. Until now, only Jaws has mechanical jaws.

Good call! This one will have a quite interesting design ~ I'll not spoil it but let you guys see it as it develops!

...Like a mode titled "Vivarium" or something like that

Yes, I'm also fond of this aspect so I'd like to see something like this go in the game. Maybe not a separate mode per se, but something where you can just watch, maybe as the credits roll or the start screen or something. Also I don't see why sandbox mode should force you to spawn players, you should be able to just place a few critters in the arena and see what happens!

...it seems like he's not moving with his legs, but rather just dragging tentacles around where he moves..?

Yep ~ that's actually a perfect description of the task. What is going on is the latter, what I try to make it look like is the former. It's the same for all the creatures in the game, none of them actually "move with their legs" in an actual sense, rather they are just pulled along and then made to look like they're affected by the legs with smoke and mirrors. I've been achieving results I'm happy with for the other creatures, so I think I will for this one too!






   JLJac on September 02, 2015, 12:40:40 PM:

Yeah, that's the idea! Violence as a messy last resort when everything else fails - never a goal in its own right.

Update 469

More daddy long legs work. The locomotion still has some wonks, but it's getting better. This creature has a new challenge - it's more procedural than most because this time around the body shape and the amount/length of the tentacles are randomized as well, not only cosmetic details. This introduces the difficulty of not knowing exactly what the body I'm writing locomotion code for will look like, but at the end of the day the general body plan is always similar enough for it to work - chunky body in the middle, halo of tentacles around it.

This creature will use its tentacles to grab, and today I did some work on making it reach into narrow spaces to try to pull you out. What's tricky about this is making it able to think about how to interact with spaces it's not actually allowed in itself. The solution I'm going with is to rely on the tentacle pathfinding I already have - the tentacles are sort of autonomous and just gives the main AI some hints on how to make their activities easier. This autonomy should also bring with it the ability to hunt two or more different prey with different tentacles at the same time.






   jamesprimate on September 02, 2015, 04:01:35 PM:

awesome progress. found a PCGamer interview



Whoa, some cool details in there

James, could you give some more details on that dynamic difficulty and the whole ecosystem vacuum/aggressive vs altruistic system? Lizards can eat bats now?

Sure, but not too much more to tell yet. Joar has had the framework for this system in for quite a while actually, and the effects can be seen currently in the behaviors of the cicadas and the jetfish. But its one of those numbers things that's probably going to require a bit of fussing with and balancing to make it work well, so we will get into that more when we're in the polish phase, where the world is complete, creatures are done and we have this big ecosystem web of creature behaviors to mess with. I think it should be pretty fun! Really looking forward to what Joar can do with it  Smiley

As for your other question: so far lizards don't really eat bats (though they might snap at them from time to time.) Did I say something otherwise in the interview? If so, blame it on 4 days of PAX craziness Tongue





   JLJac on September 03, 2015, 12:06:12 PM:

@EddieBytes thanks for the input! If I understand correctly I think this is basically what I'm doing, except I can't just calculate leg positions for the final position, but have to do it continuously along the way to get there as well. The main thing would be points 4 and 5, that's basically where the difficulty comes in. Please feel free to elaborate if I didn't understand you properly!

fun to see where the challenge would be
Cheesy Cry Cheesy Cry

Update 470

Did some work on the tentacles, trying to get them to properly probe in tunnels without clipping through terrain. Also I have a basic system for dividing tasks between tentacles so that only tentacles not strictly necessary for locomotion are tasked with hunting etc. On a floor it could be pretty cool that the creature in some tense moment abandoned locomotion and collapsed to the floor, using all tentacles to hunt. However, Underhang architecture is all about ceilings and death pits below, and in a context like that it has to be always supporting itself.

James and I had a quick talk on creature design. As it's coming along, the daddy long legs has slow body movement, but pretty quick tentacle movement (which can't easily be turned down because it also uses them for climbing, and then the body would be even slower) and super long range. This means that basically the creature becomes a slow moving little thing with a screen-sized orb of death around it, which is a problem as it will make it practically impossible to move through the rooms.

We talked a little about this issue and came up with a solution that I think is both gameplay appropriate and pretty cool. The idea is that the daddy is blind, instead it uses hearing and its sense of touch to hunt you. When you collide with the tentacles it will be made aware of you, but not immediately grab you. If it hears something move, it will send a tentacle over there to feel around and check it out. This creates a reason for it to make sense that the creature is basically only long legs - it sits in some corner spreading its legs out throughout the room like a spider's web, and when something moves through there it tries to grab it and move it towards its center.

I've gotten started on this alternative sensory system by making it blind, but give it hearing (just turning on the hearing module, yay modular AI!) and make it able to "see" creatures that are overlapping its tentacles. Seems to work, but is so far a little unpredictable which is cool because it makes the creature feel alien, but definitely makes it harder to play against. Will need some tweaking.

Next up is making it able to send a tentacle to check out an unknown sound. This means that tentacles need to be able to switch between three tasks, Locomotion, Hunting and Examination. The tasks should also be prioritized in that order. More visually interesting updates tomorrow!





   jamesprimate on September 03, 2015, 03:07:07 PM:

I see whats going on here. Gimmy wants this devlog to go on for 5 MORE years  Who, Me?





   jamesprimate on September 04, 2015, 05:34:21 AM:

We already have plans for our next game after rain world, it's going to be called "sleep for an entire year and contemplate our misspent youth."





   JLJac on September 04, 2015, 12:59:15 PM:

Wow, that poster is really really cool!  Grin

Update 471

Tentacle task allocation - blue is locomotion, green is checking a sound, red is hunting (without being able to actually catch me atm).



The creature is blind and the touch/hearing hunting behavior is now working. It plays weird, not like any of the other predators in the game. I'll have to try it more extensively together with the grappling hook, as those will occur in the same area and the grappling hook is sort of a game changer. It's very interesting though - you can run right past it no problem, but as soon as you start jumping around those fast tentacles are right there. Will be really interesting to see how this one plays combined with other creatures.

Making it able to always keep enough tentacles dedicated to locomotion to not fall down was a bit of a challenge but I think I figured it out. Spawned 7 juicy cicadas that it felt very much like hunting with 7 different arms - and made sure that it didn't fall to the ground in that situation, which should ensure that it doesn't fall to the ground in any other situation either!





   jamesprimate on September 06, 2015, 03:48:06 PM:

ive been playing with the current daddy build the past few days and they are AWESOME. very unique creature with a completely different AI "personality." Very alien. i was telling Joar, i think its an addition on par with the vulture as far as how it expands the ecosystem experience.

per the tentacle discussion, its just flat black tentacles in mine and i dont really think anything further is necessary for visual indication... the ones that are grabbing for you are the ones that are grabbing for you. basically if you are close enough to where you are thinking of which tentacle is which, its already too late  Evil





   JLJac on September 07, 2015, 01:16:21 PM:

Update 472

Working on a skin for the big daddy! Not finished yet, but lots of progress today.



First of all, I smoothed the tentacles out with a bezier curve. Bezier curves are actually super easy if you're familiar with 2D lerping.



As you can see from this wikipedia gif, it's just lerping from one thing to the other, then lerping from that to another lerp point, etc ~ Lots of lerps basically!

Tentacles still have some issues with vibrating back and forth. That's not in the skin but in the actual tentacle behavior - however I think I can perhaps solve it in the skin by just checking for repeating positions and ignore them. We'll see what's easiest.

The creature will also get some detail on its body.





   JLJac on September 08, 2015, 09:48:23 AM:

In case this is useful you can compute point collision on a bezier with that http://blog.gludion.com/2009/08/distance-to-quadratic-bezier-curve.html might help with contact

Oh that's impressive!

Now I need to see that thing to fight vulture and the sea monster. From the current looks, it should eat the vulture, but lose to the sea monster (although I wonder if it would be possible to make them fight in the real game).

Yeah we've been thinking about this too. It should have some way to handle creatures larger than itself. Don't have any definitive solution just yet, but maybe it can wrestle them for a bit, get a "taste" and then give up and leave them alone. Don't want to go too complex as this creature doesn't seem like the contemplative type, it's more like a "grab and eat" kind of personality.

Maybe it's just me, but the bendy tentacle legs just seem kind of weird for a spider-like creature.  When you think of a spider, you think of stiff legs with multiple joints.

I'm not sure if that would be feasible with your current system, but I feel like it'd look much more spider-like, and in turn, creepier.

This actually points out what the workflow usually goes like ~ Do you remember how the vulture was used to be called "Sky Kraken" way back? Basically I set out with one idea, but then it changes as the creature develops. This is what's so fun about being the programmer and the artist! I don't have to make the thing look like some sketch or some original idea, if the spider looks cooler as an octopus halfway through, I can make it an octopus Smiley

The idea for this creature is that it's sort of both spider and spider's web. Its idle behavior is sitting in some open place with the tentacles spread out, hoping for something to run into them.

Update 473

Now you can see when it hears you, which makes it a lot easier to play.



The decreased fuzziness surrounding what the creature is up to makes it way more fun to play against, now you can for example throw a rock to distract it and get an immediate idea about whether the distraction worked.






   JLJac on September 08, 2015, 11:44:00 AM:

This kinda feels like a Portugese Man O' War, in that I would guess it's not really one creature but a colony of different creatures cooperating together.
Yeesssss it got across  Tears of Joy

I was thinking about the size comparison between species. I imagine it goes:
Leech > Bat > Frog > Snail > Lantern Mice > Slugcat > Cicada > Lizard > Vulture > Rain Deer > Long Legs > Leviathan

Missing anything?

---

And I have to say, I love how the "heads/eyes/sensors" just subtly twitch in the direction of sounds. It makes it look very instinct-driven, almost kind of spastic and mindless. Completely focused on locating prey and eating

Not checking the code or anything, just off the top of my head, I'd say it's:
Leech > Bat > Snail > Lantern Mice > Cicada > Frog > Slugcat > Lizard > Vulture > Long Legs > Rain Deer > Leviathan
Though the vulture/long legs relationship might switch around if you count only the body, not the limbs.

I keep thinking of the long legs as "not really alive, just a pattern of matter set on consuming low-entropy matter and turning it into more of itself" but then I realize that's basically what life is haha!





   JLJac on September 09, 2015, 12:23:14 PM:

Update 474

Remember these guys? The yellow lizard was a subspecies in the lingo build that is now making its return.



They hunt in packs, using their antennae to telegraph your position between each other. This basically means that if one of them can see you, all of them can.

They also use their numbers to their advantage by trying to surround you. In the gif you can see how they use two separate paths to get to me.





   JLJac on September 09, 2015, 01:40:09 PM:

Yep! Less infighting - longest antennae is the alpha Grin





   jamesprimate on September 09, 2015, 05:28:23 PM:

love these new yellows so much!!!


So uh... have you thought of nature-documentary style teasers?

great minds! been thinking along these lines as the concept for the trailer for over a year  Coffee





   JLJac on September 10, 2015, 12:22:06 PM (Last Edit: September 16, 2015, 12:11:23 PM):

Update 475
One of these frustrating days. Working with the yellow lizards I got annoyed with them getting stuck in corners, so I dove into some of the old lizard movement stuff, trying to make it smoother. Problem is that the code is a year and a half by now, and not so great. Soooo a lot of messing around just in order to understand what I was even looking at. After a lot of work I managed to get the thing done I had set my mind to, but I can't tell for sure if it's a great improvement. However, I've been tidying up that old code a bit and refreshed my memory on it, for whatever that's worth  Shrug





   JLJac on September 10, 2015, 10:50:49 PM:

Or introduced a few!





   JLJac on September 15, 2015, 08:55:56 AM:

Hi everybody! Yesterday and today I'm working on a creature that I won't announce here - because it's a fairly quick one (not to say it's not cool though Wink) I felt that this way you guys would get the most surprise per day of devlog silence, if you get me.

There are a few creatures in the game now that haven't made it to the internet - not very many at all, but hopefully enough to make the actual game a bit exciting even for you most veteran devlog readers come release.

Normal posts start again tomorrow!





   JLJac on September 16, 2015, 12:20:07 PM:

Update 476

And so we're getting started on the next creature! I've made a bunch of sketches today, but I think it's more fun for you guys to see it develop from the good old red dots, so here we go:



More red dots attached tomorrow!

In other news, James has been able to assemble the current region, and it's looking good! This one will be sort of the final stretch in the game, and because of that we've decided to go more linear - instead of the standard sprawling rooms it's supposed to be more of an epic journey where you push through and have to fight for every step along the way. The Daddy Long Legs have proven to put up a bit of a too rough fight though it seems, so that's going to need a little tuning. James tells me they eat everything and clear the rooms - I haven't seen it myself but I can certainly believe it! This is standard stuff after getting a region together though, and we'll be able to sort it out pretty quickly.





   jamesprimate on September 17, 2015, 03:16:56 AM:

a good part of the nerfing will just be making it unable to go through shortcuts, limiting the trouble it can get into a bit. also doing this region in a more linear fashion really brought into focus one of the key aspects of the game, the inherently chaotic nature of the open world ecosystem model. creatures can go anywhere and do anything they want to. it can be both the main strength of the game if handled well, and completely destroy all your well-laid plans if not.

Underhang region sort of skirts that line a bit. its playable, but the linearity combined with the HUGE reach of the daddy makes it insanely hard at times. basically, if a daddy decides to camp in the middle of a key room, there is just nothing you can do. so i think rather than nerf the daddy TOO much, adding a couple of strategic alternate route paths, allowing you (or the daddy) to go around, will definitely help make this more playable without removing the "teeth" so to speak.

I was hesitant to do this earlier, as the region is already insanely huge (takes me 4 rain cycles and 24 minutes to speed run from one side to the other with no creatures), but ive identified a few key spots where i could add a single 2-screen room to each and it would both keep the structure of the region and should solve the daddy bottlenecks.

off to it then!





   jamesprimate on September 17, 2015, 09:41:28 AM:

Quote from: oldblood
But props to you for being ready to expand it further to improve the experience and give the player (and ecosystem) more room to wiggle...

hah! yes, we are very good at feature creep. very very good at feature creep Shrug

Speaking of which, the secondary paths around the underhang bottlenecks and that little bit of daddy nerfing worked out very well! The updated version of the Daddy acts like a scary creature rather than a giant impassible scrub brush of death. Joar fixed their movement, added a very cool "thunder-blindness" disruption, and some tweaking to the ecosystem interactions helped out quite a bit. With these chaotic systems its such an odd balance. One seemingly minor tweak has huge implications for play. In this case, Joar made the the Tube Worms quieter, which completely affected how the sound-hunting Daddies behaved in large rooms.

Sort of along those lines, one of my favorite emergent encounters yet happened in this region. Of course I had planned plenty of "set-piece" style encounters in this region, hives of yellows, death-defying platform swinging around daddies, etc., and all that went off really well, but the one ive been having the most fun is of course the one that happened completely by accident:

In the first few Underhang rooms are a sub-region called "the legs", where you climb the interior of a large support column. The platforming is pretty tricky, its where you first encounter the tube worm grappling mechanic, so i kept is fairly free of predators, but since its a decent stretch of the map, just for fun a threw in 2 white lizards to spice it up a little. The geometry here is ideal for them, but i didnt realize how good it was going to be. It basically turns into a 10 screen climbing duel with the whites, fighting to climb from platform to platform and swinging around their tongues, knocking them off platforms with rocks, only to have them scramble back up after you. Then all the noise attracts a daddy of course, and it turns into complete mayhem just as the rains start to fall...

Now thats in there permanently and im taking full credit for it Cheesy

Anyway, Underhang is a wrap for now, so on to region 11!





   JLJac on September 17, 2015, 11:02:24 AM:

Been playing this new region a bit, and I've been having a lot of fun! By this point James is way past black belt in level design, and the rooms have super fun platforming challenges that work really really well with the creatures. The rooms having multiple paths through them has been standard for some time, but for this region he's taken it to the next level by building the rooms to be dual purpose, each is essentially a level for rain world and a level for whatever game it becomes when you pick up a grappling hook - with the ability to switch between the two at any point. And most of them have multiple routes even within those  Shocked

To sort of give you an idea there's this room that has daddy long legs crawling about, a bunch of tube worms, and a pretty big pack of yellow lizards. Daddies like large open spaces, the yellow lizards like maze like structures where they can do a lot of flanking and surrounding their prey. Standard slugcat likes platforms and poles, slugcat with grappling hook likes smaller floating pieces of terrain to grapple and swing from. The room is 10 screens large, with all of these environments flowing in and out of each other, here and there with overlaps that force the creatures to encounters. Throughout the entire thing are multiple grappling hook routes and routes for when you're without the hook, some of them sharing certain passages and then diverging again. All of them however come together at a bottleneck in the middle of the room, forcing you to move through all the different little sub-environments and be subjected to their critters. This means that you're sort of forced to go through most of the room, but you can still shape your experience depending on your resources and preferences. Amazing level design!





   JLJac on September 18, 2015, 07:29:19 AM:

Something like that could be fun! Extra multiplayer modes etc are probably going to end up happening post release though, we're on a pretty tight schedule here!

Update 477

After making a bunch of creatures that slowly and careful place their long shaky legs in thought out positions, I've tired of that and want to do something that just paddles along and couldn't care less where its legs end up:



Running locomotion still needs a bunch of work though, as you can see, and it will also need to be able to place its feet more "rain world classic" (ie lots of raytracing, giving potential feet positions scores and comparing them, etc etc) for when it's still or moving at a slower speed.





   JLJac on September 21, 2015, 12:11:59 PM:

Hi! Welcome  Smiley

Update 478

This one has been surprisingly troublesome for not being very large. Now I think I have it to the point where I can smooth stuff over a bit in the skinning phase and have it look okay, and the locomotion is also reliable enough to always get the creature from A to B.



I've been tuning numbers all day... And still ... not ... quite ... there. But, I'll move on for now, maybe the later stuff I add will magically make it work.

As you can see from the gif it has two modes, one when staying still or moving short distances, and then a sprint. Transitioning between the two certainly isn't flawless, but I think the skin phase can do quite a lot to cover that up.





   JLJac on September 22, 2015, 12:18:01 PM:

Oh man robotics seem like so much fun!

Update 479

Visual illustration of me trying to keep an even pace with James on the dev schedule:



(If you imagine the bird responding to 50 emails in that stretch as well)





   JLJac on September 24, 2015, 05:00:45 AM:

Hi there  Grin

Update 480

The goose chase continues!



Still a bit of details to go, but we're getting there. The pixelly plumage is WIP (the idea is that there'll be a bit of variation there as with the lizards/jet fish etc), and the legs will need some more work as well, along with the eye, so... basically a little bit of work on everything until this beast is done.

The environment in the gif is brightened to help you see, this is actually a sub-region of Shadow Urban, meaning that it's supposed to be too dark to navigate unless you have a light source.





   jamesprimate on September 24, 2015, 02:10:55 PM:

yeah the glowing trail is siiiiiiiiick. now just imagine a pack of them running through the dark  Hand Metal Right





   JLJac on September 25, 2015, 12:53:28 PM:

Thank you thank you thank you all!

That's one freaky bird... Amazing work as always.

...Do you get tired of hearing us say the same compliments over and over again?
Actually it's very nice to know that there are still people out there who are excited... Been at it for a loooong time now  Shocked

Is it supposed to be a bio-mechanical thing? That's the vibe I'm getting from the legs and the almost rhythmic/mechanical snapping of the beak. The light trail on the eyes looks great

Edit: Slowed down that GIF a bit
http://i.imgur.com/LKz0mAi.gif
You can see the leg pistons adjusting as it clambers up ledges and jumps around. I love details like that

Thanks! Yeah, this one has some pretty obvious machine parts on it!





   JLJac on September 25, 2015, 01:01:49 PM:

Update 481

Some cosmetic individualization and a bit more work on the behavior. Just because you're a pack doesn't mean you're friends...



Also I implemented a blinding effect from the flare fruit. It should theoretically work on all creatures, though not all of them have custom animation to convey it as clearly as this one - yet, at least.






   JLJac on September 28, 2015, 02:35:04 AM:

Thank you thank you thank you  Grin

Will you make Slugcat slightly vulnerable to its effects as well?
Maybe? A complete blindness might be a bit too much, but something is not out of the question.

Really, it just looks like a rip off of Sweet Dee from Always Sunny.
Well, at least we wear our inspirations on the sleeve! You could tell straight away!

So are those fireflies there to make you nervous because you can't in a split second tell them from a bird's eye? Because that's pretty brilliant
That is art by accident - the flies were made before we started thinking about the birds, but when was working with the birds I noticed it as well and did play along with it a bit. Pretty representative for the process we have actually - as we're both designers and devs we can freely pick up stuff like that when we come across it.

I'm curious about how their pack behavior will be different from the yellow lizard pack. They have no antennas, so I expect less coordination. They probably just charge and pile up on you instead of carefully flanking.

I'm also curious about how they interact with lizards. Do they eat them like a prey, or just scare away like a competitor?
Yeah, they basically don't coordinate. These guys are no geniuses, they rely more on snapping constantly and hope that somthing will end up between their jaws. Their interaction with any other creature is just snapping at them a lot, haha!

you seem so experienced now programming AI on ragdolls like these bio mechanic things. I'm so curious about how you programmed it, i guess there is A* for pathfinding ? but how does the ragdoll find its balance and learn how to walk, some genetic algorythm ?
i would just say they look a bit sloppy when they climb a high platform, the limbs get a little mixed together, but it's still extremeley cool!
Yep, A*! The trick is actually that it's not a ragdoll, so it doesn't need to find balance etc. To clarify - if I was using the "animate a ragdoll" method, I would start out with a thing that was limp on the ground, but behaving correctly in terms of physics. Then I'd have to make forces pull at this thing, and I'd have to worry about a million things such as balance.

Instead I work backwards - I start out with a pretty typical "game" movement, a thing that just swishes through the air following the A*. Then I put legs on it, then I make the legs seek contact with the ground. Then I make it so that when the legs are not in contact with the ground, the body is affected by a bit of gravity. Basically I start out with a movement that has nothing to do with physical correctness but which works, and then I add cosmetic details that makes it appear more physically correct. But it's all fake - the legs of these birds for example doesn't consist of the same "matter" as their bodies but are just 2D vectors with no weight etc.

A lot of the behaviors look really sloppy! That's why it's cool to be in this fantasy world with these fantasy creatures. If I were to animate a human looking figure like this I wouldn't get away with it for 2 seconds, but as no-one knows what these creatures are supposed to move like their sloppy scrambling might pass for correct.

Reminds me of sligs from the Oddworld games. I played the hell out of those as a kid.
Oh yeah I love oddworld! Never owned one myself but I played them at a friend's. Good stuff!





   JLJac on September 28, 2015, 01:26:08 PM:

Actually not for this one, but some other creatures have stuff like that - such as rain deer antler size depending in their internal ranking. This is sort of what we're going for though ... by not giving away much information in the game about what's going on except from what you see on the screen, we can get the player to project their own ideas onto the world, and you'll end up with a nice blurry line between what the game can do and what you think the game can do  Wink

Update 482

UI for placing ambient sounds.



Just UI so far ~ no, you know... sounds.





   jamesprimate on September 28, 2015, 02:05:14 PM:

^ FINALLY MY TIME AS COME. mega mega stoked about this Tears of Joy









for those who dont know, i was originally only here to do the audio...   Big Laff





   jamesprimate on September 28, 2015, 02:23:36 PM (Last Edit: September 28, 2015, 04:59:55 PM):

there is a system of inheritability in there, so it wont be all that bad! Like with the lighting and palette tools, Joar has it set so ill be able to set audio templates for regions/subreigons. though... if my workflow with the lighting and palette is any indication, ill likely wind up doing most of it by hand because i am a fuss. The 1% lighting blend difference between rooms matters to me! XD

really looking forward to it. my only sadness is that i cant dive right in just yet. Sooooooon!





   JLJac on September 29, 2015, 12:26:25 PM:

Update 483

Made the ambient sound engine load and play sounds, and made the inheritance stuff work. Ambient sounds ready to go!





   jamesprimate on September 29, 2015, 07:48:37 PM:

yes, what Christian said!

also were not showing any of the narrative / story stuff in the devlog, for obvious spoiler reasons, so WHO KNOWS what sorts of things you'll find when you venture out into rain world proper





   JLJac on September 30, 2015, 08:55:05 AM:

Update 484

Making tiles! The next region is going to be really mazy. With a few lizards in there I think we'll be able to squeeze out a decent pac-man clone from the engine!



The slanted walls of the tunnels enables you to see the creatures in them, even at the edges of the screen where the slight depth effect will otherwise tilt the geometry so the tunnel becomes obscured.





   JLJac on October 01, 2015, 12:27:18 PM:

Yeah I think so too! The maze game is perhaps not quite as strong as the platforming game, but it is suspenseful and fun when there are a few lizards around, and it's a very welcome change of pace. Suddenly the game becomes way more about planning and thinking rather than quick reflexes.

Update 485

More tile work! This is a little bit more exciting, so I'll leave it to James to show it off properly in an environment in a couple of days!





   jamesprimate on October 03, 2015, 02:47:33 AM:

GOING DEEP!

Past week or so we've been working on materials and structure for the 11th (and penultimate) region on our to-do list: Subterranean! Probably won't get into too much detail with the specifics of it since its among the final regions the player will encounter, but suffice to say that its underground, so totally happy to show off some of the deep cave-like elements we've been messing with for the top layer subregion.

Joar has whipped up a *fantastic* new (procedural?) dirt tile material and a pair of dark-ish cave palettes to get us going. Worth noting is that we spent a few days fretting on how to make these work, as both aspects are potentially a bit of a departure from how things have been done so far, but i think it came out really well:



detail: http://i.imgur.com/8wndxmd.png

This sub-region is "Near Surface Subterranean", so occasionally you come across areas where the cave ceiling has given way and shafts of saturated light shine down, illuminating the walls. So we needed a palette that would work with various lighting types and could also be blended with other "outside" palettes for when transitioning to other surface regions. No easy trick, and Joar did an amazing job! I know its subtle stuff, but definitely worth pointing out as I think its the best palette work in the game so far. Here is the same palette, but deeper underground and with only player lighting:



detail: http://i.imgur.com/gyl3kYY.png



experimentations continue... so more soon!





   JLJac on October 05, 2015, 01:19:49 PM:

Update 485

Doing some interesting experimentation. This material allows the user (James) to draw a "destruction gradient", making it so that in one end of the room the tiles might be orderly and in the other chaotic.



Also I've been making a bunch of big tiles. We'll see, they'll probably pop up here at one point or another! I'm sort of leaving it to James to decide what parts are to be considered "spoiler" and what parts of the region he's comfortable showing off, that's the reason for the vague wording  Wink





   JLJac on October 06, 2015, 10:34:30 AM:

Does your destruction gradient also apply texture overlays to simulate wear/tear/destruction, or is it mainly concerned with positioning and edge effects?

It's separate - we already have several erosion effect in place. In the example I made it so that there was most erosion in the same place as where the tiles are the most displaced as that seems like what would make sense in most cases. I wanted to de-couple them to give James that little extra bit of control though!

Update 486

Starting on save files. Today I started out in one region, moved to another and got into a shelter, and then was spawned in that region instead. Milestone!





   jamesprimate on October 06, 2015, 01:48:07 PM:

^ this is so huge. its basically the hinge point of the entire progression mechanic, hahaha. with this functional, rain world is OFFICIALLY A VIDEOGAME.

you would think that something so essential we would have done before, in the past 2 years, right? Hey, better late than never!





   jamesprimate on October 06, 2015, 02:08:11 PM (Last Edit: October 06, 2015, 02:46:43 PM):

thats because hes only showing a quick mock-up room specifically to demonstrate those new ceramic tiles and the new "ceramic chaos" tile effect. as im sure you can tell from the previous screenshots of actual game content, weve got toooooons of erosion and distortion tools at our disposal (like, an absurd amount), they are just not being used in this demo room. 


per the save state question, even though its early and joar will probably have much more to say on this, i can tell you that the creature AIs are based out of hundreds (thousands?) of "dens" scattered throughout the world, which are nodes that the creatures use as nests basically to drop off food and find shelter, etc. The creatures themselves perpetually exist in abstract space throughout the current region the player is in, so they will be moving around, hunting each other, etc. off-screen, before eventually having to find a den to take shelter in when the rain cycle comes (or die.) so long story short, im guessing that the save state of the creatures will be based on their den position.

couple this mechanic with Joars individualized random-seed creatures, and there is a ton of cool stuff we can potentially do with this: creature migrations, ecosystem evolution based on survival rates, etc etc., but first things first!





   JLJac on October 07, 2015, 01:16:50 PM:

Because the checkpoints are bound to the rain cycles, I won't have to save the position of every single object down to float space vectors - for the creatures that made it back to their hiding holes I can just save the den coordinate, and the rest I can throw away as dead  Hand Thumbs Up Right

Update 487

Swarm room depletion. I have it set up now so that if you are eating from swarm rooms they deplete, and that data is stored to the save file. At the moment it's set up so that each cycle you can only deplete one swarm room, which will hopefully create a nice pace to forcefully propel you to explore new areas.

From my few test runs, it seems like the situation becomes pretty dire pretty quickly Who, Me? This is going to need some balancing! There are many things that can be done though - such as spawning slightly more flies in the swarm rooms that are left when they get fewer, or lower the starvation threshold. Really fun to actually be playing this as a real game!





   JLJac on October 08, 2015, 10:40:31 AM:

Welcome! Yeah, agreed on all points! The "carry over" of bats has been a thing that has been up since "maze runner" days, and it's not at all out of the question. Would just have to come up with some UI solution for it that seems clean enough, and some kind of cap so you don't manage to get 55 bats through some exploit in one run and then don't ever have to hunt again.

Suicidal exploration should be kept at a minimum. One VERY rough measure that could be taken against this could be some kind of extra penalty if you die two times in a row - such as throwing you two save points back (naturally with a corresponding lowering of general game difficulty). That's... rough, though. The idea is that you should have enough time to both search and catch bats within the same cycle - if that's viable there won't really be any reason to do the suicide missions.

In later versions it has been made a bit simpler to catch the bats when you are in the swarm room. The idea behind this is that the bulk of the time should be spent exploring looking for the swarm room, not jumping around in frustration trying to catch some elusive bats once you've actually gotten there. Together with a lower bat quota I think we have been taking some steps in the right direction since alpha days.

Visual indicators (UI or in-world) leading you towards the bats might become necessary, but if it's possible we'd like to do without it. Would be a shame to impose on the atmosphere of the rooms with some ever-present visual element like that.

All of these ideas are totally possible, and it's a lot of fun to finally have arrived at the point where we're implementing and balancing stuff like this!





   jamesprimate on October 08, 2015, 07:08:44 PM (Last Edit: October 08, 2015, 07:17:28 PM):

You could counter the possible exploitation by making slugcat fatter and slower the more he overeats in a single cycle.

i was thinking the opposite actually, like you can survive a single cycle without enough food, but you go into a weakened "starvation mode" until you make up the food debt. over-feeding carries over a capped amount of food into the next round (the cap could easily be done, just have the slugcat shake its head and refuse to eat more that a certain amount.) then a player could balance "hunting rounds" to maintain health and "exploration rounds" to progress.

a potential solution for that might be to have some sort of food meter system, etc etc., where the first tier is "starvation", second tier is "safe zone" and third is "carryover." This would probably be helpful anyways when the pups come into play, which the player will have to feed.

                              fed   
starvation [ - - - - | - - - - | - - - ] full


anyway, in this example a rain cycle would require 5 foods to survive and maintain a "healthy slugcat." less than that you can survive one cycle in a shelter, but with a negative "starvation" status effect. and if you consume more than that (up to 3 here) the additional food will carry over into the next cycle. Now obviously im talking about a stylized solution and not text with words and Xs, but something like this would be the baseline you want to see:


                               fed
starvation [ X X X X | X X - - | - - -] full



idk, i think previously we had been trying to avoid both status effects and UI, but its time to contemplate it! its interesting, at this point we have the things that we wanted to do with the game pretty well nailed down: the ecosystem, the look, the mood and the huge world exploration, but now its a matter of adjusting the gamification variables and presenting it in a way to encourage the player to continue through. i guess this what happens when you start with an art project and then work "a game" into it!


Along those lines, Joar and I were just discussing how we might maintain the players interest in keeping little sluggie surviving in such a death-filled environment. Especially since its (to a degree) a timed play-cycle, how do we make it so that the player doesnt want to just kill themselves to restart if their exploration or hunt isnt immediately going well?

This food meter system might offer a solution to that as well, if we think of the regions in a more traditional "level" fashion. With the region gates we have built in "level start" points and the shelters can act as checkpoints. A death when "fed" restarts the player at the the shelter, but a death when "starving" returns the player to the region gate that they entered, scrubbing any progression and giving strong incentive to keep sluggie alive and fed throughout.


Then hopefully something like this would allow enough "open world" to keep the gameplay from becoming too forced and linear, but also offers incentive for players that want to progress through the narrative and exploration. Also of course simply adding some sort of "CYCLE 7 SURVIVED" high-score count / achievements at the end of cycles could help further gamify this as well.


thoughts?





   JLJac on October 09, 2015, 08:45:19 AM:

Yeah this stuff requires some thought. In the old game, you only had one shelter and thus eating and surviving was the natural goal. Now when there are many shelters it's easy that the standard play cycle becomes way more about trying to get to the next shelter than about surviving and returning to the same shelter. The priorities has kind of been switched, instead of moving as a means to survive you survive as a means of movement.

There are plenty of possible solutions though. The "carry over" of bats could do part of it - in that case it might become worth it to hang out in the same spot to farm some bats for 2 or 3 cycles. Another way could be to penalize death a bit harder (either just death, or something like dying twice in a row). That we'd have to be careful with though, as we don't want to penalize players for failing too much. Ideally such a penalty wouldn't be a penalty that puts you back as much as something that keeps you from progressing too quickly into areas you can't handle until you have learnt to handle the area you're in.

One option we've been thinking about is that instead of having the game be one very long session, it could be a couple of smaller sessions, where surviving (or "winning") a session is rewarded by some more options for your next play. Sort of like how the "rogue-lightes" such as Binding of Isaac and Nuclear Throne and that whole family of games are doing. Like, slightly shorter sessions but accumulation over sessions.

What do you guys think? Do you prefer games with one long session, or games where you play a bunch of shorter sessions and have something build up over the course of them?

However it goes, we would like to have the player feel a certain satisfaction after the average successful hunt, when you return to your shelter with enough bats to survive. In a situation like that the player would feel the most as one with the slugcat nature, who is all about eating, sleeping and staying alive. When slugcat is happy, the player should be happy too!





   JLJac on October 12, 2015, 09:56:40 AM:

Thanks so much for your input guys! Will be taken into careful consideration. These game mechanic decisions are mostly going to be in a later phase where we try to balance the game and create a good flow, so there is still some time to figure it out. Maybe we can find some kind of golden balance where we can get a little bit of the goodies from a couple of models.

Right now it's kind of silent here because I am doing art for the last region in the game, which we wouldn't want to spoil! I will however spoil that the mockups James has sent me are looking AMAZING!





   JLJac on October 14, 2015, 12:11:16 AM:

The current idea is that if you save the pups, you will be able to play as them (grown up) in new game plus. One idea we were talking about was that each pup would have some increased skill but also come with an increased difficulty (faster/shorter cycles, stronger/more enemies and the like). All of this is very much up for change though as we get to the actual game balancing stuff. It is hard to know what works before having it in front of you and trying it out, and no early ideas are holy in the face of actually getting a good game flow.





   JLJac on October 14, 2015, 02:17:42 AM:

Code question! I'm working on the save states. Currently the save data of a region looks like this:

Code:
<A>REGIONSTATE: REGIONNAME_SU<B>SWARMROOMS_111111<B>POPULATION_Slugcat<D>ID.0.0.0<D>0.0<D><C>GreenLizard<D>ID.3364.0.0<D>198.2<D><C>PinkLizard<D>ID.3363.0.0<D>0.0<D><C>GreenLizard<D>ID.3371.0.0<D>199.2<D><C>PinkLizard<D>ID.3374.0.0<D>203.2<D><C>PinkLizard<D>ID.3367.0.0<D>0.0<D><C>GreenLizard<D>ID.3362.0.0<D>207.2<D><C>PinkLizard<D>ID.3372.0.0<D>199.3<D><C>PinkLizard<D>ID.3365.0.0<D>214.3<D><C>PinkLizard<D>ID.3366.0.0<D>214.4<D><C>GreenLizard<D>ID.3368.0.0<D>215.2<D><C>PinkLizard<D>ID.3373.0.0<D>217.2<D><C>PinkLizard<D>ID.3370.0.0<D>221.4<D><C>GreenLizard<D>ID.3369.0.0<D>221.3<D><C>GreenLizard<D>ID.3375.0.0<D>225.2<D><C><B><A>

The <A> <B> <C> etc are markers for where to split the string as I decode it.

I have opted for this way of doing it contrary to serialization because I feel way more in control - I know exactly what I'm storing, how I'm storing it, and if anything goes wrong I can actually track down the bug. Also it makes sure that I don't store anything more than necessary - with serialization I would worry that some reference somewhere would pull with it an entire chunk of data which I wouldn't actually want to save.

So, right now a creature save looks like this:
<C>GreenLizard<D>ID.3371.0.0<D>199.2<C>
with the key being
<C>Creature Type<D>Identification Number<D>Spawn coordinates<C>

At the end of this, I need to apply the data of something I call a "Creature State". The creature state contains info on the critter's health, and a bunch of other stuff. Some critters have social memory which they use to keep track of relationships to you and each other - this also goes in the creature state.

The problem is that different critters have derived state classes that may contain some extra critter-specific info.

So now I'm thinking, should I just tough it out and write a state-to-string method and a string-to-state method for each critter type, or should I serialize this specific piece of data? Then I'd get a mixture of clear text and binary serialization in the saved creature, like this:

<C>GreenLizard<D>ID.3371.0.0<D>199.2<D>MQCAACbAgAA0wEoBINARYoSERIALIZATIONoSTRINGoAAAwCAAAAAgAA7<C>

My question is - is that just too ugly to even consider? And would it actually do me any good?





   jamesprimate on October 14, 2015, 05:02:54 AM (Last Edit: October 14, 2015, 06:11:55 AM):

Think it's great that you guys are keeping the last region to yourselves. Gives us all the opportunity to find something that we don't know anything about which is always a good thing in a game.

the problem is that im SO STOKED about the stuff going on in this region that its extremely hard to keep it locked up Ninja. no exaggeration that this region is next-level in quite a few ways.... and then we have an arguably even CRAZIER region after that which will also be kept secret! but as you say, i think the resulting player experience of being able to see these for the first time in-game, in context, with the right setup and music and vibe, will be totally worth not spoiling.

my apologies if the devlog gets boring as a result though





   jamesprimate on October 14, 2015, 02:40:19 PM:

ah, easy to misunderstand! the region we are currently working on is the last region that the player will encounter, hence "the final region". But there is one more region for us to make after this one. We did them in this order for some technical reasons, as the other region will have some important visuals-heavy set-pieces, so we want to use this region as practice before getting there.

so yes, even more content! we are content crazy!





   jamesprimate on October 15, 2015, 03:37:43 AM:


Man, what will my TIGSource browsing be without a Rain World devlog to look forward to...




oh dont worry, we'll be here for a while yet im afraid  Cry





   JLJac on October 15, 2015, 07:35:35 AM:

Update 488
Save states are coming together! It remembers what den you're in, what swarm rooms are depleted, and now also a bunch of stuff concerning the critters. Health state is saved, as well as den position. Just now I managed to write to and from text methods for the social memory. I spawned a jet fish in the horrible dry landscape of Suburban region, and pulled it with me to the den. When spawning on the next cycle, it still remembered it was angry with me!

This social memory doesn't have all that much use so far, which is mostly because I have yet to write some little engine that can recognize social events. A negative social event would be throwing a rock at a critter, a positive one might be feeding it or saving its life from a predator. Having the AI understand what's what will take some code that isn't in yet - for example it should be negative for you to throw a rock towards a critter unless you are hitting (or clearly aiming for) a vulture that is currently swooping down on it, in which case it should be positive. The jet fish get angry when you carry them which is very easy for the code to recognize, which is why that is in there already.

This code is nothing I'm too worried about though - it will be a day or so of work and will then be generally applicable on all creatures. What I was worried about was the saving of the social memories, and now that hurdle is cleared.

We don't yet know to what extent we want to work with this stuff, as it will probably only be noticeable to very advanced players. It would be a lot of fun though to slowly build up a friendship or an antagonistic relationship with some creature you often come by - that would be exactly the kind of emergent narrative we want to embrace!





   jamesprimate on October 15, 2015, 10:29:10 PM:

From Del: "backgrounds and things.... soon to contain cats and lizards! @RainWorldGame #wip #gameart"

https://twitter.com/miimows/status/654835748164603904




This WIP is *spot on* Chimney Canopy! And i know that room, its CC_A08! Even specific tile work is there! Speaking as the person who made that room, i could not be happier. Tears of Joy

Since Joar and I are busy with... well, everything... we've asked her to just go wild for a bit and spend some time getting style ideas down, trying out concepts, etc. Considering this is her first proper attempt and its already awesome, im pretty dang excited to see how things develop from here. Ill post a follow up when she finishes it, ofc.





   JLJac on October 16, 2015, 10:55:45 AM:

Yeah. So stoked.  Who, Me?

In other news, after messing with the save states for a bit I will be diving back into some  Wizardlast region secret stuff Wizard so I'm sorry to say you'll have to look forward to some more devlog silence. It's all for you though, when you're actually playing we want to have stuff in there you weren't prepared for that can send your jaw to the floor. Thanks for your patience!





   JLJac on October 20, 2015, 12:28:45 PM:

Update 489

A secret creature is implemented! This one is specific for the last region, and I'd like it to not reach you guys before you're actually playing (and playing and playing and playing, until you get to that area), so you have something to be excited for! The only thing I will say is that it is certainly among the more visually complex creatures of the game so far. Took me about 4 days all in all, and feels like a cool investment.





   jamesprimate on October 20, 2015, 04:04:58 PM:

i know i keep cryptically hyping things and its probably annoying, but O M G the stuff joar has got going on right now is *unreal*





   JLJac on October 22, 2015, 07:50:54 AM:

Something I would like to suggest. So, I have been playing, and maybe it is just me, but I kinda liked the low fps/jerkiness of the early alpha, (or at least I think I would, based on the footage I have seen). This may not be everyone, but the slugcat's movement doesn't feel very animal, if you know what I mean. I tested this theory out with an fps limiter, and while visually it wasn't a huge improvement, it felt better somehow. Maybe you know what I am talking about. Or maybe those little visual details, like it scrambling to get up a ledge to a platform, (in that slugcat life video I think). It lasted less than a second, but it is little details like that I am talking about. All of this is freaking amazing, don't get me wrong, but remember the little details too... Speaking of which, what about the shelters? I remember that alpha video with the pups, where it was those huge industrial doors. Someone earlier brought this up, saying how the current one looks like it was specifically designed for the slugcat. Maybe have some big ones, with little nooks and crannies inside to sleep in?

TL:DR where are all those things from the alpha videos?

Yeah, there are certain qualities of the alpha that are lost, but I think that's pretty much to be expected when you re-build from the ground up! However there are quite a lot of things that are significantly better with this new build, so it evens out haha ~

That framerate thing you mentioned I've noticed as well. The lingo build was supposed to run at 40 fps, but was in fact closer to 20, which was a much more forgiving environment to animate in. Have you ever been drawing a sketch, and it looks great, and then you add color and stuff and it doesn't look as good any more? The brain has a tendency to fill in missing information, actually it's often so good at it that the filler material is better than something an artist can come up with. I'd say that the reason some people think the lingo alpha had more animal-like animation is because it had a loooot lower framerate, and because you know it's supposed to be animals you fill in that missing info with your own animal stuff (one example is that many people have mentioned seeing the slugcat claw at a ledge to get up - a behavior I have in fact never specifically implemented).

All the creatures in the new build have more sophisticated animation than any critter in the lingo alpha, but the framerate is also way higher which makes any imperfect movement more obvious. Another thing that plays into this is that the slugcat itself was the very first creature I animated for the unity build, and is also the one you look at all the time. So the slugcat will definitely get some polish before release. I have been contemplating capping the frame rate, but at the end of the day I don't think it would be worth it. Obscuring the art to make mistakes less obvious feels wrong, and is generally not very effective at the end of the day, as any illustrator who has tried to save a bad drawing with filters or blur knows. The higher framerate creates a more professional and smooth presentation for the entire game, and it keeps me on edge as an animator!

As for the shelters, the original concept was that the region gates and the shelters would be one and the same - but as the regions got absurdly huge that idea had to go. However, the "art idea" still lives on in the current region gates:






   JLJac on October 22, 2015, 10:19:31 AM:

#local frame cap, this idea is quite strange to me Shocked So basically you're talking about that the movement of the sprite on the screen should be smooth, but the movement within the sprite should be framy? I guess it would sort of make sense coming from a classical animation pipeline where you draw each pose for a character - just having it switch image every second frame but updating the position of the sprite every frame. For me though I doubt it would be possible, as at the end of the day my animations are basically only positions, no image swapping... Like, most of my creatures consist of 2-10 "chunks" with a position each, and sometimes hundreds of cosmetic little details each with a position and velocity, so there'd be no way to pick one of them and decide that "this one is the real position of the creature".

I'm irrationally frustrated about not being able to see this new creature and area!
Well, hello there! There is like, 4 times the content of a standard region in there, and there's more to come! Though we are admittedly getting a bit carried away with this, I have to say I'm really excited to have a grand prize in there for those who complete the game Smiley

What framerate does the current version of the game run at? 20 seems to be an extraordinarily slow update time.
The physics tick at 40 fps, but the graphics are interpolated between those key frames at whatever framerate the computer can do.





   JLJac on October 24, 2015, 09:23:07 AM:

Thanks and welcome!

Yo eigen, cool to have you check by! Moonman's looking like it's coming along great!

Update 490

Basically everything I'm up to these days is secret stuff, but at least here's something I can share:



This is a second food source for slugcat - there will probably be one or two more edible things/creatures in the game as it looks now. Having bats as the only food source in the entire game became sort of a liability in terms of what we can do in the later regions especially, so we will throw in a few other things as well for variation.






   jamesprimate on October 24, 2015, 09:36:38 AM:

haaaaaaang fruuuuuuuuits

looks delicious  Hand Fork Left Hand Knife Right





   jamesprimate on October 24, 2015, 11:33:26 AM:

bingo! were getting to the point where a lot of our decisions factor in possible endgame content and replayability, so we think vegan/carnivorous runs will be easy to implement on our end, plus will be super challenging (and hopefully fun) for the player! you'll really have to know the map to accomplish either





   jamesprimate on October 25, 2015, 06:56:27 AM:

Quote
possible endgame content

I hope this doesn't mean that there will be different endgame content for eating primarily fruit vs primarily bats or a mix. I mean, hell, I'm a vegan but I'm hardly going to say a cat is more or less ethical than a mouse or a cow.

nah, it doesnt affect the "narrative" or anything. more like achievement that gets you a nice illustration and possibly unlocks content for multiplayer. by "endgame content" i meant things that encourage replayability, but i guess it might be more clearly called "post-endgame content"





   JLJac on October 25, 2015, 10:54:15 AM:

It's not necessarily a fruit though, I just named it fruit because it like, works like a fruit. What it actually canonically is I'll leave to your speculation  WTF





   JLJac on October 26, 2015, 08:25:28 AM:

Update 491

New critter coming up!



This guy has a bunch of strange quirks. First of all it can see out of both ends, which is why the vision cone visualization is so flickery - easiest technical implementation was just switching every second frame. Don't worry though, no way to notice this once the vision cone visualization is turned off.

Then there are a few other things, such as movement based vision (can only see moving targets, as can be seen from the (player specific) vision visualization varying in size with player velocity) and its weird opposite, greatly inhabited vision when it's moving. It also has hearing, but only when standing still.

To compensate for this it has that start and stop behavior, where it switches between sensory awareness and movement. Hope for this to turn out an interesting gameplay challenge!

Behavior and locomotion are wrapping up here, so I expect to get to skinning tomorrow.





   JLJac on October 27, 2015, 11:35:54 AM:

Update 492

Work still in progress, but now we're starting to see where it's going!



The very variable size is fun, but I'm unsure about whether it will stay - just too little control for James when he places them if they can vary like that. Maybe they could be split into a large and a small one, and we basically get two creatures for free. First though, the skin needs to be finished. As is the entire creature is just square sprites - now I need to do some art work for the shells, legs etc.





   JLJac on October 28, 2015, 01:06:02 PM:

Thank you thank you thank you  Smiley

I agree with your input - square back plates and synchronized movement is now part of the design.

Update 493

Rare rain world action gif!



Didn't really plan on it, but RNG threw down two spears in the room and then survival instinct kicked in. This is the sort of violence I's ideally like for the game to have - short bursts of action, and the violence never being a goal in itself but slugcat also not hesitating to use it if it's the only way to survive a situation.

As you can see that medium sized centipede manages to attach itself to my lower body for a little while there (will be less confusing with a sound cue), which brings up a detail about how the creature works. They kill you with electricity, and need to attach both ends to form a full circuit. The bigger ones are more effective at it, and can use their weight to restrain you more during this phase. With the smaller ones you have a little bit more of a window to do something, as can be seen in the gif.

James and I had a talk and decided that further on as we do some brushing up on the damage system there might be a few more factors making them more dangerous the larger they are - maybe the smaller ones will have to zap you multiple times, for example. With wildly varying sizes like this the danger should vary with the size, so that those huge buggers are just as dangerous as they look!





   JLJac on October 28, 2015, 01:31:43 PM:

Ahahahahaha the grossness is officially out of control!  Evil Shocked






   jamesprimate on October 28, 2015, 04:32:37 PM (Last Edit: October 28, 2015, 04:40:26 PM):

playin this centipede build, and WOOOOOOW it is seriously something else. i have a high grossness threshold (from playing years of this game), but running through a dark hallway with 7 of those beasties skittering around is straight up shudder-inducing. from a design perspective its super effective, because you *REALLY* dont want to see the slugcat get grabbed by one of those nasty things, if just for purely emotional reasons  Shocked

also, i know the bar is set pretty high but... im thinking this thing might be the best animated creature in the game. Which is pretty impressive considering everything else. What do you guys think? Amazing work Joar!


please!

PLEASE!

In the PR material and ads, put "procedural animation" upfront! it's the buzzword of the moment and it can send huge shock ripple into promoting more experimentation in that area



oh most definitely. we are going to buzzword the *hell* out of the pr stuff. Expect to see such classics such as: "Lifelike Procedural animation", "dynamic social ecosystem" and "adaptive creature AI" - as well as possibly new hits like "emergent open-world narrative". In fact, if you guys want to take a hack at throwing down some "sexy tech jargon" to inform the marketing "experience", please be my guest!






   JLJac on October 29, 2015, 11:11:34 AM:

Can we implement severing? I want to see these guys get chopped in half by a spear. And even for other creatures, like the big daddy's tentacles or the lizards' tails. Each creature obviously gushing it's own color of blood.
I have been thinking about it, but no. That would be too much ~ we don't want "gore" for its own sake. I haven't really ever been taking any conscious steps towards making the game violent or brutal, and was initially quite surprised when people were expressing that impression, considering how extremely gory games there are out there. Maybe it's because of the emergent animation giving the action a slightly different flavor than what we're used to seeing? Like, more desperate and fumbling rather than cool and cartoony. Anyway, I'm cool with the game being brutal the way it is - it feels contextual and is a means to the end of supporting the artistic idea - but I don't want to go further. The spears produce a few ambiguous droplets when it hits something, but I think that will be the extent of it for blood!

Also it would be a technical nightmare to try to implement at this point  Wink

Here's the general pitch I post every time someone asks what the game is about over in the GAF thread:

Rain World is a survival stealth platformer set in a sprawling open world. You play as a slugcat, a lithe intelligent creature in the middle of a dynamic ecosystem brought to life through procedurally-generated animations and complex AI. An intelligent civilization existed before, but now only the decayed ruins and eroded infrastructure remain as remnants of that long-gone culture.
Oppressive darkness, dank rusting cisterns, rolling hills of detritus, metropolitan ruins, and much more are waiting to be explored. Rain World's industrial jungle is home to predators and prey of all kinds. Relentless hunters, camouflaged stalkers, creatures at home in the murky depths and open skies, things lurking in places where the sun never shines...


Damn, that's really really good, covers basically everything about the game! Would you mind if we drew from this in our own material when promotion times come around?

Update 494

Touching up stuff. We are finalizing the subterranean region, and with that comes the usual polish work - only this time half of it is secret!





   JLJac on October 30, 2015, 05:12:26 AM:

It's just kept sort of ambiguous. No-one really knows how much insect and how much machine these things really are after all - as with all RW creatures.

In other news, I just received the new region from James. This region does not joke around  Shocked



Sorry about the blur, it feels silly but now when we have gone through all this trouble of secrecy it makes sense ~

As you can see, you could fit several suburban regions inside this one. However, simple area-by-area comparison doesn't nearly do it justice because it has basically only huge rooms, which are denser on the map. The green color is marking 8 screens in suburban vs 8 screens in subterranean, to give you a sense of this. In terms of screens, I'd say that that topmost row (the un-blurred one) is about on par with the entirety of suburban.

On top of this it is also the most content rich region in the game, with by far the most region specific stuff in it. Exciting!





   jamesprimate on October 31, 2015, 02:14:20 AM:

whooooo yes this region was absolutely brutal to do within the time-frame we had set. ive never worked so hard on something in my entire life, and that is really saying something. it clocks in at 190 screens!! to further Joar's comparison, suburban was 37 and the next largest region was underhang at 109 T___T

but the results are pretty pretty good. id say visually its without question the best work we've done yet. We're both dying not being able to show it off to you guys, but believe me its worth the wait to see everything in context.

Also Joar and I were excitedly talking earlier about all the crazy unexpected / hilarious creature interactions going on. Subterranean spans most of the width of the game map, and as a result it has a good selection of creatures from all the different regions represented, in many cases together for the first time. Its the best example of the "open ecosystem" feeling yet, and requires knowledge of all of the different creatures hunting behaviors in order to have any chance of survival. Unexpected allies emerge, purely through the fallout of the web of predator-prey chaos roiling around you. Its a very cool experience, if you dont mind me saying it.





   jamesprimate on October 31, 2015, 09:07:26 AM:

a bit of that is going to happen too! We have a month planned for "level polish". Mostly it will be cosmetic, but a few of the early regions will get some structural reworking as well. We did this already with a problematic region and had very good results, so I'm kinda looking forward to it!





   jamesprimate on October 31, 2015, 02:48:11 PM:

Yep, exactly. Retouch the current ones with the updated tools and tile set that we have now, plus smooth out the transitions between regions, etc. All that stuff!





   jamesprimate on November 01, 2015, 12:25:52 PM:

Are you gonna expand the smaller regions? Like the suburban region with 1/6th as many screens as the subterranean.

yep! some more than others. Suburban will definitely see some expansions, and probably an entire new subregion. For now the polish pass will be focused on improving whats already there and adding narrative / set-piece stuff rather than expansion per se, but there certainly will be some as a result.

As tedious as it may be on my end, whats nice about the modular room layout system we're using is that once a region map is setup its very easy for me to attach new rooms/paths, and therefore new content. ive setup pretty much every region with the potential for future expansion in mind, and the infrastructure can pretty much support as much additional content as we care to add. i have *LOTS* of ideas for this stuff, so hopefully the game will be successful enough so warrant it post-release.





   jamesprimate on November 01, 2015, 05:05:03 PM:

Looool, definitely not something I'm concerned with right now. Lot of actual game yet to do Wink





   JLJac on November 02, 2015, 01:31:23 PM:

It's one of those numbers where scientific notation doesn't do you any good, you end up with stacks of exponents kilometers tall.





   jamesprimate on November 02, 2015, 08:38:40 PM:

yep! the ambient music and sfx will be arranged in a procedural way, and in addition to that there will also be other music, such as the Else series, Grumblebum etc, that are for set for certain regions, locations or narrative events in order to create a specific mood and set emotional context, yadda yadda.





   JLJac on November 03, 2015, 01:55:23 PM (Last Edit: November 03, 2015, 02:01:22 PM):

Update 495

Gotten started on the new region. Where the previous one was laaaaaaarge with lots and lots of different sub-regions and creature sets, some of which were weird and kept secret, this one is going to be smaller and less internally varied, but in return way stranger. Like, really really turning a lot of things about the standard rain world formula upside down. Basically we want to take everything you think you know about the world and switch it around in this region, where slugcat is far out on thin ice. Within the stylistic confines of the project of course, it's not going to become a text heavy interactive novel or anything like that  No No NO

As the region will be considerably smaller than the previous one, we expect to move through it a lot quicker even though it will have these strange elements and new mechanics. We're going for an economic approach where we want to get as much strange player experience as possible out of the work we put in. One day of work in it looks hopeful - we already have a mechanic in that we hope will surprise you guys and make the region stand out.

Sorry to continue keeping the lid on! We're almost through, and then we'll get back to normal devlogging and let you guys come along through the final stretch. Hang in there!





   jamesprimate on November 04, 2015, 05:00:23 AM:

I believe we have crossed a very crucial threshold today, and that is the threshold where people have made slugcat costumes for Halloween and/or cosplay: https://twitter.com/rainworldgame/status/661885217574121473





   JLJac on November 11, 2015, 01:01:00 AM:

Thank you thank you! Hang in there guys!

Programming purity question:

With an integer rect struct, should the upper digits be thought of as included or excluded?



It's a silly question I know, but I just can't figure something out that feels right. The inclusive one makes sense because, well, look at it, but what doesn't make sense is that if I ask for its width I get 7-4=3 tiles, where the width very obviously is 4 if you look at it.

I'm gravitating towards the inclusive version and then just slapping on a +1 on the width and height accessors, but that feels horribly unpure to me as the same logic could hardly be applied to a float rect. Should I just accept that integer logic and float logic are different here?





   JLJac on November 11, 2015, 08:37:10 AM:

Ah, exactly the sort of insight I was looking for! Thank you so much  Hand Thumbs Up Left Smiley Hand Thumbs Up Right

That Dijkstra article is cool! I assume this is the same guy as in "Dijkstra Maps" - the pathfinding algorithm?





   jamesprimate on November 17, 2015, 05:26:34 AM:

the bar keeps getting raised guys  Cheesy





   JLJac on November 20, 2015, 01:06:06 PM:

This region has so much stuff. So. Much. Stuff. Like, four regions worth of new stuff.

I have been in absolute agony not to be able to post two or three specific gifs I have over here  Shocked

Tell them James! Tell them how much stuff there is O__O





   jamesprimate on November 28, 2015, 05:28:57 AM:

This region has so much stuff. So. Much. Stuff. Like, four regions worth of new stuff.

I have been in absolute agony not to be able to post two or three specific gifs I have over here  Shocked

Tell them James! Tell them how much stuff there is O__O

way too much stuffs, its crazy. i used to be proud of how many rooms there are but at this point its just ridiculous. were well over 1200 screens at this point WTF

this new region is about the size of 4 of the earlier regions and absolutely PACKED with new visuals and mechanics. its mind blowing. fortunately though... it is coming to an end!!!

were doing a bit of smoothing work and debugging right now, but by the end of this weekend region 12 will be a WRAP!! meaning that after over a year of solid level work, 12-16hrs a day pretty much every day, ALL REGIONS ARE NOW COMPLETE and we can start into the next phase  Tears of Joy Tears of Joy Tears of Joy i cant even tell you what an insane relief this is.

next steps will be polish pass, where we go through and touch-up the earlier regions and add narrative / context / setpiece stuff. but thats easy, just spruce things up here and there using our new toolkit. nothing remotely like having to create distinct, internally-consistent, playable architecture and layout for an open world of 1200+ screens from scratch. while thats going on we should be able to post normal updates too, which will be nice. we miss you guys/gals!

but first we are taking a bit of a break. next week Joar and i will be on the same continent (a rare occasion!), so were going to hang out and plan all the final bits and pieces. WE MIGHT ACTUALLY FINISH THIS GAME SOON  Shocked Shocked Shocked Shocked





   jamesprimate on November 28, 2015, 12:43:14 PM:

We have one in the devtools already that uses realtime data from the actual map files, but it'll probably take some creative effort to make it work in the context of slugcat land in a way that doesn't seem super HUD awkward. We have some ideas though! since the mechanism is literally already in there, I'm pretty confident we can make it happen





   jamesprimate on November 29, 2015, 05:36:55 PM:

it'll still be a *little* while. we need to polish everything up, get all the progression mechanics tied in, balance the damage system, UI and menus, finish the music and audio, do some heavy QA etc. BUT all that is pretty straight ahead compared to what we have been doing. so yeah sort of! you'll very likely be seeing some announcements about release timeframe soon  Beer!





   jamesprimate on December 06, 2015, 05:20:44 PM:

Yo! Yeah this has all been in the pipeline for a bit, but it takes soooooooo long to make it official and go through all the proper channels! Even now, with it being shown onstage and in the official PlayStation videos and all that, there are STILL quite a few hoops yet to jump. But hey it's officially official: PS4 and Vita





   jamesprimate on December 07, 2015, 12:04:15 AM:

I'm just waiting for an official site with correct information and a preorder function so I can go around telling people to buy this game Tongue


VERY TRUE





   jamesprimate on December 13, 2015, 01:41:36 AM (Last Edit: December 13, 2015, 02:07:03 AM):

Hello friends! We are back from a week of brainstorming with a pretty solid plan for completion, as well as some significant progress on new fronts. Joar will be back to devlogging tomorrow, so in the meantime ill bring the log up to date a bit so he can hit the ground running. Pardon, most of these images are big so might need some scrolling.

Food UI

This is something that has been discussed a lot over the course of the devlog, but now its actually in the game and functional (amazing!) Replacing the old "number appears over the head" when consuming bats and other foods, now we have this minimal circles and lines system that will appear and disappear from the bottom left:



I think its a little large right now, but thats super easy and we'll play with that a bit later. Simple UI, but gives us a clear way of communicating some key things beyond just "food eaten":



just ignore the typo on "demarcates"  Cry




Map UI

This is a biggie and im sure there will be opinions. As much as we'd like it to be otherwise, given the ridiculously huge size and complexity of the game world it would be heinous to not include a map function for the player.

Here is an early mockup of the map overlay:



Fairly self-explanatory, the map will fill in as the player moves through the world and the red circle indicates the location of the player. Food sources that are discovered will be indicated on the map, as well as possibly locations of player deaths and other important information. Left shoulder button will bring up the map, and D-pad movement will switch to map scrolling, allowing the player to plot new routes, see areas they may have missed, etc. Time will proceed as normal when in the map (so player can be eaten or rained on, etc), so the background will be semi-opaque, allowing to player to see if a predator is sneaking up.

One thing that we are concerned with is avoiding a situation where the player “plays” the map, running around with it semi-opaque, or quickly tabbing in and out like its a HUD, etc etc. Our concept for this is something like the slugcats visual memory, which requires some time and concentration. So the idea is that the player finds a safe place to hide for a minute or two and think hard about where its been. The map will appear at first to only be the nearby surrounding area and far off locations will take a little while to fill in, etc. This vibe stuff will be dealt with after the map is functionally implemented so we'll talk more on that later.



Problems:

Here is what Joar has in the currently implemented version:



Looks decent so far, but one thing you will notice is that it still seems pretty blockly... like a series of interconnected single screen rooms. because thats what it is  Cry Thats not the visual impression we want to give, and its going to be a bit of a biggie to fix. We want to move the world map from its current room by room layout into visually cohesive region maps that show consistent movement through 2d space. And heres how we plan on doing that:





**Heavy Industry Map spoilers ahead**


Here is a shot of the current crude devtool map for Heavy Industry region:



Notice that there are plenty of chaotic connections and bits that dont make sense on a 2d plane. Thats my fault. Initially the game concept was "popping in and out of rooms of vague distances apart, and not necessarily all on the same axis" rather than the current "large structurally cohesive regions on a 2d plane" concept that we've evolved into.

Fortunately, with minor adjustments, it starts to make more sense:




And you can imagine that adding a connecting room here and there will make it even more clear.

Since Ill be going back through the levels and regions in polish pass anyways (starting today!), part of my work will be remixing the earlier chaotic regions into these more structurally cohesive forms. Joar will then take these "canonical room placements" and stylize them a bit, with the output being a region map thats something like this where "it all makes sense":



We think this will add a lot to the player experience, allowing them to piece together the "puzzle" of the world map with a visually satisfying end result. This will also give the regions themselves more of an individual personality and "vibe" beyond just an endless series of rooms.





   JLJac on December 13, 2015, 06:21:38 AM:

There will be! Just not very practical to implement before you have the actual map running  Wink





   JLJac on December 13, 2015, 02:25:06 PM:

Procedural content is really cool and we'd love to experiment with it in the future! For this game, we're a bit too perfectionist to let go of control though... Also, I think it's important to note that it's not the same as infinite content - the human brain is a powerful pattern finder, and after a while you learn how the algorithms work at which point you have effectually exhausted the content. To extrapolate you could take the example of white static noise - it could be argued to have "infinite combinations" but after a few seconds you have understood how it works; you get the idea.

That said, the game is largely procedural except from the geographic layout of the rooms. We don't have a single enemy that is spawned on some trigger when you enter an area - they all move about as independent agents throughout the world, and the combination of creatures that you might come upon when entering a room is completely up to the RNG working through the creatures' AI behaviors.

Our aspiration is that this will create interesting narratives that will keep the game fresh. As the rooms are static you'll be able to learn your way around in the world, but what happens to you when moving through those rooms should be new each time!





   JLJac on December 13, 2015, 04:00:37 PM:

Awesome! The way the map scrolls and overlays the game is really cool! Maybe it's more clear when playing the game, but the map is just really confusing to me, It's hard to connect the game-space places to the map places. My theory is that in the game you recognize locations by the aesthetic details, like chains in a certain way, or specific elements that you don't find anywhere else, but the map only shows the shape of the platforms. Especially with the big beams that the slugcat is standing on in the screenshot. In the game, they register as one object that you can walk inside, but on the map they look like two beams with some space in the middle, and it's hard to connect that they are both the same thing (or at least longer than it should).
Yeah, I'm aware of these issues, it's not always super easy to recognize the rooms. The idea is that the map shouldn't really show a perfect depiction of the rooms, but rather a general abstract sense of what kind of routes you can take through the world - it's mainly supposed to be a route planning tool. If the current setup is in a sort of uncanny valley where you can sort of recognize the rooms but not enough, I'd actually feel more inclined to abstractize the visuals further rather than adding detail. The map is supposed to give a general sense of direction rather than anything else. We're also very much decided that we want to avoid incentivicing "playing the map", ie the game phenomena where the map is so useful that players tend to look at it more than the actual game. Rather it should be something you briefly peek at and then get back to the game - James spent a crazy amount of time on those rooms and we want the player looking at them! The map can never reach anything close to that visual fidelity anyways.

Update 496

More map stuff!



In order to make the rooms work in their positioning relative to each other, we needed some extra dimension rather than just the 2D plane. As the rooms are already made, retrofitting them into one cohesive world is a tricky thing, especially as some layouts have exteriors and interiors of the same buildings exist as different rooms, and similar situations.

We contemplated a few solutions to make it work, such as having long shortcut connections that connect to little "mini maps" around the main map. The solution that felt the cleanest however was to just make the map layered - then if two rooms are fighting for the same space they can just be layered on top of each other. Such conflicts occur quite a lot through the regions, for example when many rooms have an open sky and feel like they should all be on the same ground level, or when water levels should be consistent between a bunch of rooms. The layered map is a good solution for many of these problems, as it allows an entire new dimension (sort of, it's 2 or 3 layers depending on the region) of freedom.



There are still a few unresolved visual issues, such as how to show inter-layer connections between rooms, but it feels like a solid direction! The sense of space really benefits from the map tool - contrary to just feeling like you're in an undefined room "somewhere" you get a clear understanding of where you are in the world, which serves the sense of scale.





   jamesprimate on December 14, 2015, 12:34:56 AM:

That's not weird at all! I'd love to have a hardcore mode that removes the map and severely punishes deaths. We've discussed including metrics for speed runs as well, but that stuff will probably come in post release updates.





   jamesprimate on December 14, 2015, 01:56:17 AM:

it would be nice if you could just look at the same basic map in-between dry spells in the den to see what's left to explore, where you've been, and try to piece together what good routes might be. Almost like the slugcat is having geographical dreams. Who, Me?

i was thinking exactly this! we have some other stuff that will be going into the "hibernation screen" as well, so should be perfect.





   JLJac on December 14, 2015, 05:33:25 AM:

Thank you!

Math/programming question, guys. You have noticed that bending effect of the map I have going, right? I'm having a slight problem with that. What it's about is that I have to run the algorithm backwards, and my mathz are not good enough.

This is the practical issue - I want to place markers on the map with pixel precision. This means I basically have to compensate for the distortion effect.

The distortion effect is a fragment shader that works like this:



We are at fragment x1, y1. What color to render? In order to get that coordinate (x2, y2) I go through a little formula. This formula basically moves the x2,y2 towards the center of the image, and the distance of this movement (magnitude of black arrow in illustration) is dependent on the distance between the texture's center and x1,y1 - d1. The effect - the further towards the edge a coordinate is, the more it will go inwards toward the center to grab its color, resulting in a concave sort of bend to the image rendered.

All good, this part works well! However, I just can't figure out how to do this backwards. When placing a map marker, I know the default coordinate it should be placed at were there no distortion, and theoretically it seems like it should be as easy as moving it outwards from the center with a magnitude dependent on the distance to the center. So basically I have x2,y2 and want to get x1,y1 this time around.

If it was a linear correlation between distance to the center and movement magnitude, I could accomplish this by just switching multiplication for division in the code. However, it's a much more complex formula, which uses the value d1 several times.

When doing this backwards, I get a sort of catch 22 as I don't have d1, I have d2, which I don't know what to do with. My only way of getting d1 would be to have the point x1,y1, which is actually the result I'm after, so the key is locked in the box.

The horrible formula I have for deriving x2,y2 from x1,y1 is nothing less than:
x2, y2, = x1,y1 + (x1,y1 - midPoint).normalized * (1-d1)*(d1 ^ (4 + 2*d1))*2;

And this is what I have to flip and do backwards. I can switch it around so that I have for example x1 on one side of the equal sign, but as all the d1's in the formula are dependent on the values of x1 and y1 I still can't get a workable result.

I guess my question is basically this - is this mathematically solvable or is it an equation with infinite solutions or something like that? Pretty stuck on this one!





   JLJac on December 14, 2015, 10:43:06 AM:

The same way I design everything, I have some basic mathematic building blocks and then I tweak and tweak until I get the result I want O___O

Here is the actual cg code:
Code:
float dst = clamp(distance(i.scrPos, half2(0.5, 0.5)), 0, 1);
half2 displace = normalize(i.scrPos-half2(0.5, 0.5)) * (1-dst)*pow(dst,lerp(4,6,dst))*2;
half2 grabPos = half2(_mapPan.x + (i.uv.x - 0.5) * (_screenSize.x / _mapSize.x) / lerp(3.25, 4.75, i.clr.y), (_mapPan.y / 3.0) +  ((2.0*h)/3.0) + ((i.uv.y - 0.5)  * (_screenSize.y / _mapSize.y) / lerp(3.25, 4.75, i.clr.y)) / 3.0);
grabPos -= displace;

Sorry about the mistake where I wrote + instead of - earlier!

it's basically
result = position + displacement * relativeFactor
so
position = result - displacement * relativeFactor

Yeah basically, but the magnitude of the displacement depends on the resulting vector, which would be the catch 22...

http://www.wolframalpha.com/input/?i=%282-%28x%29%29%28x%29%5E%282*%28x%29%2B4%29+%2Bx

Your displacement function is quite squiggly how did you design it?

Hm, it outputs imaginary numbers... That might be why I can't reverse the equation, the answers end up on the imaginary axis...






   JLJac on December 15, 2015, 12:57:05 PM (Last Edit: December 16, 2015, 12:24:05 AM):

@insaneinside, welcome and thank you so much! That looks really interesting, I will look into it. Also, thanks for letting me know the proper maths notation.

Indeed, you would have trouble producing an analytical solution for a in terms of b here!  There may be a way to determine it numerically, but I doubt it would be possible (let alone a good idea!) to do so in a shader.

This wouldn't be in the shader though, but in the C# code - I'm trying to do the shader maths backwards in order to place a marker on the map within the game logic. As for the issue being solvable, it should theoretically be possible seeing how every a only has one b, if you get me  Huh? Anyways, thanks a million, I'll take a closer look at your math Hand Thumbs Up Left

Update 497

Fog of war and "slow reveal" animation for the map.

The fog of war is pretty straight forward. As you move through the world it draws to a texture, which is then used to determine what of the map to reveal.



The "slow reveal" animation looks like this (on a fully explored map, it looks slightly different if you just have bits and pieces uncovered):



It's essentially a flood-fill out from the player's position. We implemented this for a few reasons.

One is that we want it to feel like you're accessing the slugcat's spatial memory rather than just bringing up a map on some HUD - the slugcat is an animal, not a cyborg super soldier. If it takes a bit of time, its communicated to the player that this is an act of thinking long and hard about what was where, not just "bringing up the map".

Another is that that the animation doubles as a time penalty. The idea is that the filling in animation should be somewhat satisfying and fun to watch, masking the penalty aspect from the player while the actual gameplay implications of it remain; namely that you spend precious seconds just standing still. Hopefully this will incentivize fewer and longer map sessions rather than quickly tabbing in and out of it once every room. We want the player to look at the game, not the HUD - if you flicker in and out of the map you don't pay as much attention to landmarks in the environment, and looking at the environment is exactly what we want you to do as much as possible. Also we want the player to have to keep at least some of their route in their head, as that's part of the game's challenge.

A third one would be that your inability to move in combination with the enemy still being mobile will require you to find a good hiding spot for bringing the map up, which feels like a nice atmospheric element.

The flood fill has a bit of a bias towards where you're panning the map, so you can sort of "pull" it a bit in one direction or another. If you release the map button quickly, your map reveal progress is saved, but if you wait for too long or move around too much it's reset. There is some forgiveness though, if you take the map down and quickly move a few steps in some direction you can bring it up again without it being reset.

The blue color in the map signifies an edge of the explored area which is not a wall - basically somewhere you might potentially explore further. Not 100% settled on the aesthetic of that element just yet, but I think the functionality is sound, it makes a lot of sense that you should be able to easily browse for potential exploration destinations.

The dotted lines are, as I'm sure you've understood, longer connections between rooms.



These have been a bit of a problem in some of the earlier regions, that were developed when we thought of the rooms more as free entities rather than part of a whole that should make geographical sense. HI (pictured) is sort of on the edge of that paradigm shift. In the gif you can see that I first pan over a bunch of rooms that make a lot of geographical sense, but then I pan to the right and things get pretty jumbled with lots of dotted lines crossing over each other and the rooms they're connected to. That latter chaotic look is part of what we're going to try to tone down in the upcoming level work. A big majority of it seems to be solvable just by re-connecting the rooms, and where that doesn't work we'll add the occasional simple little connector room. Not all of the dotted lines will necessarily be eliminated though - personally I kind of like having a few of them spicing up the look of the map. The criss-crossy chaos in the rightmost part of this map however will be worked with a bit.





   JLJac on December 15, 2015, 01:19:05 PM:

Valid concern!

I think that the reason why it looks very busy and overwhelming is that you're unfamiliar with it. In the context of the game, you will yourself "draw" the map by moving through the region over and over again, so at any given time you should not be presented with more information than you can handle.

For comparison, when you first enter a region the map won't look any more impressive/confusing than this:



Which should definitely be within what anyone can deal with. From there you build the insane crazy big map yourself by moving around, meaning that you have an actual relationship to all the places shown in the map as you're guaranteed to have seen them in the actual game before.

Reducing the map to an abstract node graph crossed my mind, but it has a pretty big downside - if the rooms are not at least to some degree depicted, how do you know which room is which?





   jamesprimate on December 15, 2015, 11:15:46 PM (Last Edit: December 15, 2015, 11:24:47 PM):

eh, its important to note that what you are seeing in these gifs is mockup maps that Joar threw together based on the old (pre-polish) region layout paradigm. We havent even started putting the maps together in a clear manner, so these are intended to show the functionality of the map code (which is AWESOME) rather than examples of the finished product. Further, the map tools allow us to orient the room positions any way we wish, with up to 3 layers of depth if necessary, so im pretty confident that we can find clear solutions.

its true that any map with be complex though. the world isnt aligned on a 2d plane (and *cant* be), so if a map is to be usable at all, it will have to have depth and 3dimensionality.

Imagine the Fez map:



but literally 10x times larger and more complex. AND we need a much higher visual fidelity if we want the map to serve any utility at all. Its a tall order.





   JLJac on December 16, 2015, 12:05:06 AM:

Yeah, there is still a lot of work to do! Maybe I kind of rushed ahead in posting those gifs of the fully revealed map of a fully un-polished region - looking at it again with your eyes it does look very confusing  Who, Me? These gifs were to show off a technical implementation, not the content of the map, which will make a big difference. A few notes that may address some of your concerns:

The map will be mostly on a 2D plane - as many of the rooms as possible will be fitted next to each other. The multiple layers will be for some edge cases and the occasional secret passage branching off from a main 2D map. Hopefully this will feel exciting rather than confusing, imagine finding a passage that leads to a little secret area that is "off the map" so to speak.

The movement of the map in that very short gif is really hard to follow. When you are in control of it yourself it comes across as way less hysterical - especially the layer switching is a looooot easier to understand when you have pushed a button yourself to make it happen.

Once we have the rooms placed in a sensible manner, the map textures will get a manual touch-up to make them appear more like a cohesive whole rather than a bunch of disconnected little blocks.

The fog of war really helps to make it understandable. I was showing the map to my dad, and initially he had the same impression as you guys - that it was an overwhelming information overload. Then I tried to turn the fog of war on and move through a few rooms, after which I brought the map up again. He was able to make sense of it because he had seen all the areas I had been running through and could recognize them on the map. This made him change his opinion about it quite a lot!

As for the complexity, many of the regions are insanely complex! Talking about complexity here, not geographical disconnectedness - the former we want to keep, the latter we want to work with. We're fans of the complexity and size, it drives home an emotional point about the relentlessness of Rain World and the smallness of the slugcat. The vast size and sprawling nature of the regions is something we think of as a core aspect of the atmosphere of the game. We'd like the map to reflect and visualize that aspect. Which, of course, shouldn't get in the way of actual playability, so if it does we will definitely take measures to make it easier.

End of the day, I think it's pretty hard for any of the parties involved here to judge. James made the rooms, I made the map, and you guys have a 4 second gif of an unfinished chaotic region to look at which you can't control yourself but which just pans around frantically (my bad!). When we have a player going in fresh in a finished region with fog of war on and uncover it themselves, that would be a better measure of its utility. Depending on the outcome of that scenario we'll make the necessary edits to have the map be both an artful representation of the world and a useful tool for playing the game.

As for now, I have to move on to some creature implementation, as map progress can't really proceed much further until we have some polished regions. But don't worry guys, we will make the map cool and useful  Smiley Not gonna let you down!





   JLJac on December 16, 2015, 12:16:53 AM:

If you're already rendering the map as one texture with a distortion effect, can't you just include the markers in that texture to distort them along with the rest? Huh?

Or am I missing something?

I'm not drawing the map texture's color to the screen, rather its pixels are color coded on the separate rgb channels to signify some different aspects (solid/open, presence of water, etc). Also the map is 1/4th resolution, so stuff like a perfect circle couldn't be drawn in it.

Yeah it looks ugly that the markers aren't syncing up.

I like the map system though. I don't think complicated maps should be a concern at all, as long as you introduce the player to them properly.

Yuuup, still haven't figured that math out completely. Will return to it.

Anyway, have you considered a clearer way of defining which "layer" of map you're on? Like a color code or a number or something.

Might be a good idea! Mostly I'd like to solve it by having the layer switching not be much of a concern - most of the map should be in layer 1, and when you do go to layer 0 or 2 there should ideally be a chunk of region in that same layer so in most cases you have the relevant information in the same layer displayed by default as you bring the map up. You will of course be able to switch between the layers, but there shouldn't be a significant amount of browsing between the z-layers. It should not be like flicking through a file cabinet, but rather just the occasional jump in or out to follow one path or another.





   jamesprimate on December 16, 2015, 11:12:24 PM:

 Wink Wink Wink Wink there might be some other lizards as well





   jamesprimate on December 17, 2015, 12:36:32 AM:

this is definitely a cool idea. there are some other odds and end that will very likely be going in, such as shelter locations icons, food sources, and maybe locations of deaths. So i wonder if that stuff could be done as an "erodible" layer of memory? We'll ponder on how these all might be done when we return to map land after the region polish is finished.





   JLJac on December 17, 2015, 12:07:38 PM:

Update 498

New creature! This one is the "scavenger", an intelligent creature that will play a part in the narrative that we won't spoil - however I'll share the development of the animation with your guys.

Here are some sketches. We're aiming for something along the lines of the central one standing next to the slugcat.



Here's what we have so far:



This one is a knuckle walker, a type of locomotion I haven't done before so that should be interesting. Another challenge is that this creature is native to the Garbage Waste region (though it will appear in other places as well) which has some difficult terrain. Generally it's easiest for the creatures to move on flat floors, where they can build momentum in an easy linear direction that is aligned to the tile matrix. Garbage wastes however is mostly slopes, which is a bit harder to work with.



I'm tackling this one by fetching a few stretch of a few tiles from the path finder rather than just the next tile to go to, and then I try to smoothen that a little bit.



Still not completely effortless, but better than if it went tile by tile on the ground! From here I will try to make it swing its body a little more back and forth, so I later can hook up the arms to that movement and have it approach the movement of a monkey where both hands are placed on the ground and the body swung forward between them.





   jamesprimate on December 17, 2015, 01:35:09 PM:

Quote

So...is there going to be a digital art book or anything like that? I love those sketches

Digital and physical!





   JLJac on December 18, 2015, 03:49:02 AM:

James just sent me the updated version of SU and we made a map for it. The new rooms look awesome, and the new geographical layout of the rooms really add to the experience. It feels really cool to be exploring this space and have coherent directions of travel between the rooms. Excited!   Hand Shake Left Grin Hand Shake Right It's not even possible to express the improvement this region has gone through in just a couple of days.





   JLJac on December 19, 2015, 01:10:45 PM:

Update 499

Knuckle walking coming along! Looking pretty funny at this point though, some polish will be needed after the skin is applied.



Also the lower body is supposed to have two little legs - a part  haven't entirely figured out yet.



I think that for this creature the behavior and the look are so intimately connected that I will have to develop them side by side. We have a very specific idea about what the character of the creature should be, which is kind of a new situation. Generally so far we have had a vague concept and then the creature has grown out of that, concept being shaped by the technical implementation as much as the other way around. This one we have a few key words for though, such as "intelligent", "mysterious", "intimidating" and "similar to you". Striking all of those is going to take some pretty fine tuning - as you can see I certainly haven't hit any yet  Tongue





   JLJac on December 22, 2015, 07:33:35 AM:

Thanks for keeping the expectations low Hand Thumbs Up Right Epileptic

I guess we'll either have to come up with something or start lobbying really hard for a global switch to hexadecimal counting base.





   jamesprimate on December 22, 2015, 08:17:41 AM:

Thanks for keeping the expectations low Hand Thumbs Up Right Epileptic

I guess we'll either have to come up with something or start lobbying really hard for a global switch to hexadecimal counting base.
New trailer is quite an unrealistic expectation, and chaining milestones to arbitrary numbers is not a good idea in general. But can we expect at least a kickstarter update soon-ish? The last one was in august and not everyone reads deeper than your page there.

See this is why I like you Teod. Yep yep and yep. But since I'm blazing through the region polish right now, I'm in a pretty good spot to record some footage of the updated regions (Neo Suburban!), show off the map system in context (which is working out really well with the refactored region layouts!), etx. As you rightly inferred, the Kickstarter backers are restless for an update... so I'll try to kill 2 birds with one video!





   jamesprimate on December 23, 2015, 03:23:21 PM:

Haven't announced a release date yet! But yes we'll def be at pax east. Might have a rain world party too!  Hand Metal Right





   JLJac on December 25, 2015, 02:22:02 PM:

Hope you all have enjoyed your holiday celebrations!

Update 499.5

Scavenger coming along.



Color etc still up for change, and loooots of details still missing - hands for example.



Antler/ear head appendages are procedurally generated so each individual will be recognizable. The upcoming cosmetic stuff will take that even further - I want to aim for at least the amount of individual customization that the lizards currently enjoy.

Still a few animations that need to be implemented, such as climbing, swimming.





   JLJac on December 27, 2015, 02:04:50 PM:

Family holiday stuff stretched out for a few days longer, so sorry about the low tempo. Should be able to step it up again from now!

Update 499.75

Further scavenger individualization.



The faces are already fairly individual, and the body types have some stuff going on (fatness, muscularity of arms) but could definitely go with more. More importantly though I want to attach some scales and tufts to them - that stuff is usually what gives the best effort/return ratio. My experience with the other creatures is that varying the thickness of some limb between 10% and 190% is generally barely noticeable, but just sticking some random stuff on that sticks out and breaks up the silhouette has a huge impact immediately.

For this purpose I've started on tracking their spines (red dots), therefor this mad cucaracha science. The first thing I want to do is put some tufts on their backs, for which I think I'll have to track the shoulders and find some sort of surface for the back. What's different here compared to the lizards is that these guys have a neutral (neither facing left nor right) position where they have their stomach to the camera, whereas the lizards have their backs to the camera in the neutral position. This might mean that I can't put colored decals on their back (because of overlapping issues) but will instead have to go with flat color stuff. We'll have to see how it goes though!





   JLJac on December 28, 2015, 02:27:39 PM:

Thank you sir!  Gentleman

Update 499.875

Update labeling officially out of control. Project discontinued.

As for scavangers, I suggest adding a light colored spot on their chest. Maybe even a full chest tuft. With color, shape and size being random it can add quite a lot of variety.
This was a very good idea and went straight in. A colored field on their belly definitely brought some volume to their shape and made them appear as more of a creature and less of a flat color blob. Thanks  Hand Thumbs Up Right Hand Thumbs Up Right

I'm putting off showing them as I currently have them in a horrible looking debug state trying to attach scales to their backs, which is a bit troublesome due to their necks folding over forwards in front of the body. I count on sorting that out relatively quickly though, and then I'll just add some detail to them and the individualization phase will be done for now. Stay tuned!





   JLJac on December 29, 2015, 03:41:12 PM:

Update 500

So we're doing update 500 finally Smiley James is doing a video that shows a playthrough of the new Heavy Industrial region - it will probably be up in a few hours. It won't show you anything like new creatures or so, but for those of you who have played the alpha in particular it might be interesting to see how the game plays in its current form, contrary to cut up trailer footage. Also the map will be demoed.

In the mean time, I thought maybe some scavengers would be exciting!

 
 
 
 
 
 





   jamesprimate on December 29, 2015, 05:31:28 PM:

Happy Holidays from Rain World! Santa brought new vids, UI, maps, art and critters:
https://www.kickstarter.com/projects/rain-world/project-rain-world/posts/1454923




Full size: http://i.imgur.com/a6sQWMm.png





   jamesprimate on December 30, 2015, 10:40:27 AM:

The scavengers could communicate visually using glowing antler tips. Shocked


This one is in idle/think mode.

I think you guys are stuck in Christmas lights aesthetic  Cheesy

RW HI Map3 beta151222
Why do you keep naming your videos like that? It's kinda hard to find a specific one. It would be infinitely more helpful if it had  at least a date in the title, let alone a proper name.

The 151222 in the title is the date actually: 2015, Dec 22. It relates to the build version that we are working with. I def see your point, but until the builds are where we want them to be (i.e. done) is prefer the alpha /beta videos to be hard to find. You'll notice that all of the videos are set to "unlisted" as well for this very reason. We're close, but not there yet! When it's properly finished I want to to some proper flashy vids to hype and don't want people seeing footage from "random alpha build version 7485737" when they search for it.





   JLJac on December 30, 2015, 01:41:17 PM:

Update 501

Scavenger climb behavior!



They can switch between an arm walk and just climbing along the pipes. The one where they cling close to the pipes is fairly standard Rain World animation - they basically just swoop along the path like a car on a road, and then the limb movement and some cosmetic wiggling is added on top to make it look a bit more like animal locomotion. Same as the lizards. The arm walk is a bit different because it requires the path finder to use something else than the critters body as a reference. As far as the path finder is concerned, the critter "is" at the hand grabbing the pole, and from there it picks a path, finds a new grab position within reach along that path, and swings forward to reach it.



The trouble was of course transitioning between the two, but I think I've got it down now! The decision procedure has a bit of a bias away from the arm walk, as the standard animation is intended to work in all situations whereas the arm walk is really bad at anything vertical, and horribly bad at anything that has to do with maneuvering into a small opening or similar precision work. For long stretches of horizontal pole the arm walk will generally kick in though.





   JLJac on December 30, 2015, 01:59:29 PM:

Have to say, the scavengers turned out really great. The variety is amazing, definitely looks like its shaping up to be one of the most memorable encounters in the game. Will it still glide? Please tell me I get to pick a variant for the concept character poster haha...

You're the backer? Thanks for the awesome creature concept  Hand Thumbs Up Left Smiley Hand Thumbs Up Right

The gliding wings was in my sketches, but hasn't made it into the game. The main problem is a technical one that has to do with path finding. The entire room is covered in a system of invisible "connections", and each movement requires a connection. So for example, every place where you can drop from a pole to a floor below it has "drop connections" between the corresponding tiles.

For this reason, basically no creature in Rain World except from you (who is player controlled, not path finder controlled) can jump. Many can fly, which is no problem because it's just a matter of following "neighbor connections" between the air tiles, and a few can sort of lounge along the ground, but no proper jumps. Gliding would go into that same territory of the jumps, where the problem is that each starting point has a potential infinite destination points on the map. Mapping that out would take super long, and then memory would get really bogged down with all the connections that are barely every used, slowing down the pathing. The other big issue is getting the creature to actually end up on the destination position, which is quite difficult when you have several seconds moving through the air with the super chaotic physics of several body parts pulling at each other in all sorts of directions.

So, as it stands I don't know how realistic gliding would be. Potentially it could be added as a thing that is sort of outside the path finder - so they wouldn't be able to actually figure out a path including a glide or jump, but in an action situation they might be able to identify a jump or glide opportunity and go for it, for better or worse. I'll have to ponder on it a bit! As the gliding would be sort of a secondary ability, I've focused on getting them to work without it first, and then the potential to add it in later will always be there.





   JLJac on January 01, 2016, 01:33:22 PM:

Yep, I'm into the idea from the art perspective - that's why it made it to the sketches - just a bit sketchy about the technical implementation. We'll have to see how it goes!

Happy new year everyone! THE YEAR IN WHICH RAIN WORLD WILL BE RELEASED!  Tears of Joy Tears of Joy

Update 502

Finishing touches to scavener locomotion. Made it able to swim, and worked quite a bit with making it not get stuck, a standard problem for RW creatures that I've dealt with quite a lot before, so I have some go-to solutions by now.



The first problem is to identify when you're stuck. I do this by collecting a rolling list of the creature's position each frame - every frame it plops in its position in the first position, and deletes the very last position. Then, also every frame, it goes by all the items in the list and checks how many of them are within a certain distance of the critters current position. If you're moving that trail should be behind you, but if you're stuck they will all be up close.

When you know that you're stuck there are a few measures you can turn to. One is to stop applying certain forces to the chunks that are supposed to keep the critter in the right posture - such as the force pushing the upper body up and the lower body down to keep you upright. That sort of stuff is a common reason why you're stuck.

As the critter is stuck, a counter is increasing. The higher it goes, the more desperate measures I will take. After a while I shrink the collision boxes of the character in relation to the terrain, for example. Another common thing is that the creature will just try to get in the direction it's getting but harder , ie applying more force in that direction. After a while most creatures will start to wiggle and shake, lots of random forces in different directions tend to shake them lose - but this obviously does not look too pretty, so I apply it pretty late in the "stuck cycle" so that the creature will properly have depleted other options first.

No gif of this stuff, as it looks pretty horrible  Wink It's not supposed to be how the creature generally looks, but more of a desperate last resort when they are positively stuck - which they always will get one way or another in this chaotic environment. At the end of the day, it's looks much uglier that the critter is indefinitely stuck in a corner (as those of you who have played with the alpha vultures might now) than if they wiggle a bit unnaturally and then get lose and can continue doing their thing.





   jamesprimate on January 02, 2016, 11:59:53 PM:

Are lizards naturally competetive or  is that just a specific trait of those two lizards? Also, are the pink and purple lizards seperate species or are they still just variated colors in the "pink" lizard species?

Certain breeds are more competitive than others, but not all. Some work together! Creatures can squabble for any number of reasons, over food, territory or just being annoyed with one another. The breeds have certain tendencies, but each individual lizard also has its own unique personality blend that makes it behave slightly differently, plus being informed by whatever experiences it's had. If it's been injured or threatened by a creature before, it might act more aggressively or more fearfully depending on its personality, etc etx

Joars gotten a bit of that in the alphas and betas, but we plan on going quite a bit further with it still, should be a lot of fun once were there!





   JLJac on January 03, 2016, 12:09:17 PM:

So exactly how smart is that thing? Tool user? Able to use the interaction between species to its advantage, like the slugcat?
We want to keep it somewhat ambiguous, same as with the slugcat itself. The idea is that it's sort of your peer in this world - where most things are either dumb animals or like, a brain tree, this one is on your level. It's extensively tool using and nimble with spears... it might even have something to do with the handy pieces of rebar cut in a convenient length and sharpened to one end that are scattered everywhere... but it's getting spoilery in here so I better keep quiet  Wink

Are lizards naturally competetive or  is that just a specific trait of those two lizards? Also, are the pink and purple lizards seperate species or are they still just variated colors in the "pink" lizard species?

It varies. Some species actually hunt each other for food, and they don't get into territorial disputes but engage in chase and flee behaviors. For the others all of them have the squabble behavior, but are differently prone to it, and most noticeable differently prone to getting into fights with different other species. Most are the most antagonistic towards lizards of the same color, presumably as those are viewed as the most immediate rivals. Pinks and greens are kind of notorious, whereas the whites are more chill and passive.

Pink and purple are just variations on the pink subspecies. That particular one might have a bit too broad color range, it's come up a few times that people interpret them as different - easy to fix though!

IGN. PC Gamer. Rock Paper Shotgun. It's great seeing Rain World being noted as a 2016 game to look forward to by big sites
That's awesome!  Grin





   JLJac on January 04, 2016, 07:35:30 AM:

Finally a question I can answer haha!  Cheesy

The number of sprites in the head varies depending on the specific antler setup. A typical scavenger head is built like this:

the head base, a simple oval
teeth, a polygon mesh
antlers, multiple polygon meshes
base eyes, simple ovals
some of them have pupils or "deep set eyes" where the eyes are drawn with two ovals in a way that makes it look that they have a "rim" and a "bottom surface". In those cases these details go on top as another set of ovals.


(Example of the "deep set eyes". If you look closely you can see that they consist of two colors - one almost white and the other yellow. This is handled like a pupil, but one which is fixed to always look in the opposite direction of the head's direction - giving the impression of a slight incline rather than a bulge.)

The antlers are drawn as lines. The vertices of the lines are sent through a rotation script, that contrary to the Rain Deer antlers doesn't apply any actual 3D rotation, but rather just rotates them around the Z axis and/or squashes them in the X or Y dimension, when the head is seen in profile.

As the head is changing direction the eyes are moved accordingly - and when the head is nearing a side view one of the eyes is squashed along an axis perpendicular to its rotation. In the full side view, that squash is complete and the sprite has a width of 0px, making it invisible as if it was on the opposite side of the head.

The neck is also drawn as a line along a number of points, similarly to the antler sections. It has a gradient between the body color and the head color, unifying the two.





   JLJac on January 04, 2016, 07:47:50 AM:

In other news, James just sent me the refurbished version of Garbage Wastes region, and it looks amazing. The palette work is magnificent, and now the garbage piles has huge machine parts resting across them at odd angles - it really invokes an awesome sense of mystery about what the hell those machines are and where they come from. And you get to find out! As the waste collection area of the RW industrial complex, many parts and pieces from other regions have ended up here and are rusting on the heaps, so running through this region you will get little tastes of environments to come. This is of course also an economical design decision, as it allows us to use assets already created for other regions, but we also think it's a pretty awesome part of the player's experience.

The visual lift this region has gone through is outstanding. I'd even say that it's on the level of, or perhaps surpassing, that of the Suburban polish pass, and that is saying something! James' skill and to some degree tool box has expanded greatly since his last touch on this region, and that really shows. Super excited!





   JLJac on January 04, 2016, 08:39:13 AM:

We've made the slugcat's breath meter less confusing a while back. It used to be based on two float values - one that was the amount of air in your lungs, and one that was a "lung exhaustion meter" that would go up if you where at a very low amount of air. The exhaustion would make your lungs deplete faster, and not regenerate until you had filled the lungs 100% again. All of this invisible... Of course it was impossible to play with.

The new system has the lung exhaustion meter still there (it's needed so that you can't play an air creature, eg vulture, infinitely by just popping in and out of the water) but has made its state binary, and a little more forgiving. Also some other changes were made... It's a while ago. I think that previously the water would instantly kill you, but now there's a state of unconsciousness first where you have a chance of floating up to the surface and making it. Anyhows, it has cleared things up a little bit. That dive there is still in and VERY difficult, but possible. Otherwise the underwater death traps seem to be all taken care of.





   JLJac on January 04, 2016, 03:44:15 PM:

Thanks! Yeah no-one seem terribly enthusiastic about the pupils, so maybe they'll go out, or change shape somehow.

Update 503

The scavengers are going to have access to a system of tunnels that only they can use and which will allow them to travel across the region. The idea is that they will feel omnipresent, able to show up and disappear at a whim. Like ninjas! This means some technical work on my part though, as a new node type and the corresponding behaviors need to be installed. Been working my way through that today, and it seems to be working! Having some difficulty setting up a proper test environment though, so might need to wait until James has installed those "scavenger nodes" in a region for the final verdict. Looking pretty hopeful though!

Working with the scavenger nodes I finally found out what was causing an old bug where creatures would mysteriously disappear in abstract rooms. Really good to have found that problem, but the roots of it seem to go somewhat deep, so wasn't able to sort it out immediately. At least now I know where it's lurking!





   JLJac on January 05, 2016, 02:19:33 PM:

Yep, I now changed it so that the black pupils are very uncommon, and pupils in general are kind of uncommon but if they occur they're mostly colored. I always hesitate to right out throw a individualization feature out if I can just make it rare, because the individualization takes some priority over every single individual looking super good in my book. If they are to be distinguishable some of them need to be out on the extremes and might end up goofy looking, and I'm actually more okay with that rather than all of them looking the same. Hell, in real life there are a few goofy looking dogs, horses and humans  Wink

Also I'm not all too opposed of the goofiness itself. As we've talked about a few times before (pretty long ago by now I realize) the art style is supposed to have a cartoony element, and some individuals might channel that more than others. Rain World might have some grim moments, but it's not DOOM (I love DOOM btw, best thing ever, just that I'm going in a different direction) and not every creature is supposed to look like a dark grim meany. Rather, the charm as I see it comes from a bit of a sweet/sour clash of styles where both the cartoony and the relentless is present. Tom&Jerry meets Darwin, so to speak. The grim aspect seems to be what people notice about RW because it's not as common in other media I suppose, but RW is not only horrible and grim, it can be pretty funny too! Such as when a white lizard misses you with its tongue and ends up dangling from a ceiling, etc. So yeah, a little bit of both.

Update 504

Working on scavenger AI! They now have a super rudimentary idle behavior similar to that of the lizard, which I want to expand a bit on when they are more generally functional. Also I've started on an attacking behavior, where they will chase you if they have a spear or other weapon, and otherwise they will go retrieve a spear or other weapon - seems to work nicely!

One interesting aspect of their AI is that they will have a bit different personalities. I've gotten started on that already, by generating a personality type for each individual. The personality consists of three base stats and three derived stats. The base stats are completely independent of each other, and may thus appear in any combination. They are

Sympathy
Energy
Bravery

From these three more stats are derived. Those are

Nervous (high energy, low bravery)
Aggression (high energy and bravery, but low sympathy)
Dominance (Depends on energy, bravery and aggression)

The derived stats are heavily influenced by the base stats, but there is a little window for them to fluctuate and define their own value randomly, so occasionally you might get an off-shoot.

These stats already feed into the behaviors of the scavengers a little bit, and will have a heavier influence when I get to the more intricate behavior. For example, a nervous scavenger will have a hard time sitting still while idling, and will twitch and look around itself all the time.

Also it was low hanging fruit to feed these into the cosmetic appearance procedure, so now their looks depend a bit on these different stats. The cosmetics are allowed to fluctuate randomly but will gravitate a bit towards certain values, so while you might get the occasional lazy+skinny individual it will be more common to get lazy and chubby ones. Dominance has an impact on antler size and general body size, mean ones are more prone to the narrow pupil-less slits for eyes etc.

I didn't want a super obvious disney thing  where you see Scar in the beginning of the Lion King and go "gosh, I wonder who the villain is" so I've allowed for quite a bit of random fluctuation - it's just a subtle influence. Personally I can seldom tell from looking at a scavenger what it's stats will be, maybe with the exception of the dominance one which has some bigger influences. But maybe it will give you some little subliminal vibes when playing.





   JLJac on January 06, 2016, 02:42:35 PM:

Will the appearance/personality synergy also affect other species?
Maybe in some future polish pass!

That sounds amazing! Do the Scavengers have a voice yet? From what I remember reading ages ago, the voices also were individualized, though I can't recall if they were determined by the stats of the individual, or just randomized.

I really can't wait to see more of RainWorld. Great work!
I think they will be quiet actually!

Update 505
Boring technical work. Getting scavenger path finding to work, and brushing up some creature interactions in GW. Also making the items scavengers carry spawn on them properly, which has been (and might still be) a pretty nasty problem.

Here's a funny gif to compensate!






   jamesprimate on January 06, 2016, 03:25:46 PM:

i like this gif a lot for some reason





   jamesprimate on January 06, 2016, 03:42:32 PM:

just a snail, nothing special. joar is giving them a little polish since they play a bit more of a role in the new Garbage Wastes update





   JLJac on January 07, 2016, 02:39:33 PM:

Haha I just said they'd not be very talkative, don't get where you guys got the ghastly demon presence from  Who, Me?

Update 506

Afternoon hangouts in Garbage Wastes!



Working on idle behaviors. Still not all the way there - they seem a bit too mechanical, some organic component is missing. It's probably that they need to be aware of each other in their idle behavior - currently they just pick whatever spot they want to sit in and bulldoze any friends that might be in the way. Also the movement might be a bit too regular - stop, run, stop, run. Little touches!

At least I'm pretty happy with the rummaging behavior - you might see some of them doing little hand motions as if they're looking for something in the trash heaps.

Still not done by a long shot but moving along. Stay tuned!





   JLJac on January 07, 2016, 03:38:52 PM:



There, that's a little better. Has more chill.





   jamesprimate on January 07, 2016, 04:31:52 PM:

Garbage Wastes and chill





   JLJac on January 07, 2016, 05:02:18 PM:

Thanks! They'll generally appear in lose packs, distributed across two screens or so. They gravitate a bit towards the pack leader, but also don't want to be too much up in each others' grill. Their idle behavior saves a log of the last 10 positions they've been rummaging at and avoids those when picking future spots, causing them to sort of slowly sweep over a large field room like this one. Brave individuals tend to explore more, whereas more nervous ones prefer to stick to the pack.





   JLJac on January 08, 2016, 01:05:11 AM:

Garbage Wastes and chill
Cheesy New year, James! New year!





   JLJac on January 08, 2016, 12:57:38 PM:

Yep, they're looking for something and I think I have an idea! Don't want to promise anything though, and as that would be cosmetic polish the functional behaviors are prioritized for now.

Update 507

Old meets new! Scavengers have learnt to throw spears (and rocks, but they will use spears if they have them).



Scavengers don't actively try to kill vultures, but vultures try to eat them and their fleeing behavior includes throwing whatever weapons they have at what's chasing them. This should be tiered a bit - they shouldn't use lethal force when not in lethal danger, and from you they might "flee" but that will be more about them being uncomfortable with you than deadly afraid, and they shouldn't hurl spears as they go (unless you really corner them, perhaps). The vultures however they know all to well, and they'll do whatever it takes to stay alive.

I'd also like to make it so that defensive violence can turn into aggressive violence if they feel that it's going well and become enthusiastic about it - depending on their aggression parameter of course. First though, the base behaviors need to be in place.

A pack of scavengers can output a really impressive cloud of spears, their damage per second puts you thoroughly to shame. As each scavenger can carry many spears and there are many of them, you sometimes see a poor vulture getting blasted by a full broadside bombardment from some vertical structure they're sitting on, actually killing the thing. Me myself has managed to kill a vulture maybe a couple of times, and never without cheating in one way or another.

Another thing you can see in the gif if you look very closely, is a spear shifting hands. The green-eyed brown scavenger which is caught by the vulture in the beginning of the gif has many spears. When it rendezvous with the grey, black headed scavenger with long horns and a porcupine back, you might notice how it gains a spear, which is later thrown at the purple vulture - the last spear thrown in the gif.

I generally imagine the scavengers as sticking to a finders-keepers ethic; the whole joy of scavenging depends on that if you find something, its yours. However, if one scavenger has more than one spear and its pack member has zero, the game might do a roll between the spear owner's sympathy stat and the perceived desperation of the situation, and the spears might be distributed. In a very dire situation it generally serves the greater good if everyone is armed, as they sometimes manage to save each other.

As I get into their aggressive behavior I also want to make brave individuals sometimes actively go in for a rescue operation.

Speaking of aggression, I do have a little bit of that behavior set up already, and have tried to aggro one of them on myself in a death match sort of situation. Man... These guys don't play around.



It's not easy to survive a scavenger hellbent on killing you. They collect spears, and they hit you with the spears, no mercy.

It's important to say though, that in the game the scavengers won't act as "enemies" with nothing in mind but your destruction - rather they will probably never throw a spear in your direction if you're a little smart about it. They'll generally just try to get out of your way, and if you get really annoying they might hit you with a rock to show you what's what. If you however dedicate yourself to making enemies with them, you might be able to slowly crank up the hostility to something like this. Congratulations, you have effectually broken your save file by making the game mind-numbingly difficult! The idea is that this should by no means happen by accident though - that would be if you spend several cycles murdering scavengers, in which case you kind of had it coming for you  Evil





   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.





   JLJac on January 19, 2016, 01:17:07 PM:

@David Berman thank you for your post and your gorgeous photos!

I second everything James wrote above, but I'll try to give my angle. Yep, we have thought about more recognizable architecture, but we gravitated away from it. For a few reasons, the main one definitely being that one James mentioned. If you can recognize too much in the environment ("That there's a fire post", "that there is a roof drain pipe") the environment wouldn't feel alien anymore. As the creature you play is supposed to not really grasp what's going on in the world around it, the player should be in on that impression. We are going for a thing that's more abstract or expressionistic - what's displayed on the screen is supposed to serve an emotional narrative, and that emotional tone has "not quite understanding what's going on" as a very important center piece.

Another is that recognizable objects cement the scale too much. Experiments with assets such as a door frame and similar has had the outcome that the viewer apply human scale to them by default - and then the slugcat and everything else is given a very distinct relative size which is something we're not really comfortable with. How big is a slugcat compared to a human? Waist-height, knee-height, almost as tall? We definitely prefer never to answer that question and not have the player think about it either. Slugcats, vultures and the other creatures exist in Rain World, and its their sizes compared to each other that are relevant.

Working with this style for several years now we may also have developed a few in-world reasons why you don't see much in terms of living-quarters, but I can't even dip my toe in that without major spoilers Wink

As for flying creatures bumping into walls, yes they do! And yes I'd like them to do that less hahaha  Cheesy I'll probably try to work with it a bit more before release, but it's difficult to get the creatures to move ... gracefully. The reason is that the animation isn't animated frame-by-frame, instead it's all AI driven, and I can only make those AI behaviors so good. My animation technique could probably hardly be applied to a horse, dog or human for this reason - it's all very clumsy and unnatural. With these fantasy critters though we have the benefit of the doubt, even if I realize that only stretches so far.

@io3 creations, Thank you, and nope! It's 2D sprites being squeezed and rotated, combined with a few two-dimensional triangle meshes and lots of smoke and mirrors. There aren't really much in the way of sprite sheets, just code. "You want to move your arm here, but the arm is here, apply force in this direction" - that sort of stuff.

Update 516

Save states coming along rather nicely! After some consultation with James I split the save file into a "Player Progression" object which keeps track of basically how much you have unlocked on your copy of Rain World on your computer. The "Player Progression" owns one or several "Save States", which are objects keeping track of a specific slugcat and the world its in.

I'm not too keen on having multiple save files that the player has to mess with in a menu as I feel that would break immersion a bit - feels much better that you hit "continue" and get back to where you left off, and whatever happens and is saved has then happened; gives some gravitas to the events in the game and ties together the narrative. A linear narrative for a playthrough is stronger IMO than one that is branched and split and where one thing maybe happened but if you go to this specific save file it didn't happen, etc. If there is a huge demand for multiple save files (people sharing the game with relatives in the same household or similar) I could perhaps be convinced otherwise, and now so could the system! The main idea for it though is that as you rescue pups and get to play as them, those different slugcats will effectually act as "save files" of their own, each having its own story line that you could load and save. But those would be a few parallel narratives, no branching.

Above these save files is, as mentioned, the "Player Progression" object. Progression object keeps track of stuff that should carry over between save files - for example we've put the map discovery data there for now, because as James put it "the whole point for playing ng+ is to go to the places you didn't get to explore last time around". Also it will keep track of a bunch of different stuff such as unlockables.

All of this seems to be working to satisfaction for now at least! Currently I'm working a bit with creatures saving, but most of that system was actually in place and ready to go. What's needed is mostly making the save states work with the "things sticking to things" engine which I have in place and which is about such as critters grabbing other critters or spears being lodged in critters.

Bat swarm room depletion and its saving and loading is also in since before, and just need a few touch ups and fitting into the new system.





   JLJac on January 20, 2016, 12:30:34 AM:

#save files: Maybe we could have a system where it's possible to create different profiles, which would create potentially multiple "Player progression" object with "save states" - that would be really easy as I could just save to a few different files. Then you could have one for you and on for your sibling or whatever, and you wouldn't get each other's map exploration etc. Also you could create several ones for yourself I guess, but we do have some plans for allowing you to try different play styles within the same "progression" - that's basically what ng+ is gonna be for.

#asian signs: actually I was an exchange student to South Korea when initiating the project, so they are loosely based off of Korean hangeul writing Smiley Rain World has two distinct alphabets though, the other lending its aesthetic from cyrillic letters.





   jamesprimate on January 20, 2016, 03:21:52 AM:

Rain World has two distinct alphabets though, the other lending its aesthetic from cyrillic letters.

3 now!






   JLJac on January 20, 2016, 03:44:50 AM:

Rain World has two distinct alphabets though, the other lending its aesthetic from cyrillic letters.

3 now!



Whaaaaat





   jamesprimate on January 20, 2016, 06:01:30 AM:

Rain World has two distinct alphabets though, the other lending its aesthetic from cyrillic letters.

3 now!



Whaaaaat

Sky Islands circular text!






   JLJac on January 20, 2016, 06:15:34 AM:

Just a font variation of the asian alphabet  Wink






   JLJac on January 20, 2016, 02:33:58 PM:

That is a cool font variation (and great looking screenshot generally)! At first glance it shares a little similarity to the first half of the 'Utopian' language of Thomas More's book Utopia, which was coincidently published 500 years ago this year: http://www.omniglot.com/conscripts/utopian.htm

Great answers from both of you on human (or otherwise non-human but equivalent) signifiers and the world/location in general. I think that the fact that this is a well thought out (and, of course, constantly evolving) process is demonstrable in the results - the abstraction (and thus the simultaneous alienation of the audience/slugcat) works, and adds to the mystery and intrigue of the world, ultimately capturing that hard-to-do thing of constructing a location as a character in its own right.
Thank you! And all kudos to James for the world building, he really is making it "a character in its own right"!

This game has crossed the line of being beautiful and motivating, to being so amazing that it's slightly demotivating because I'll never be able to make something like this.
I don't think the indie community will see something of this caliber again for a long time.
The only compliment I can give to you is that stuff like this is why I love games, and why I love making them.

Thank you for the amazing praise! Don't be demotivated - go pack to page one of this devlog and see for yourself what it used to look like. We started really humble - a few ideas and some knowledge of how to code in lingo(!) for macromedia director(!!!) and then slooooooowly worked our way to where we are now.

It's basically time + experimentation = talent
I'm going to disagree.

Pure experimentation is like playing the lottery.  Very very very very few people get lucky that way.

Some are lucky and have a nack for certain things but if you are not gifted then you can still learn certain principles and what works from other's works.  However, much like tone deaf people won't be able to create good music, real talent tends to involve more than just hard work, trial and error or experimentation.  There's some aspect that you either have and can build on ... or you don't. 

If you don't, then you focus on what you're good at and team up with people who are good in other areas. :D
I'm going to partly disagree! The way I see it, "talent" is basically the same as creativity - having ideas and wanting to express them. That's what keeps you pushing through all those thousands of hours of work, and then you get better at the craft as you go. That part might be something you're born with, idk. For sure there are some people like that guy in count of monte cristo who got thrown in jail and made ink with his blood to be able to continue writing, and then there are people who have every opportunity and never create art. I for one am certainly not an ink-from-own-blood type, if I get sick or something I forget art and focus on surviving, but I've always taken every opportunity to draw or write or whatever and I don't get tired of it ~ and do think that thing has contributed to the incredibly lucky situation I'm in today, where I can work on this amazingly fun project full time (and then some)!

So if you really want to *make stuff* you'd have to be in extraordinarily bad luck to not get good at it sooner or later, I believe. A very big part is knowing what you want to make. If you look at those screenshots Gimmy posted above here, you'll see that the artist basically had the idea for what style he was going for from the get-go, and those years were spent removing the stuff that didn't align with that style and exaggerating stuff that was in line with it (at least that's my interpretation). What's cool about it though is not the craftsmanship itself, but the stylistic idea which was always in there but which the increased technical skill made come alive in the later work.

That's my thoughts on creativity!

Re: save states - I might be in the minority, but it'd be very important to me to be able to have multiple save profiles so that I can also play the game and not have wait until my wife is finished.

Noted  Hand Thumbs Up Right Hand Thumbs Up Right Hand Thumbs Up Right

Update 517
Got another polished region with functional shelters and a gate between them from James, and spent the day getting save states to work on an inter-region basis. Seems to be working out! Lots of special cases to test, such as if you're in one region, go into another for a bit, then go back and save, will your map exploration progress in that swiftly visited region be saved? Etc etc etc.

Currently I'm working on getting the map to display in the "Sleep" screen - we want to have it there so you can plot your next raid before actually hitting play and starting the rain counter. The problem with that is that in the sleep screen the world is unloaded, so can't easily ask rooms for their positions etc. I've solved that by having the game process hand over a little batch of data to the sleep screen in its dying breath before being shut down, and that seems to be working out. Still a bit of fiddling to do, but hope to have something basic to show you within not too long!





   jamesprimate on January 21, 2016, 03:32:05 AM:

The levels for instance... I basically started from zero a year and a half ago, not due to any grand passion I had to be a level designer but simply because someone needed to do them. Joar was too busy with creatures and I didn't trust anybody else to realize the clear vision I had for the world. 12-16hr a day 7 days a week will get you pretty good pretty quickly  Tears of Joy  Cry





   jamesprimate on January 21, 2016, 06:51:57 AM:

*proof of no life*

eh the point being that if i (a person with no real interest in level design or visual arts background) can get some good looking stuff, then you can too! its just a matter of how much grind you are willing to grind.

grind.





   JLJac on January 21, 2016, 12:20:07 PM:

Update 518

Sleep screen and map swarm room indicators coming along!



Probably don't have to mention that the illustration and the button are place holders...





   jamesprimate on January 21, 2016, 02:08:09 PM:

I recognize that layout like the back of my hand Smiley

Haha I'll bet you do! New version has quite a few new tricks though, can't wait for you to see it   Wink

So I had a nightmare of a day. Long story short: anal multiple redundancy file backup practices are well worth the fuss. Everybody take this opportunity to go backup your files right now!





   JLJac on January 22, 2016, 02:09:25 AM:

No! Any tips very very very welcome!





   JLJac on January 22, 2016, 02:50:33 PM:

Update 519

Did some small AI touches to lantern mice and in the general AI modules affecting the behavior of all critters. Also some general maintenance work with the save states etc. At the moment though, I'm working on A SECRET CREATURE! There are quite a few of them in there now - not anywhere near as many as the amount of critters devoted devlog followers have seen, and some of them are just variations/subspecies of already shown creatures, but still a fair few. Wouldn't want to rob you of the experience of discovering a new creature every now and then!





   JLJac on January 24, 2016, 01:45:09 AM:

YES! The code:

Code:

CGPROGRAM
#pragma target 3.0
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"

sampler2D _MainTex; //the map texture
sampler2D _mapFogTexture; //the map "exploration" texture

uniform float _RAIN;

uniform float2 _screenSize; //screen size in pixels
uniform float2 _mapSize; //map size in pixels
uniform float2 _mapPan; //the pan position on the map

struct v2f {
    float4  pos : SV_POSITION;
   float2  uv : TEXCOORD0;
    float2 scrPos : TEXCOORD1;
    float4 clr : COLOR;
};

float4 _MainTex_ST;

v2f vert (appdata_full v)
{
    v2f o;
    o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
    o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);
    o.scrPos = ComputeScreenPos(o.pos);
    o.clr = v.color;
    return o;
}



half4 frag (v2f i) : COLOR
{

//This here is it!
float dst = clamp(distance(i.scrPos, half2(0.5, 0.5)), 0, 1);//distance to center of screen
half2 displace = normalize(i.scrPos-half2(0.5, 0.5)) * (1-dst)*pow(dst,lerp(4,6,dst))*2; //the displace vector. Spent lots of time tuning this one to get it right, not knowing that I'd have to backwards-engineer it later!
displace.y *= 0.5 / 3.0; //Displace less vertically, as the screen is wider than tall (and divide by three because the map texture is 3x as tall as the actual map size, accommodating the 3 layers)
displace.x /= _mapSize.x / 500; //divide the displace with the size of the map texture getting a consistent amount of displace on different-sized maps (500 is a tuned value to get the right amount of displace)
displace.y /= _mapSize.y / 500;

float h = 0.5; //the blue color channel tells the shader which layer it should render - if statement because the floats become a bit distorted in passing to the shader
if(i.clr.z == 0) h = 0;
else if (i.clr.z == 1) h = 1;

//get the grab coordinate on the map texture
half2 grabPos = half2(_mapPan.x + (i.uv.x - 0.5) * (_screenSize.x / _mapSize.x) / lerp(3.25, 4.75, i.clr.y), (_mapPan.y / 3.0) +  ((2.0*h)/3.0) + ((i.uv.y - 0.5)  * (_screenSize.y / _mapSize.y) / lerp(3.25, 4.75, i.clr.y)) / 3.0);
grabPos -= displace; //applying the displace. If I comment this out, I get a flat-looking map onto which I *can* place markers accurately.

if(grabPos.y < lerp(0.0, 2.0, h)/3.0) grabPos.y = lerp(0.0, 2.0, h)/3.0; //clamping the grab coord in the vertical third of the texture that is this layer of the map
else if(grabPos.y > lerp(1.0, 3.0, h)/3.0) grabPos.y = lerp(1.0, 3.0, h)/3.0;

half4 grabCol = tex2D(_MainTex, grabPos);

//this stuff below here is just about giving the pixel the right color once I have the right texture coordinate - not really relevant to the problem at hand

if(grabCol.y > 0.5 || tex2D(_mapFogTexture, grabPos).x < 0.5) return half4(0,0,0,0.7 * i.clr.w * (1.0 - i.clr.x));

float lght = grabCol.x;

if(lght >= 0.3 && lght <= 0.7 && grabCol.y == 0)
return half4(1,1,1,1 * i.clr.w);
else if(lght < 0.3){
return half4(0,0,0,0.7 * i.clr.w * (1.0 - i.clr.x));
}
else if(grabCol.z > grabCol.x*lerp(0.5, 0.9, sin((grabPos.x - (_RAIN*75/_mapSize.x))*_mapSize.x*0.25)))
return half4(0.05,0.05,0.8,i.clr.w*lerp(0.5, 0.1, i.clr.x));
else {
if(tex2D(_mapFogTexture, grabPos).x < 0.54)
return half4(0,0,1,i.clr.w);
else
return half4(0.25,0.25,0.25,0.4 * i.clr.w * (1.0 - i.clr.x));
}
}
ENDCG


Please keep in mind that I'm a self-taught savage that never intended for anyone to read this code, so it might be baaaaaaad.

The map is three layers, each of which occupy a vertical third of the map texture. The sprite knows which layer to draw from by its blue color channel - actual map object has three sprites with blue colors 0, 0.5 and 1. Those map sprites are the same size as the screen, ie 1024*768 or 1366*768 in case of wide screen.





   JLJac on January 24, 2016, 08:20:06 AM:

Exactly the same result up when 0<x<1 yep! The corners are however in a range where x is up to the square root of two, and then you get these weird effects with a simple x^5 function:



It's a super-distortion where the image sort of doubles back and becomes mirrored around some edge, presumably the perimeter where the distance is equal to one.





   JLJac on January 24, 2016, 08:37:15 AM (Last Edit: January 24, 2016, 08:55:35 AM):

Actually using the formula I've copied straight from my code the reason becomes pretty evident - the distortion is allowed to taper after a bit instead of shooting exponentially for the stars.



Also one thing that I tend to forget is that the dst value is not 1 at the edges, but 0.5 ~

One curve that looks almost identical though is y = x^5 - x^7... That one is so simple, has got to be possible to do backwards! Gosh I wish I had some sort of math education :S





   JLJac on January 24, 2016, 11:21:54 PM:

Hm hm hm... The problem is that what I'm after is that decline that makes it hit zero at x = 1. This actually makes sense if you consider the graphical result I'm after. If you consider the zoom level at the corners as a default, there should be zero distortion out there. At the center of the screen you can't have any radial distortion or else you end up overshooting the center coordinate and get weird circular artifacts. So, what remains to be distorted is the area in-between, ie 0<x<1.

Another problem is that what may appear as very small differences on a graph becomes large and noticeable in the actual shader. For example, the simpler function y = x5 - x7 looks similar to the more complicated y = 2*(x4+2x - x5+2x) when plotted, but in the shader it makes the difference that the entire center area suddenly looks flat rather than bulging with the bulge now concentrated to the sides, which isn't as visually exciting.

My friend suggested a lookup-table as a solution. That might be worth trying?





   JLJac on January 25, 2016, 01:02:41 AM (Last Edit: January 25, 2016, 01:42:33 AM):

Offset texture sounds like a good idea - it's basically just a 2D lookup table, right?

Now, specifically how specifically would I use it? Say that I have a texture where the r channel of each pixel represents ...

HEY hold on a minute! That function 0.275*pow(dst, 3.14) you posted actually yields a VERY similar result to the original one! I could totally roll with that! So, let's inverse it then  Grin That would be a pretty simple log calculation, right?


EDIT: Using the wolfram alpha inverterter I got an inverted function:

however I can't seem to be able to milk it for the right results - guess I just lack knowledge on how to apply it -.- Just doing a straight up displacement using that new curve obviously doesn't work because as you can see from its convex shape I get super much displacement in the center of the image, which is the opposite of how the displacement in the shader goes about.

Will have to ponder it a bit!





   JLJac on January 25, 2016, 04:11:56 AM:

Dude, you don't even want to know. I've fallen into a programming habit where I have basically everything as floats between 0 and 1 and use lerps within lerps within lerps, and pows, so many pows. Because pow has a really nice effect on a 0<=f<=1 float, being that it sort of shits the value upwards or downwards (exponent below or above 1) whilst keeping the edge cases 0 and 1 in the same places. So then I can change the tendency of a value, but still know where I have my edge cases, like so:

if(Random.value < Mathf.pow(anger, Mathf.lerp(1.5f, 0.3f, personality.mean)))
    Attack();

In the above case the chance of attacking will always be 0% if anger is 0, and always be 100% if anger is 1, but in the cases in-between the curve is skewed depending on the personality.mean variable. I love it, and it has soooooooo many floating point exponents  WTF

And... this has of course leaked into my shader code as well. So, yeah, thanks for the heads up. Might need to go in there and clean a bit of that up if it's a big problem. I haven't noticed any performance issues with it though, neither in the c# or the shaders. Admittedly haven't tried on a lot of computers, so the problem might surface during beta testing - but we have run it on a few computers including a weak laptop and haven't had any issues so far.





   JLJac on January 25, 2016, 04:46:31 AM:

Don't think I'd generate the texture in CG though, in my setup I just have shader CG code that runs for each frame times each pixel. So better then to generate it on game start up and then just feed the texture to the shader.

It would solve the problem for sure. I actually wouldn't even need a 2D texture - the direction of the displacement is always the same (towards center) so what I need is just the magnitude of it which could be stored in a 1D texture, where the r value of each pixel is magnitude in one direction and the g value is magnitude in the other. Easy!

The reason I'm hesitating is that it feels slightly... inelegant. Don't want to generate and keep a texture in the ram which I have to keep a reference to etc... When it should be possible to do it all in pure math. Also I'm starting to have a little bit of an issue with the time the game takes to boot (think it's just the sheer amount of code compiling - it's a second or two so not a problem as a loading time for a finished game but a bit annoying in development where you have to jump in and out again and again) so I'm not in love with the idea of adding another potentially time consuming procedure on start up.

Hm hm hm. Gonna try the maths approach a little bit more, then I'll probably give up and do the texture either way!





   JLJac on January 25, 2016, 05:26:02 AM:

Very very good points, all of those. Very good points.  Who, Me?





   JLJac on January 25, 2016, 05:54:47 AM (Last Edit: January 25, 2016, 06:05:51 AM):

One-dimensional lookup texture apparently not a good idea. Resolution doesn't work out, giving these jagged lines, even at 10 000px wide.



Remains full sized 2D lookup texture, which is gonna be like 40mb in RAM  Tired

Edit: Full size 1366x768px texture gives the same artifacts. I'm gonna go back to using some simple maths and trying to make an estimate that places the markers as good as I can tune them.





   JLJac on January 25, 2016, 06:22:55 AM:

Yeah, if I just return the grabtexture value in the shader I see a smooth radial gradient from black to red, like supposed to. Same with the 2D lookup table.

This here:



is the result of a tuned approximation. I hooked up the base and the exponent of the displacement values to the mouse coordinates and moved around till I got the best result, then copied those values. It will have to do for now. Unless someone comes up with an incredible revelation I think I have to move on now, we send builds to Adult Swim at the end of each month and I still have a couple of things on my to-do list. Thank you so much for all the help, guys! Hope we can find a mathematically perfect solution for it some time!





   JLJac on January 25, 2016, 12:59:56 PM:

This is just an approximation, I do an y = bxk where I've tuned b and k to make it baaaaasically line up, although you can still see a few pixels of displacement in some cases. Had to be pragmatic here, working on schedule and previous attempts to come through to James, AS and everyone else I work with on why mathematical purity is worth 16+ extra work hours towards a very similar looking result has always yielded somewhat limited amounts of understanding  Wink

Please do tell more about splines!

Update 520

Worked on the shader displacement issue, as you may have noticed. Also implemented a damage system. Previously damage within the game has always operated on a sort of rouge basis, where every creature has code such as "on damage, check if the damage source is a spear, in that case immediately die". This generally worked, but say that we wanted to tune the damage a certain interaction does, or make a creature more or less tough - then you need a system.

So I set up a simple little thing which tracks damage types (stab, blunt, bite, etc) and sends a Violence message to the affected object with a damage type like so, as well as a damage severity value (working on the base 1.0 is the damage of a spear), a stun bonus (for items such as the rock that need a little extra stun on top of the very tiny blunt damage stun it does) and a momentum of the damaging force. Creatures can then either override this function and mess with it, such as in the case of the lizard "head shield" that bounces off spears, or just let the default virtual method run.

In the critter templates they have a basic toughness parameter which incoming damage is divided with, a basic stun toughness param which does the same for stun, and a list of all the damage types with specific fine tuning possibilities to create weaknesses/strengths against certain damage types.

On top of this, I implemented a system with "appendages" which are basically all the long parts of a creature. Before this, spears and rocks would pass through the necks or wings of vultures for example if they didn't connect with a "chunk" - meaning it was possible to very frustratingly get a spear throw that passed gracefully between a vulture's body and head without doing any damage.

The appendage system basically checks for line intersections between the "appendage" and the movement line of the projectile, and can detect a hit even if no chunk has been overlapped. Spears can stick to appendages, and poke out in the correct angle.

The system is very easy to implement for any creature, and currently I have it set up for a few secret critters and for the vulture. Where you previously couldn't hit the vulture's neck, you now get a nice double damage bonus for a spear to the throat, and you can also hit the wings.

I quickly set it up so that the vulture wings have a separate health state each, taking about 3 spears to be completely taken out. It's pretty tragic to watch the thing trying to climb and fly with a broken tentacle, but really fitting to the general Rain World mood which is supposed to have an element of more "realistic" lasting consequences of violence.

So far so good! Had a quick discussion with James about Daddy Long Legs and damageable tentacles, so might give that a go too before moving on. Otherwise the daddy is basically a damage sponge that feels no pain and can't be stunned, so even if all the tentacles might end up shielding the body completely it might probably be a welcome change to be able to take a tentacle or two out rather than not being able to affect it at all, haha!





   jamesprimate on January 25, 2016, 07:45:58 PM:

i dont even want to think of it until post-release when we have regained vaguely normal body weight, sleep and mental health baselines.  Cry





   JLJac on January 26, 2016, 11:41:08 AM:

Haven't really recorded any gifs of those, so they're lost to the wind I guess  Shrug

Update 521

Working on the main menu. This might be stuff we don't really want to reveal yet, but I can say as much that we have a direction we're happy with and which we think works really well with the style of our talented illustrator Dell.

It looks like the game will feature two kind of distinct art directions, of course the pixelly style of the game itself, and then a more HD illustrated approach for the menu background etc. Getting the two styles to go together is going to be a bit of a challenge (especially in for example the sleep screen where they are going to meet - illustrated slugcat and pixellated map) but it should be possible to get to work, and when we do I think it's going to be a big benefit to the experience.

Whereas the flat-color pixels of the game are good for getting creature behaviors etc across, I think that the illustrations will do a really good job of complimenting that with giving a feel for the grit, grime, textures and smells of Rain World.





   JLJac on January 26, 2016, 12:43:06 PM:

Anyone knowledgeable of fonts and/or pixel graphics around here? Menu work has forced us to start considering a font, but it's a bit difficult. A completely hard pixel font looks a bit rough - even though the game does only have hard edges, most of those are moving in a soft way, and the static jagged lines of a pixel font looks kind of harsh. On the other hand, putting an anti-aliased font on top of pixel graphics obviously makes the entire composition look like something a kid pasted together using random google images assets and ms paint Waaagh!

Is there some happy in-between? I was contemplating the idea of a pixel font with 1 in-between color for AA, but maybe that's really bad for some reason? What are the general dos and don'ts of game fonts?

(and yes I know I'm supposed to be a graphic designer, but they never taught us how to do neo-semi-retro video games, just like... print and stuff...)





   jamesprimate on January 27, 2016, 05:37:07 AM:

good suggestions! we are considering all of them. honestly, were probably only in this pickle because I fought to keep the game text-free for so long. over time I have seen the error of my ways and hereby officially renounce my text-extremism!





   jamesprimate on January 27, 2016, 07:45:41 AM:

Text-free approach is still a thing that speaks to me a lot. I always imagined you'd do it in a Duck Game like aproach, aka a room with a few exists, each exit marked with the enigmatic in-game alphabet, but styled to suggest what it does; with a big wide pipe in the middle that's a "start game" equivalent. Probably wouldn't avoid some the text though (like resolution switching)... Still, if you have different thing in mind, that's awesome too Smiley Can't wait to see it Wink


OH don't worry, we're not going to compromise the animalistic concept with text, but it will be necessary for in game tutorials and such that exist on a player-level rather than a Slugcat level. Originally I had intended for the player to learn exclusively from world interactions, but we have testers that have been playing for 2 years and still haven't caught on to a few of what I would consider pretty basic gameplay elements. And that's an essential part of the game design, sort of? It's a chaotic world that can be traversed in whatever way the player is able to, but at the same time we need to be able to quickly communicate "to preform a pounce, stand still for a moment then press forward + jump" 





   jamesprimate on January 27, 2016, 10:16:39 AM:

agreed






   jamesprimate on January 27, 2016, 02:13:50 PM:

Quote
For this game I could imagine a "Memory sequence" where the player is a young slugcat and one parents is teaching the skills of life.

Quote
  this would perhaps mean some kind of pre-game/separate tutorial element where you see another Slugcat moving around, intuitively suggesting that you too can do the same things

exactly this sort of thing has been considered (and we may further consider!) but it would require an entirely new system for AI creature "puppeting" that would probably not be the best time investment at this point if its just going to be used here. Plus there are a lot of concerns about "scripted" creature behavior: joar has worked very hard to make believably intelligent AI with its own agency, and making scripted creature events that wouldnt compromise this with wooden "acting" or awkward looping behaviors would be very time consuming.

loooooong story short: some-well executed text could potentially solve all of these problems with very little effort. But were not quite there yet, just thinking about it in the context of a menu mockup for now!

If you really need some form of text or icons, the cleanest way might be some introductory area where instructions are floating on the screen (a pit and a thingy saying <X to jump>) that fades out when you pass it. Nothing stops you and you can just run past all these boxes. No cutscenes or dialogues you have to press through or anything.

i completely agree!





   JLJac on January 27, 2016, 03:00:45 PM:

As James says, it's partly a question of dev time investment/returns. Learning new moves isn't a huge part of the game (say that there are 6 or so "special moves" out of which maybe 2 or 3 would need explicit explanations) and making some system that shows you how to do those 3 moves in a text-less way would be some work if it's to be the same quality as the rest of the game. The other option is to put text on the screen once or twice in the very beginning of the game, which is of course very easy. And when it comes to how we'd like to spend our time (of which there never seems to be enough in a day, month, year, what have you) we'd rather spend that time working on some epic end game set pieces etc that we know will stay with the player and affect them on an emotional level.

That said, we don't entirely count "clever" solutions out, so if we get to actually implementing some sort of tutorial and an idea that doesn't require us going out of our way for two weeks pop up, we grab it!

Update 522

Game has a working menu! It has four buttons, new game, continue, options and exit. Options doesn't do anything yet. Continue is properly greyed out if there's no save file in the root folder.

This is not the final menu set up, but a place holder. Later as we get to the playable pups, I think the "new" and "continue" buttons will be swapped for a button that takes you to a slugcat select screen ~ so you can do that thing with a separate save state for each slugcat which we talked about.

Everything seems to work! You can start a new game, load a game, start a new game and abandon it and load a game and have your map exploration from that last game wiped, etc.

Also the menu has gamepad, keyboard and mouse support. Clicking the mouse once puts it in mouse mode, pressing a key or a gamepad button takes it back to keys/gamepad mode.





   jamesprimate on January 27, 2016, 07:13:35 PM:

The other option is to put text on the screen once or twice in the very beginning of the game, which is of course very easy.
Lots of games have information like this displayed randomly during loading screens.

HMMMMMM i like this, yes





   jamesprimate on January 28, 2016, 09:53:57 AM:

nah, anything dealing with the world-level iconography, signs etc., has serious narrative ramifications. the slugcat is a stranger is a strange land; a lonely animal making its way through the remains of an ancient civilization. so having a sign with a slugcat on it breaks that immediately, lmao





   JLJac on January 29, 2016, 06:18:14 AM:

We'll have no tutorial or tip stuff about actual creature interaction I think - kind of the point of the game is figuring that stuff out for yourself. The entire extent of the tutorial will basically be "crouch and pause for a bit then press forward+jump to leap, slide and jump to backflip" and the extent of/time put into the tutorial will be proportional  Tongue





   JLJac on January 29, 2016, 06:20:56 AM:

As for a "separate tutorial mode", we have a sandbox mode planned, which will basically be running on the engine of the multiplayer but where you can throw in one player, two players, a player and some creatures you've discovered, or just some creatures you've discovered and no players at all. So that would both allow for practicing moves in an empty room, practicing a specific creature interaction, or observing interactions between non-slugcat creatures and learning from that.





   jamesprimate on January 29, 2016, 08:01:24 AM:

It will be a selection of individual arena-like rooms, some from the main map and some specifically for multiplayer/ sandbox. region-themed content (creatures and rooms) unlocks as you make your way through the main game.

As for a "separate tutorial mode", we have a sandbox mode planned, which will basically be running on the engine of the multiplayer but where you can throw in one player, two players, a player and some creatures you've discovered, or just some creatures you've discovered and no players at all. So that would both allow for practicing moves in an empty room, practicing a specific creature interaction, or observing interactions between non-slugcat creatures and learning from that.

What is the requirement for "discovering" a creature? Is it just any creature you see or are in the vicinity of, or is there a more complicated system?


Not on that quite yet, but initially the idea was a "creature egg" that you have to find and bring back to your den.

And yes the gladiator mode is suuuuuper fun, even in the old alpha! So I'm really looking forward to it with all the new creatures. It will definitely take some thought on our part to get it to not be a UI/menu hell though.





   JLJac on January 29, 2016, 02:04:08 PM:

Sorry about the lack of updates! We send end of month builds to the people at Adult Swim, and this run-up turned out a bit extra intensive. Promise to be back at it very soon!





   jamesprimate on January 30, 2016, 08:42:21 AM:

Hey Christian, what was the size of shadow complex?  i just finished up the first round of polish on the 12 regions and did a "final" screen count just for, uh, fun: 1427 before gates and shelters  Epileptic





   jamesprimate on January 31, 2016, 08:10:58 PM (Last Edit: February 01, 2016, 01:02:56 AM):

WOWOWOW things are really really coming together this month. Adult Swim had us on a pretty insane ambitious timeline, and despite literally wanting to die for the past few weeks (i worked 25hr straight yesterday for instance), somehow it all came together for this build. Rain World is now a 100% playable game, with a (gorgeous) menu, saving, progression. First round of polish is done for all 12 regions. Gates are functional and spiffed up with some new visual effects, UI is looking surprisingly good, in-game map is complete and has had some nice polish. ITS HAPPENING GUYS  Tears of Joy

Anyway, I know i cant show too much now but wanted to keep you guys in the loop  Beer!

EDIT: oh, before anyone gets the wrong impression: this was just a deadline for a milestone , not *The Big Deadline*, so still a while to go... But still it was a pretty big milestone!





   jamesprimate on January 31, 2016, 11:24:28 PM:

thank you! and yes we seriously need to update the site, jeez  Tired





   JLJac on February 04, 2016, 07:34:47 AM:

Hi everyone! Really sorry, but I definitely spoke too soon about getting back to regular updates. It was deadline inferno there for a while, and once through we took a look at the schedule and... there's like 5 big secret things on there! So, very exciting stuff, but sadly I can't share it. You'll get to see it later!

James on the other hand has a weeeeeeeell earned month completely off from levels, instead doing what he's actually all about - music and sound. He says he has written several tracks already, though I haven't heard them yet. Pretty sure they're amazing though, as he claimed his artistic direction was More Weirder, which we can all endorse.

So, I'm getting back at my mystery tasks. Will check in with you guys from time to time though!





   jamesprimate on February 06, 2016, 12:16:13 AM:

Just popping in! Joar is working on some really cool new setpiece stuff, and im sifting through the old music and audio to see whats salvageable from the past few years of on and off Rain World audio work.

There is kind of a lot of music laying around in various stages of completion (around 70 tracks), some gems, but also a good deal of stuff thats either unusable for one reason or another, such as the game moving on stylistically, other later tracks doing a better job of capturing that mood, and of course some i just dont like any more. Pretty glad to do some housecleaning with this, as it will open space for new music! Im also using this time to remix and remaster the older tracks that *do* make the cut, and with that establishing a baseline for consistent volume levels, compression, saturation, etc etc., going forward.  Exciting, I know!





   jamesprimate on February 06, 2016, 11:36:47 AM (Last Edit: February 06, 2016, 12:20:56 PM):

yes to all of the above! the planned system has a few different music tiers. there will be a selection of music and atmospheric audio for each region, specific tracks that will be attached to significant rooms for "narrative movements", and also music that can be attached directly to physical objects or structures in the game, so say as you approach a tower in a wide room the music for that tower fades in as you approach and fades out as you pass, etc. Its going to be the interaction of a couple of different systems, so making it all smooth will probably take some fussing with. Pretty excited though! ive been waiting to do this for a looooong time  Tears of Joy

And heck yeah joars already got that cool lowpass filter effect for going in and out of the water: https://youtu.be/ernPmYEg0k0?t=3m56s


Edit: hey speaking of starbound, do you guys have any other open world-ish games where the music implementation really speaks to you? obviously fez is a big one, and probably one of my biggest influences (talking implementation here) is dark souls.

Rain World has a lot of unique structural limitations as far as how the music will be used (the periodicity of the rain cycle, the need for sonic "space" to build apprehension, etc), but i could def use to see how other sound designers have solved these problems.





   jamesprimate on February 10, 2016, 06:06:28 PM (Last Edit: February 10, 2016, 06:13:03 PM):

If any of you guys will be going to GDC, Joar and I will be there giving a talk on Rain World procedural animation. Or, he will and ill be up there for moral support! Anyway, if any of you are going to GDC and want to check it, heres some details: http://schedule.gdconf.com/session/animation-bootcamp-rainworld-animation-process

Joar has plans to make an example creature LIVE during the presentation, so that should be pretty fun. And please say hi i you do, we love hanging with tigs peeps! :D

And thanks thanks for the music suggestions everybody, they were all good! I either played or watched playthroughs of pretty much everything.

right now im in ear-bleed nightmare zone auditioning, filtering and EQing 1000s of ambient audio clips, but all that is going really well. yesterday we tested a dynamic audio system which ill explain a bit more in later posts, but its something we've wanted to include for a while were pretty excited with how its all coming together. tonight ill be doing the first region with complete ambiance audio, dynamic audio and maybe some music triggers as well, so definitely on track to get audio done by the end of the month... which is pretty insane, but hey nothing new there!

So I think I'm going to start playing around with some Fish AI™ sometime soon... Any pr0tips from the masters?

ill see if i can get Joar to hop in the thread soon and drop some tipz. You can tell we are in maximum crunch mode when even HE isnt able to post vague updates, haha.





   JLJac on February 12, 2016, 07:44:27 AM:

So I think I'm going to start playing around with some Fish AI™ sometime soon... Any pr0tips from the masters?

I have one that's very simple and might be useful!

 If you have something where you want to compare many different options (such as where to go on the map) - write a function that can grade each option with a score.

So for the where to go thing, say that you want them to not get stuck in corners, you want them to stay close to their mates and you want them to stay away from the player. Then in your ScoreOfThisPosition method you add to the score the distance to the closest wall, subtract from the score the distance to the school buddies, and then add the distance to the player x 10 (naturally the different factors need manual tuning).

A position that's inside a wall or otherwise unreachable should just return a float.minValue or something, you never want those.

Next step, you have the fish save a goal position. Now, every frame you pick a random position in the room (or a random position reasonably close to the fish) and compare the score of that position to the score of the saved goal position. If the score of the random test position is better, set that as the new goal!

This system is cool because it spreads the comparing out over many frames, contrary to comparing every alternative every frame which would be super slow. Also because it has a random element to it you'll get something that's a bit unpredictable, but because the goal position can only swap to a better position you know that given some time it will reliably gravitate towards the right behavior.

Hope that gets you inspired! Lycka till!





   jamesprimate on February 12, 2016, 08:23:51 AM:

sneak peek at some of the audio devtools on twitter: https://twitter.com/RainWorldGame/status/698109778137124864





   jamesprimate on February 15, 2016, 06:39:15 AM:

Todo for initial release: audio and music, some narrative stuff, some set piece, some art stuff, a few more creatures, a few more systems and some general "getting it all to work nicely" stuff. Sounds like a lot, but comparatively speaking we are on the home stretch and feeling very pretty dang good about things!  Toast Right





   jamesprimate on February 15, 2016, 09:51:09 AM:

Toast Left Awesome!! Looking forward to getting beers with you James after I come back from MAGFest

yes sir! def say hi to our illustrator Del at MAGfest, she may have some slugcatty stuff at her booth Gentleman





   jamesprimate on February 18, 2016, 08:27:05 PM (Last Edit: February 18, 2016, 08:32:44 PM):

It's sad that the updates on this devlog have slowed down so much... I get that a lot of the stuff currently being worked on is not really good devlog content, but what am I going to spend hours over analyzing now?  Cry Cry

sorry!! not to be a tease, but the stuff being worked on now is AMAZING devlog content, but its all massive spoilers, so...  Ninja

well... except what im working on, but nobody wants to hear a million clips of subtly different background audio. "heres a blend of filtered white noise and a field recording of mountain air that im using for the "Grid" subregion of Sky Islands. I use a subtle lowpass filter and pitch shift to create a sense of the winds increasing in strength as the player climbs higher" etc etc.





   jamesprimate on February 20, 2016, 06:39:25 AM:

totally! im taking an ear break, so let me tell you a little about the ambiance audio engine Joar has assembled.

Here is a snip of it in action. For the sake of clarity, its a super simple one i just put together from the Underhang region:


larger: https://i.imgur.com/nqSniyS.png

Might look a bit busy even so, but the concepts are pretty simple. Basically, there are 3 main types of sound objects that can be spawned: Omnidirectional, which applies a sound to the entire room; Directional, which pans a sound to the right or left side of the stereo field; and Spot which places a sound object along an X,Y coordinate. All of these are selected out of that large box on the right, which holds all the ambiance audio loops ive been creating over the past month or so, and any loop can be used as any type of sound object,

For Spot the player acts as a kind of microphone moving through 2d space, so the nested circles you see represents the area that a sound can be heard in. The inner circle is where the sound is at its peak volume (as chosen by the sliders in that objects option boxes that you can see on the left), and then fading out until the outer circle.

So between these 3 tools quite a lot of things can be accomplished, even in a simple form like here. Because you can spawn and blend multiple omnidirectional sounds, you can create a sense of shifting scenery as the player moves from room to room through the regions, giving a cohesive sense of space and aural geography; for instance winds growing stronger as you climb a huge structure, and the ground ambiance slowly fading away. By adding spot sounds to that you can bring to life the background environment: the hum of an old machine, bugs buzzing around a pile of rubble, howling winds on a little hilltop, etc.

I'll do a proper lil video when I hit a stopping point, but here at least is a clip i posted on twitter that shows 10 sec of moving through a sound environment with the audio devtools on so you can see whats happening: https://twitter.com/RainWorldGame/status/698109778137124864




Its super fun, but man did i set myself a huge task, as usual. Initially the idea was going to be to get general ambiance audio per region/subregion and throw in a few Spot objects here and there on certain significant objects to spice it up. But once you've established a certain level of detail by adding the Spot sounds, theres no going back; the ear likes to hear the movement of the player through a dynamic sound world, so rooms / screens without the spot sound detail seem noticeably dull by comparison. So now i find myself having to go through all 1467 screens with laser attuned ears.... all in the span of 2 weeks or so. Absolute madness!!! But, its getting done. After i finish Underhang today, theres just one more to do.





   jamesprimate on February 20, 2016, 09:49:46 AM (Last Edit: February 20, 2016, 10:06:11 AM):

splash wouldnt be centered! its spatially attached to the players position in the stereo field. also individual water splash droplets have their own audio triggers, with doppler and a few step velocity, so you might be hearing that stuff flailing about as well. ALSO this was before Joar re-attached the low-pass filter, so we miss that cool underwater effect, but thats back in now.

what were doing is a *little* weird for sure. a bit of a hybrid system between platformer types where diegetic audio is heavily omni, and the fully spatial audio of 3d games, plus then were throwing in all sorts of strange programmatic stuff like the doppler, randomized pitch/etc functions. its very much like the rest of the game in that regard, lol! but in the context of moving through rooms and regions it makes sense





   JLJac on February 20, 2016, 02:10:29 PM:

Geez. The game has two regions that could be considered "final" regions, which one is more final depends a bit on your specific playthrough and how you count. They're Subterranean and Superstructure. I have spent significantly more than a month (working about 200%) on superstructure content.  Now I'm there again. James has also spent a month on it, but he says he will be passing over it at least twice again, maybe more. By now, superstructure has an insane amount of content. Not like, half the content of the game, but definitely, say... 6 times the content of a standard region. I hesitate to do the maths, but by the time we finish it we will have spent something like... 4 man-months on that region specifically. None of it has made it to the internet. The region is vast, but the sheer amount of stuff makes it a real problem to fit everything in in a way that doesn't become a complete cacophony and sensory overload from the very entrance room.

Not really sure what this post is about, probably just complaining  Wink But yeah, that region  Shocked





   jamesprimate on February 22, 2016, 01:53:53 AM:

getting through that ambiance audio. quite a collection going  Waaagh!: https://twitter.com/BRIGHTPRIMATE/status/701396605581271041





   JLJac on February 23, 2016, 01:23:01 AM:

@Dinomaniak, would love to give you something, but definitely can't at this point. Many people are involved in and affected by the release date and the release date announcement process, so not really up to me  Shrug

@Torchkas, we haven't noticed any trouble so far! The game only loads the sounds as they are actually needed, so they're not all in RAM at once. James has made a crazy amount of ambient sounds, but they're not all in the same room or even in the same region.





   jamesprimate on February 24, 2016, 05:10:31 AM:

So far so good on audio RAM stuff? Id be interested to see an audit on it though. Theres a few places (huge rooms with tons of stuff going on) where the audio hangs a bit, but joar is confident thats just loading fussiness and is easily fixable. A similar thing happened with the music loading and was fixed without much fuss, so fingers crossed.

Finally finished with ambience audio! (or at least got it to a reasonable place to move on from...) Didnt take all that long IRL, only 2 weeks, but man in subjective time that was rough stuff. Its the sort of thing thats requires constant steady concentration to fine details over like, hours and hours and thousand screens, so it is *quite* fatiguing both mentally and aurally.

No rest for the wicked though, as im diving right into finishing up the SFX. There is still a ton of SFX triggers to be placed (once Joar gets done with his current project there will be an afternoon and change devoted to that), but for now at least i can catch up on some of the more recent creatures. And by "recent" i mean "Miros bird and lantern mouse" lol.

The slog continues!





   JLJac on February 25, 2016, 07:18:00 AM:

Very hesitant to go into detail on that as it's deep spoiler territory, but I can say as much that we have a thing planned out that isn't just a linear story with start, middle, end. From our experience on the convention floor people adopt very different play styles, and we want to encourage that within the actual framework of the game.





   jamesprimate on February 26, 2016, 09:34:37 PM:

gentlemen! lets keep it positive in these threads  Gentleman





   jamesprimate on February 28, 2016, 06:56:10 AM:

UPDATE: videogame development is hard  Screamy





   jamesprimate on February 28, 2016, 09:19:34 PM:

truer words have never been spoken. hopefully we'll have sone proper updates soon, pardon our silence as we crunch for a GDC build





   JLJac on February 29, 2016, 10:39:59 AM:

Yeez, if you guys think our development is smooth sailing, let me comfort you by sharing that I had a pretty huge set back in one of the "set pieces" we're making - ie special extra cool rooms - and basically had to scrap 3 days of work  No No NO

Could salvage some of it though and I think that we're on a trajectory to an okay result! If anything, we've got persistence haha





   jamesprimate on March 01, 2016, 04:45:30 AM:

truer words have never been spoken. hopefully we'll have sone proper updates soon, pardon our silence as we crunch for a GDC build

I guess it's going to be whole map + music and sound?

yep! and quite a bit more than that too  Hand Thumbs Up Right Hand Thumbs Up Right Hand Thumbs Up Right





   jamesprimate on March 01, 2016, 05:53:17 AM:

thats the intention! the game has had so much media exposure for so long, which is awesome, but as a result there was real concern about it coming out and people just being like "yep, its still rain world, like we've seen in 345987 gifs". so we've been working super hard to subvert that and make sure the experience is fresh and surprising even for people who may have been following it closely.

does make for a boring devlog though im afraid :/





   jamesprimate on March 04, 2016, 11:36:15 PM:

I hope this isn't releasing in June. As much as I'd like it to release in June since that's my b-day month, it's the same month as No Man's Sky and Obduction and I wouldn't want Rain World to be overshadowed.

june 2036 though





   jamesprimate on March 07, 2016, 10:24:23 PM (Last Edit: March 07, 2016, 10:31:39 PM):

Ahh this is such an interesting topic to discuss! For the record I also think there's some terrible sfx / sound design stuff here and there in DkS (mostly in the form of loops that are too short, much like the texture / tile repeat issues), but the music and the way the music is implemented is fantastic. Lots of space and subtlety. And some very good uses of NO music as well!

 It'll probably take you a while to get there, but let me know when you get to Ash Lake. That left a huge impression on me. Moonlight butterfly and Gwyn too. Some of the best videogame music moments imho.





   jamesprimate on March 08, 2016, 09:14:46 AM:

thanks! at this point were probably coasting on past successes though  Cheesy

anyway, heres a recent clip i liked that illustrates the Scavenger's friend/foe system a little bit:

https://twitter.com/RainWorldGame/status/707027795449262080

this Scavenger has never encountered a Slugcat before, so is initially wary and moves to create distance. when slugcat approaches with a spear, the Scav draws its own spear anticipating a fight, but then as no action is taken by the player, it switches to a less lethal rock. when the vulture comes into view it changes things up a bit, as its considered a much more immediate threat, but you can still see the Scav targeting both the slugcat and the vulture with its spear as the moment to moment threat level changes. but then the slugcat spears the vulture behind the fleeing Scav and you can even see the moment of re-evaluation as the Scav decides "eh alright, youre cool" before they both escape underground as comrades.

a lot going on in 22 seconds!





   jamesprimate on March 11, 2016, 09:27:23 AM:

physically present at GDC! look at us here doing Professional Videogame Development™:



"Hmmm yes, these smudged papers are fascinating."

A surprising amount of work can be done when people are actually in the same room, as opposed to literally the opposite sides of the planet! So far Joar has implemented a "wiggle system" to allow some possibility of escape from non-binary player death scenarios (when caught by sticky white lizard tongues, worm grass, etc etc); a "room attractiveness" tool that allows us to specify which rooms a creature might want to be in or avoid, allowing for us to fix problem areas, shape the player experience / difficulty curve a bit more, and setup "soft" creature set-pieces; we've finally put in region gate shelters, making the entire world map Totally Actually Playable, worked on placing the music, fixed SFX issues, solidified progression details, plus a million little improvements and bug-fixes of course. Stuff is really looking good  Hand Metal Right

Also we're prepping for Joars talk on Rain World's procedural animation for the GDC animation bootcamp. Nothing you loyal devlog peeps havent seen, but should be interesting to show it to an audience who may not be familiar with the game. The rest of the talks heavily skew AAA, so we will be the weirdos for sure. Nothing new there! So if you happen to be there, def come say HI and bail us out, haha.





   jamesprimate on March 15, 2016, 01:47:16 AM:

Hahahah Christian is so quick! Yes, that dual shock 4 definitely has some significance  Who, Me?  RW plays really well on it too, I was kind of surprised tbh! Sony asked us to use it for media events and I was kind of annoyed at the timing, but turns out It's just a much nicer controller than the usual clunky xbeast ones we've been using.

Talk went really well I think! It was an interesting vibe since pretty much all the other talks were super slick devs from like blizzard, ea, Ubisoft then.... us?? But we just did our thing and showed a ton of gifs. I mean, it's worked so far right? I'll post pics when I get back to my actual computer  Hand Thumbs Up Right





   jamesprimate on March 15, 2016, 11:07:20 AM:

still super bothered that the primary credit goes to adult swim when they're only the publisher or w/e and not the ones actually making the game :/

i actually don't even know what YOUR studio is called after all this time because of it???
That's how it is when a game is published. Same with Devolver, Team17, etc

James and Joar are Videocult. You see their logo at the start here:



Honestly it's mostly because we're kind of embarrassed to have a company and avoid putting "our logo" on anything whenever we can. We're *really* not trying to make some studio brand out of all of this, just Joar and James (and Lydia and Del) makin a game. People know rain world and they know us, and that's how we like it . Thanks for having our back tho!

And yes, due to public interest I hereby pledge to release the smudged Area 51 documents to anyone who completed the game!





   jamesprimate on March 17, 2016, 12:50:36 AM:

And so it begins
Quote
Rain World was voted Best Game of the MIX at their 5th Anniversary Showcase!
http://www.mediaindieexchange.com/best-of-the-mix-from-5th-anniversary-showcase/
https://twitter.com/adultswimgames/status/710183369825452032

YES! This is super awesome! We had no idea it was even a competition! Personally I was just happy to be hanging at the super cool IGN offices with all the cool indieMIX peeps eating their cake



but thinking back, there might have been some *subtle* hints....




Its really funny though, because right before the event Joar and I were in a mood talking about how the game was fussy to play and how this or that aspect wasnt coming together smoothly as we'd like, and how many more things needed to be tweaked, etc etc. As a dev its so easy to get lost in millions of those details, so this was a very nice slap in the face!





   JLJac on March 17, 2016, 11:22:53 AM:

Puuuuuh so intense! And now I'm finally home, James and Lydia are probably still on the plane. Talk went well (judging by the fact that people went up to us and said "hey, talk was good", I was of course completely zoned out and have no recollection) and Indiemix was an amazingly nice surprise! Really the confidence boost we needed! Also got to talk to many interesting people, got to see some really cool talks about what the big players are up to, and feeling generally inspired  Smiley And jetlagged  Tired So, back at it! Thanks GDC!





   JLJac on March 17, 2016, 11:35:13 AM:

As for the "what's going to happen after Rain World" question, that's basically like asking what we plan to do in our next reincarnation haha! Right now we're 110% focused on just getting this thing done, so I really don't know, but I'll take the fact that the subject is even up as a refreshing glimpse of light at the end of the tunnel ~





   jamesprimate on March 17, 2016, 10:06:09 PM (Last Edit: March 17, 2016, 10:20:38 PM):

warning: super boring GDC slideshow ahead! free to skip

heres some bits from the GDC talk. definitely crazy to be sandwiched between slick pro presentations from Blizzard, EA, Ubisoft, etc, and we bring in our funky hacked together lo-fi aesthetic



we actually met up with all those people the night before at the twitch hq in SF, adding to the illuminati vibe of the whole thing. they provided a ridiculous amount of food just by waving their hands. like... a football team could have eaten. some panem level stuff going on



the room for the talk was huge too. this was all i could get in the frame



and Joar admiring his handiwork on the big screen.



some true fans repping old rain world stickers



no pics of us actually doing the presentation though, because they wouldnt let any of our IRL friends in (seriously) :/


then the indieMIX event at the IGN offices, which was super wild





obligatory selfie with my husband mr. dark souls



hello



important meeting with the team about our next project



then getting down to some Real Work with the boss looking on...



but now were back in various basements and properly returning to the grind! i think this trip was really good for us though, gave us some much needed perspective and the path to the end seems clear now for whatever reason. Smiley





   jamesprimate on March 19, 2016, 07:06:52 PM:

i feel like im doing that right now to be honest! ive pretty much slept the past two days since getting back  Yawn


So as you might expect, quite a few new mechanics have been added recently as we are polishing up the gameplay experience, but Joar just put in something we call the Karma Gate system and its a total revelation imo. Some aspects are still being worked out, and im sure he'll want to talk about it further when hes free, but basically its a system that requires the player to survive a certain amount of cycles in a row in order to progress through region gates.

This was implemented initially to prevent the tendency of players to throw themselves through the terrain as fast as possible trying to find the next region/shelter/etc, or to just quit when a rain cycle comes in. It slows the pace a bit and rewards a more cautious approach, which is cool. But more importantly imo is that it really brings out the "scarcity" aspect built into the bats/food sources. As you devour bat nests and fruit, they deplete, forcing you to search further and further in the region, and with the map tool you now strategize routes that will allow you to find food and also reach the region gate before the rain hits.

Plus it forces you to become really personal with the local creatures as you are stuck with them for a period of time, and that highlights the procedural creature generation so you get to really experience their individual personalities and how their opinion of you develops. From my perspective this Karma Gate mechanic totally tied all the aspects of the game together, so im *super enthused*.  Hand Shake Left Hand Shake Right





   jamesprimate on March 19, 2016, 09:31:05 PM:

The way its working is that each cycle survived increases your "karma level" (currently capped at 5), and each time you die reduces it. Each gate has a certain karma level that required to pass through from 1-5, and certain directions require more than others. The idea being that if you are an experienced player that is able to quickly hunt and stay alive through a bunch of consecutive cycles, all the gates will be passable to you and you can adopt a more aggressive pace. But if you die, it forces you to slow down, regroup and be cautious, hopefully improving your skills.

Ive been playing a LOT more since this went in, and i cant even tell you how much more fun it is, even for me who is far too intimately knowledgeable about the region layouts. All these little creature neighborhoods open up to you that previously you'd just see once passing through. In my current save, im in Heavy Industry right next to a water tank filled with snails that has 2 blue lizard living nearby. Initially the lizards would just snoop around and I'd quickly swim through to escape, but over a few cycles they seem to have learned my tricks and position themselves better, so now its a mad dash to dive and grab snails to detonate and knock them out.

But in my year+ of making and playing this region, none of that had ever happened before! You'd rush through once and that would be that. Spending more time with the fauna allows for all these emergent experiences as the procedurally generated personalities of the individual creatures interplay and your interactions with them shape their behaviour in subsequent cycles.  Im kind of blown away right now to be honest.  Hand Any Key





   JLJac on March 20, 2016, 04:29:54 AM (Last Edit: March 20, 2016, 04:38:29 AM):

Sorry about being quiet, I have one more big SECRET thing to do and I wanted to clump together the devlog silence rather than start devlogging just to stop again a bit later. The karma system is really prominent though, so let's talk about it a little bit!

The karma system is the solution to a problem we noticed when connecting the entire world. It shows that what was driving player motivation wasn't survival, but exploration - the treat you're looking for is seeing new environments and new creatures (which is natural as humans are curious). This is all good, but it incentivised a pretty destructive play style. Instead of trying to survive, you would throw yourself out into the world as far and quick as you could over and over, not caring if you survived as long as you had the chance to reach new areas. The key problem here was the not caring if you survived part - that is very contrary to the mood we wanted to create, which should be all about survival. We're making a survival platformer after all, and want to create the feeling of being an animal in an eco system - which should be all about staying alive. Also as James said, players could move very quickly through the world just blazing through the carefully crafted environments and situations. Basically, a way too high movement to survival ratio.

Another problem was that any cycle that you didn't manage to reach a new shelter felt like a complete waste. I actually had one person on a convention floor, that had after much effort managed to make it back to the starting shelter with enough food, ask me "what did I gain from that?"

We needed to skew the main incentive away from movement and towards survival, making survival the main objective and movement the secondary. The solution we came up with was gating movement with survival - if you don't survive, you don't get to see new areas. A nice side effect of this is an automatic smoothing of the difficulty curve - you're only let into the next region when you're able to handle the one you're in, making sure that you don't randomly end up on too deep waters without any way of making it back.

So yeah, each cycle you survive, +1 karma, each cycle you die, -1 karma. Clamped at 1 and 5. Exiting the game or hitting restart counts as a death and takes karma away, keeping you from cheating the system by restarting when in a dire situation - you have to actually play and survive in order to avoid karma depletion.

Region gates have karma requirements - and different requirements in each direction. This means that we can make it so that movement from an easy region to a difficult one has a higher requirement, whereas the other direction has a low or no requirement. That way we can make sure that the player doesn't enter a region they're not ready for, but if they do manage to enter one and find out that they bit off more than they can chew there's the option to opt out back into the easier region they came from and regroup.

The karma system is relative rather than static. By this I mean that collecting 2 karma in an easy region is easy, whereas collecting 2 karma in a tough region is hard. So while the range 1-5 might seem narrow (we might actually extend it depending on how testing/tuning goes) it is actually way wider than it seems, because a 4 in a hard region might represent the difficulty of a 12 or something in the first region.

It also helps build anticipation - instead of finding a gate and immediately going through it, you might find it and think "cool, I wonder what's behind there" and then have to spend a few cycles actually getting there.

One thing we said early on is that we don't want to gate progression like a classical metroidvania, which is effectually more linear than it might look from viewing the map as you have to do tasks in certain orders (get red key to go through red doors, etc). This design principle still basically stands with the karma system. If you're a very good player, you can theoretically farm your karma up to max at the beginning and then move freely through the entire world unless you die. In practice and if you're a beginner you'll die quite a bit though, slowing your progression down and funneling you a bit towards regions that are more on your level.

Addressing Teod's concerns. Yes, we're tuning the regions to be able to infinitely sustain the player on food (although it will get harder as food depletes), or to have a gate without karma requirement that allows you to get out of them. We don't want the player to be able to null their save file by moving into a region that can't support them without a way of getting out.

Yep, the karma system breaks the linear timeline of saving and reverting a bit. Normally in a game when reverting to the last save, the entire game world pretends like everything from that point in time "didn't happen", and at the end of the game you could imagine a timeline stitched together from all the successful sessions that shows the player moving through the entire thing without dying once. With the karma system however, if you die everything is reverted to your last save state except the karma, which is depleted. The karma counter sort of exists on its own timeline. As for story reasons for this, we do have some ideas but don't want to go into it at depth because it would spoil some very key narrative points. All I'll say for now is that the game narrative touches on the themes of re-birth and cyclical life, and this has to do with that.

Having the gates be tied to total cycles doesn't really create the same result. One reason is that it doesn't dynamically adapt to the player performance in the same way - everyone would be let into the same areas at the same time, regardless of how well they're doing. Some players might find themselves in too deep waters, others might get impatient with the game not letting them into areas which they would actually be able to handle, breaking the design principle of "the whole world open from the start, if you're good enough".

This stuff also plays into the planned New Game+ mechanics - the second time you play the game, you'll likely be muuuch better at it, and want to move much quicker. A system dynamically adapting to the player's skill will adapt to your pace and allow you to move where you want to without frustration from arbitrary obstacles.





   JLJac on March 20, 2016, 05:00:46 AM:

And as we're talking, another significant mechanic has been implemented - the creature attraction tool. It allows James to tell certain breeds of creatures to be attracted to or avoid certain rooms. This allows him to create little turfs for the creatures that they will generally keep to. Of course we both think that the emergent aspect of rain world is one of the coolest things about it, and we'd in no way want the creatures to be stuck in their spots waiting for the player to arrive like standard video game enemies. This is more about manipulating probabilities - how probable should it be that these creatures are in these general areas?

Basically it allows to create little mini-biomes within the regions. Garbage wastes for example consists of a large surface area sub region, and then an almost as large system of underground caves. With this system we can create distinct faunas for sub regions like this, while still allowing bleed and overlap and interaction between the two. Just that cave creatures won't be just as likely to be up on the surface and vice versa.

Another important aspect of this system is that earlier when creatures roamed the world, they'd have an equal chance to pick any room as a roaming destination, independent of the room size. Having 7 lizards in a 6-screen room is good gameplay, but having 7 lizards in a tiny little one-screen connecting corridor was horrible Cheesy With this system, the chance to pick a room as a hang out spot is dependent on room size as well, making that latter scenario much less likely.

It should be noted that the system mostly is manipulating where the creatures choose to stay, they're still generally allowed to move through any room - making them able to traverse the regions about as much as they previously were (ie a lizard might decide to go hunt 7 rooms away from its spawn position, traversing a third of a region to get there). We do have a "forbid" setting as well that prevents creatures from even passing through a room, but we're treating that as a "nuclear option" and are very restrictive with its use - mostly using it for keeping Daddy Long Legs from hogging tiny little connecting corridors and blocking player advancement completely.

In general James has been keeping a very light touch with this tool, keeping things as open and accessible as possible and only going in with slight room attractiveness alterations where it's really necessary. The changes to how the game plays have been big and for the better though - creatures feel like they have more personality if you can expect them to hang out in certain environments (salamanders like water, for example), and unfair deaths from weird random creature mixtures in tiny rooms has gone down quite a lot.





   jamesprimate on March 20, 2016, 03:20:30 PM:

Sounds amazing! Have you figured out how you will be communicating the karma system in the UI?

Joar has a pretty cool functional UI setup now, but I think it's going to be stylized / designed up a bit before we show it. Another controversial bit (that historically I have been really against) is that it also incorporates a really slick stylized rain cycle timer. All of it is integrated into the "Slugcat thinking" map screen, so despite all my protesting before, it works really well and is much needed for overall gameplay now that the rain cycle length has randomized elements.





   JLJac on March 21, 2016, 12:56:43 AM:

Hi there!

Yep, you got it. If a limb ends up too far behind the body, it extends forward looking for a new point to reach for. It's kind of a shame because this is exactly what I focused the GDC talk on, but as the videos require a $1k pass to view and I signed a paper not to spread anything, I think it'd hardly be popular if I brought it out in the open :/ I'll give you a short version right here though!



So here you see a creature (Daddy Long Legs) moving through an environment. The yellow dots hovering are "ideal grab positions" - if all positions in the room were valid grab positions this is where the tentacles would prefer to grab on. As you said, they are in front of the creature with respect to the body's general movement direction - if you're climbing you want to get your limbs in front of you, in order to pull yourself forward.

However, not every position in the room is a valid grab position, because it shouldn't be able to grab on to thin air. That's what I use this three-tier system for:



Yellow dot is still the ideal grab position. Green dot is the "temporary grab position". What happens here is that I have a method that can assign a score for each position in the room, evaluating how good of a grab position it is. If the position is thin air, the score is negative infinity or something - you never want to grab on to here. If the position is on the surface of terrain though, the score is higher the closer it is to the yellow dot.

So, each frame the leg locomotion algorithm picks a random position in the room. If the random position has a higher score than the current temp position (green) the temp position is moved to the random position. This means that the outcome in a specific frame can only be a) not moving or b) moving to a better position - making sure that over the course of several frames, the green dot will gravitate towards the best possible valid position.

And finally we have the blue dot, which is the "current grab position" - where the limb is actually headed.

So the cycle goes like this: Blue dot (current grab position) is placed on top of green dot (temp grab position) and the tentacle moves there, as the body moves along towards its goal. When the tentacle ends up too far behind the body, the tentacle releases and the blue dot is once again put on top of the green dot, which has now progressed further along. Repeat! This creates a cycle of grab, pull forward, release, grab, pull forward, release.





   JLJac on March 21, 2016, 01:03:03 AM:

@zorg, when you're in a shelter with enough food, there's two options - "continue" which will put you back in the game and "exit" which will take you to the menu. If you chose "continue" you're considered to have bet a karma point on your survival, and have to complete the cycle else you'll lose one point. If you pick "exit" however, you're opting out of the bet and get to keep your karma level where it's at when you start the game next time.

It is a little bit harsh - once you have committed to playing there are only two outcomes - win or lose (the latter including exiting or restarting) but cycles are generally pretty short (MAX 7 minutes or so, generally shorter) so in comparison to the ~40 min commitment of firing up a game of Binding of Isaac or similar roguelites it's not too bad!





   JLJac on March 21, 2016, 01:29:56 AM:

Don't worry, we gotcha! I can't get specific because spoilers, but in the late game we have a solution planned for making you less limited by karma farming.





   JLJac on March 21, 2016, 09:23:32 AM:

Yeah! Is that news?  Shocked





   JLJac on March 21, 2016, 12:21:24 PM:

Pause feature confirmed!

You'll have to ask James actually, he's the one tuning cycle times, placing shelters and food etc. On my end I've played with cycles being only a few minutes, which I've found sort of nice as it cuts the game up into little bite sized sections. I think we've always thought of exploration and observation as something that happens as you're going for food, rather than outside of it, because we want the player to always have a clear goal rather than several minutes to just linger around... All of it is up for discussion/tuning though.

Another thing is that Rain World due to its random nature will always feature unfair random deaths, even if we try to minimize it. If the cycles are relatively short (making saves more dense) there's some damage control on that frustration.





   jamesprimate on March 21, 2016, 02:43:18 PM:

currently the rain cycle is semi-randomized (on a bell curve i think?) between 600-800 seconds, so 7ish to 13ish minute range. seems to work well! the distances between the shelters / region gates / food sources etc have been laid out with this general range in mind, but we'll probably tighten it up further as we test.

another important mechanic point thats related to all this is that the new OOOO|OOO feeding system, where 4ish food items is required to survive a rain cycle, but any additional food up to 3 is held over the next cycle. what this does is make is so that if you want to explore without taking the extra time to hunt down a bat nest you have to have to fill up on food the previous round, effectively stockpiling it, which heightens the risk because you *really* dont want to die and lose that food once youve already spent a cycle prepping. its fun and stressful!





   jamesprimate on March 22, 2016, 12:38:27 AM:

naturally were going to be doing a lot of testing with all of this, so if it does become an issue adjusting it is the easiest thing in the world. but that said... we want rain to be dangerous; a constant unpredictable looming threat, forcing you to scurry from shelter to shelter. to cross a region is a dangerous adventure requiring planning, preparation, etc. thats the idea anyway! I do like Christians idea for increasingly frequent rain cycles over time though.

whats nice is that all of the pieces and various game mechanics have been designed in a very modular fashion, so balancing and tuning should generally be pretty simple and quick. *knocks on all wooden surfaces in immediate vicinity*





   jamesprimate on March 23, 2016, 03:54:32 PM:

LMAO you guys are going crazy over here. I'll file these in the bin for potential NG++ ideas Wink





   jamesprimate on March 23, 2016, 04:15:49 PM:

 Wink  Wink  Wink





   jamesprimate on March 28, 2016, 04:53:57 PM:

Im 1000% sure that my cryptic posts are nothing but frustrating, so my apologies, but WOWOW do I need someplace to gibber on excitedly:  Joars working on the most top secret of secret parts, something I've been looking forward to for literally years, and its turning out approximately 2000x better than I could have even imagined.  Tears of Joy





   jamesprimate on March 28, 2016, 06:16:00 PM (Last Edit: March 28, 2016, 06:22:47 PM):

On my end ive been implementing the music, finally. Only took 3 years! Its actually been much more difficult than anticipated. The music was written over such a long period of time and the game has changed so much over that course, the gameplay, mechanics, the look, the scope... so we had to do some killing of the darlings. Out of the 130 or so that had already been written, we selected 80ish that we felt best represented the current Rain World, and I started implementing from there.

Whats crazy is you might think that 80 tracks would make the world over-stuffed with music, and we did too. Joar even set up a super cool system so that over the course of a number of cycles the music events could change over time, expecting that we'd be layering scenes with different music moods when you return to them later in the game. And in some cases we did, for important narrative scenes, etc., that have some sort of cause/effect, but in general the size of the game is so large that 80 tracks actually feels spread thin! Certain regions totally need more music, so Im busting out the synthesizers and going back in!

We also have the framework in for a dynamic "threat level" music system (separate from the above, with is more event or location based), where a few layers of music fade in and out depending how how dire the situation is for lil slugcat, so Im going to be experimenting a bit more with that to see if it can be made into a more general audio presence without overwhelming the nice organic ambiance audio.

Fortunately I have some outside ears this time from my writing partner Lydia who has been doing some theme music for the individual creatures, and thats seriously been invaluable because i never in a million years would have thought I'd need to be writing MORE music at this point. So in roundabout answer to Gimmy's question, no sleep for me yet! Coffee Coffee Coffee





   JLJac on March 29, 2016, 06:16:52 AM:

Hi guys! Sorry about not devlogging and then busting in here asking your help haha, but I'm doing SUPER SPOILER stuff - once this is done devlogging will be back on, promise!

So, as I said I'm deep in spoiler territory, so I'll have to ask this question in the most abstract manner I can. Very technical question, as usual  Who, Me?

Imagine that you have an awful lot of objects in a 3D scene, say trees on a field, say 900 of them. You want to place them at random so it looks nice.

What I tried was an even distribution along the z-axis, so for each tree I give it a z-distance of, say, lerp(4, 400, treeNumber/totTrees).

Now because size decreases with distance according to a 1/x kind of curve, the visual end result is something like 1 or 2 trees up close, and a dense forest at the horizon. The tree that has distance 4 will get 1/4 scale, then 1/5 which is quite a bit smaller - but the difference between 1/294 and 1/295 is hardly noticeable - so it ends up looking like almost all the trees are at the same place way over by the horizon.



How do I assign z-distances so that the size decreases linearly?

I've already tried a lerp(4, 400, Pow(treeNumber/totTrees, 0.2)) kind of solution, but then I end up with a forest up in the camera and another one at the horizon, and a barren field in-between. I want an even distribution (and yeah I know I technically have an even distribution and that this is how fields of view works, but I want a visually even distribution).

(oh and yeah, I'm not adding a forest to Rain World, the question was ~cleverly obscured~)

(..or was it?)





   JLJac on March 29, 2016, 07:49:37 AM:

Ah yeah of course, I'm being silly - in my setup I used a scale for distance that is basically "the distance value is what I divide the size by" (so a logarithmic scale, maybe?)  because I thought that would be easier, haha ~ And of course I run into trouble because of it.

Thanks for the curves, will try! Can't seem to find the hard maths behind them though - are they just different bezier curves?





   JLJac on March 29, 2016, 08:07:40 AM:

I solved it! Solution: Make the problem happen backwards instead (forest of trees close to the camera, nothing in the back) and then do an average between the forwards problematic curve and the backwards problematic curve. Programming isn't always pretty  Who, Me?





   JLJac on April 03, 2016, 02:07:47 AM (Last Edit: April 03, 2016, 03:41:21 AM):

Hi! Remember me?

The big secrets are pretty much done, so let's try taking a few steps back towards devlogging again. Can't promise the super regular daily updates of times past as secret stuff will still pop up, but I think this month will be a good spot to at least break the solid silence. So here goes!

Update 523

The scavenger social memory, where they would track relationships to the player and remember them across cycles, has now been extended to the lizards.

This was in part approached as a difficulty tuning tool - by making the lizard default aggressiveness lower we can reel back the difficulty a bit (much needed) while still having the hardcore experience in there for those who seek it out. Basically it works like this:

Lizards have a unique social memory, where they can track memories of your behavior towards them. So if I throw a spear at a lizard or generally harass it, that will go into the lizard's social memory. The social memory consists of 5 parameters, "like", "fear", "temp like", "temp fear" and "know". At the moment lizards don't use the "fear" parameters (only scavengers do) so let's simplify by leaving those out for now.

So suppose you throw a spear at a lizard and miss - that's considered a negative "social event" where you are the subject and the lizard is the object of the action. All critters in the room that are aware of the subject and object and have the social event module in their AI are notified of this event and allowed to react to it. Most notably in this case the lizard itself, which is also the object of the action. In simpler terms, the lizard is allowed to understand that "the player did a bad thing to me".

This affects the social memory of that lizard. The "like" value is decreased, and the "temp like" value is increased even more (at a factor of 150% atm). So we get, say a "like" of -20% and a "temp like" of -30%. When deciding its actions, the lizard AI asks for the "temp like" parameter. The "temp like" parameter slowly moves towards the "like" parameter over the course of several seconds. In effect - the lizard will start disliking you quite a lot momentarily, but that will go away after a little while. However there is also a lasting memory which will persist for as long as that lizard is alive.

The "know" parameter is a modifier to changes in the relationship. It goes up every time the relationship changes, and the higher it is, the less effect the relationship change has (though it always has some small effect). This basically means that your first impressions are most important - if you start out by throwing 4 spears at a creature, it will be way more hesitant to befriend you at a later point, and if you're good friends with a creature it's more prone to give you the benefit of the doubt if a stray spear brushes close by it.

Not complicated enough? Don't worry!

Apart from the individual creature relationships, there is a system keeping track of your general reputation among different communities of creatures.



So in our "player throws spear at lizard" scenario, apart from affecting the social memory of that lizard there is also a small negative effect on the lizard communal opinion of you.

The reputation matrix is 2D - in the screenshot you can see the regions horizontally and the different communities vertically (there are probably more to come).

Throwing a spear at a lizard will have a pretty big effect on the lizard community in that specific region (the -5.3 in the image). But it will also "bleed", with a lower effect, into the global lizard community, and into the general community of creatures. Top left you can see the global/general reputation (yellow), which basically reflects how well perceived you are by the wildlife in Rain World in general. This one moves very slowly, but if you are a notoriously bad egg towards every living thing you come across, you'll be able to slowly wear it down, or vice versa!

Simplified, a creature encountering you will decide on its opinion of you according to the following priority:
Personal opinion
The opinion of its specific community in this specific region
The global opinion of its specific community
The regional opinion of the global community
The global general opinion

This means that if a critter has its own opinion of you, that will trump over any communal reputations. If it doesn't however (encountering you the first time) it will look to its regional community, and then go upwards towards the more general opinions.

Theoretically this should mean that you'll be able to develop specific relationships with any specific sub-group of creatures, but also your general opinion among creatures is kept track of sort of like a general good/evil parameter.

An interesting part of this is that being good to one creature basically always mean being bad to another - saving a scavenger's life by throwing a spear at a vulture, or killing a lantern mice to give to a lizard in order to make friends. How actions like those will affect the global opinion I don't quite know yet, we'll have to see!

At the moment most of the interactions you can take part in are negative - violence of different kinds. There is however the action of saving one creature from being eaten by attacking its predator, which is sort of a negative and positive. Really can't wait to see how this all plays out! Later we'll add the social interaction of gifting a creature and item or food, which will also be a positive interaction.

As positive interactions are generally also negative but there exist plenty of wholly negative actions, I have it set up so that negative reputations are slowly move back towards zero over the cycles, whereas positive reputations remain, to compensate. How this works and exactly how it will be tuned will have to be concluded through testing though.

All of this came about as a solution to a difficulty tuning problem - the game was just too tough on a new player. The idea here is that there'll be some adaptive difficulty because of this, the game being soft on the softies and hard on the tough ones. So if you're a fighter brawling your way through Rain World, Rain World will respond in kind, whereas if you're a pacifist the game will also chill accordingly.

Now to testing, testing, testing!





   JLJac on April 03, 2016, 11:14:26 PM:

Out of curiosity, if there is a lone lizard on a screen and you kill it will that still effect the global lizard opinion or would the death have to be observed by another lizard?

Currently if you kill a lizard without it having noticed you (sneaky spears from the dark) the reputation change will be significantly lower... But none of this actually makes any sense in that sense - it's not like the lizards have internet and can share reviews of you or whatever. It's more like an abstraction for how someone leaving a wake of death would over time be recognized for it, combined with a more game-y dynamic difficulty mechanic. The lizards generally don't care much if you do bad or good stuff to other lizards, they're pretty Ayn Rand like that. Scavengers however care a big lot about how they observe you acting towards other scavengers, so an interaction taking place in front of a group of witnesses will basically have a reputation impact multiplied by the number of scavs looking on.

I'm 276 pages late, but I power-read through the log, and I must say that your determination is very inspiring, and the game is awesome. You came this far by your own talent, and I really wanted to congratulate you, even this late, haha Smiley

Thank you very much Smiley

Maybe another positive interaction could be just hanging out with another creature, or having some kind of shared experience, regardless of whether you exactly helped them with anything.

This is an interesting idea for sure! Especially as the interactions I currently have in are mostly towards the negative side, a slow increase from just hanging out seems like a good counter to that.





   JLJac on April 05, 2016, 12:19:33 PM:

The game will definitely recognize it and convey it to the player - we have some narrative points tied to it planned out!

Update 524

There's a new creature (or something) coming up! Working on the "overseer".



The visuals are still WIP - more details will be added, I don't know about the color, etc etc. They're able to produce small holographic projections, and I want some of that going on around their heads to give them a bit more character rather than just being a tube with an eye.

These guys will be encountered throughout Rain World, where they zip around and... watch. Creepily! They're observing the creatures, and are extra interested in the more intelligently behaving ones. Your inter-region movement and deliberate actions will quickly attract their interest.





   JLJac on April 05, 2016, 12:34:27 PM:

Yep, a well timed spear when they pop out will take them out. They're not hostile, unless you make those well placed spears a habit. There's really no reason though - they won't cause you any harm (rather occasionally help you - but more on that later) and they're not edible.





   jamesprimate on April 06, 2016, 06:01:42 AM:

oh dont worry, there are! you'll just have to wait and find out  Cheesy





   JLJac on April 06, 2016, 09:51:11 PM:

 Cheesy Cheesy Cheesy Cheesy Cheesy





   JLJac on April 07, 2016, 08:10:54 AM:

Update 525

Overseer visuals coming along!



Originally I intended for all of them to look the same, but then I resorted to procedural design because of the reason I always do: If the game can potentially have ALL the designs I don't have to settle on a design, which is of course the most comfortable choice Smiley

I had a lot of fun with the shapes and movements of their weird holographic features - tried to make the movements somewhat resemble those of a telephoto lens to make it feel like they're "spying".

Also I made the body quite a lot smaller, because with the tentacles and holograms they were sort of veering into big creature territory, whereas it felt better for their characterization to look a bit smaller than you. They do come in slightly different sizes though, the smaller ones tending to have fewer tentacles and simpler holographic lenses to make them less cluttered.





   JLJac on April 08, 2016, 11:22:36 AM:

Think them not doing that sets them apart as being holograms!

Code/logic/think question:

These two snippets of code should yield identical results, right?

Code:
    protected bool TimeInfluencedRandomRoll(float chance, int time)
    {
        for (int i = 0; i < time; i++)
            if (UnityEngine.Random.value < chance)
                return true;
        return false;
    }

and

Code:
    protected bool TimeInfluencedRandomRoll(float chance, int time)
    {
        return Mathf.Pow(UnityEngine.Random.value, time) < chance;
    }

Say that I flip a coin 3 times, and if ANY of those times I get side A that's a positive. Then my chance to never get A should be:

50% ^ 3 = 12.5%

I can't wrap my head around it, but that latter code snippet seems to be returning way more positives than it should, and I don't know why.





   JLJac on April 08, 2016, 11:09:25 PM:


I'd say they should give different results.  In the first, each attempt can be a success but in the second, using power you lower the random value and thus the chance of success.


Nah I'm increasing the chance of success by lowering the random value, because it's a positive if the random value is lower than the chance!


BUT, using the code below while the average random value is indeed ~0.5, the power averages are very different:
average  UnityEngine.Random.value ^ 2 = ~0.33
average  UnityEngine.Random.value ^ 3 = ~0.25


Hmmmm is this true? Because if the average of Random.Value is ~0.5, the average of Random.Value * Random.Value should be ~0.25, to my mind? I might definitely be missing something, probability is so incredibly tricky! Something about how averages actually work, for example  Cheesy

Maybe I should manipulate the chance rather than the dice roll, to keep things a bit saner. I did try something along the lines of:

return Random.Value < Mathf.Pow(chance, 1f / time);

But that seemed to yield the same results as the other faulty setup. One thing that might be playing into this is that I never studied any math above the high school stuff and that's loooong ago, so I just don't have any idea about a lot of stuff.

In fact, TIL that a variable can be not idempotent in C# — that's a seriously scary WTF to me.   Shocked

Whaaaaat that's scary!  Shocked

In my experience my Unity + C# setup has been perfectly deterministic so far (if that's what idempotence means) even when using Random, as long as the random is fed the same seed. I'm even relying on it to a pretty large degree with the randomized creature generation - all the critters save is a seed, and the next time they are to be brought up on the screen they generate their features from that seed... And they've been looking consistently the same so far, at least!

As for the two functions, I should probably have clarified - I understand that they won't return the same bool, because of the one UnityEngine.Random call versus the many - but I expected them to have the same probability of returning a positive.

Currently I just have the loop solution implemented, and it seems to be working - it just annoys me because I feel like repeating over the same line of code lots and lots of times should be unnecessary when there's probably some slicker and less performance heavy solution at hand. Then again I'm not actually experiencing any lag from this. The "time" variable is usually about 40-70 and this TimeInfluencedRandomRoll method is called a few times a frame, which might be fine? For loops should only really be a problem if they have something heavy inside of them, and this loop content seems pretty slim. Still though, rather inelegant!





   JLJac on April 09, 2016, 02:11:44 AM:

Thanks for the explanation of idempotence!

Yep yep, I get that random.value returns a value 0-1  Wink So

return Random.value < 0.45f;

has a 45% chance of returning true, right?

and

return Random.value < Mathf.Pow(0.5f, 2);

is 25%, or equivalent to flipping a coin twice and getting side A both times. What I'm after thought is the chance of flipping a coin twice and getting A any time. That's what I did the Math.Pow(1f/chance) thing for, but looking at it again either of these

return Random.value > Mathf.Pow(0.5f, 2);

or

return Random.value < 1f - Mathf.Pow(0.5f, 2);

would seem more reasonable, as they do have the 75% chance we're going for...?





   jamesprimate on April 10, 2016, 04:17:54 AM:

we made it fam






   jamesprimate on April 12, 2016, 05:52:54 PM:

ACTUALLY its funny that you mention this! Joar was just implementing something along this line of thinking...





   jamesprimate on April 13, 2016, 07:16:25 AM:

correction! it was *discussed*, but not implemented yet. im sure joar will want to show gifs when it is, so pardon me being vague  Giggle





   JLJac on April 21, 2016, 06:04:51 AM:

Thank you! That actually makes a ton of sense. Will try!

Update 526

Hmmmmm....



This month so far has been weird glyphs and very very secret stuff... Mysterious!

Now we're getting ready for PAX, where you can drop by and see James if you're in boston!





   jamesprimate on April 21, 2016, 08:59:36 AM:

Same language system as throughout the rest of the game! Just extrapolated for some more specific uses  Hand Thumbs Up Right





   JLJac on April 21, 2016, 12:04:01 PM:

Male and female bathrooms?

Dammit, that was supposed to be a puzzle for the entire community to solve over several months!  Facepalm





   jamesprimate on April 25, 2016, 10:44:23 AM:

YIKES   Waaagh!





   JLJac on April 25, 2016, 12:49:28 PM:

 Shocked Shocked Shocked Shocked Shocked

Update 527

Scavenger outposts!



Scavengers have Rain Deer skulls on poles here and there throughout rain world, and they hang out underneath them. If you approach, they'll make clear that it's not OK for you to pass through the outpost. Trying to force your way through will be met with violence, and a general bad reputation impact with scavengers. If you offer some nice gifts though, they might let you through.

To make this work I had to do quite a lot of AI work with the scavengers. New is a "player is offering a gift" part of the social event engine, which currently is for scavengers only but which I hope to extend to lizards etc.

For scavengers specifically they've been outfitted with a communication AI module, which allows them to walk up to the player and do some gesture animation if they feel the need to reach out to you.





   jamesprimate on April 25, 2016, 06:05:08 PM:

those scav outposts look so amazing!!  Shocked Shocked Shocked


less exciting i know, but i just put up a new kickstarter wrap up of the past few months:
https://www.kickstarter.com/projects/rain-world/project-rain-world/posts/1532742

You guys have probably seen most of it, other than a video i quickly did showing off the audio, music and new dynamic "threat music" system:








   JLJac on April 25, 2016, 11:18:51 PM:

Can scavengers climb up and hang from/play on the skull?

They've clearly written on the skull, which makes their level of intelligence less ambiguous.
What are those pearly electric(?) lights? The elderly looking one is holding one of them like some sort of treasure. Have we seen those before?
Is that writing...or pieces of flesh and blood still clinging to the bone?

They can't climb on the skull sorry! As for the red color, that's intended to be a bit ambiguous.

As for the glyph speculation, I endorse it but will give you no hints  Wink





   jamesprimate on April 26, 2016, 05:37:00 AM:

Thanks all!

My ears are very sensitive, so - except for being a bit heavy on percussion, I believe it was fantastic. Will we have an in-game option for turning that down ?

Yes! And I agree with you that the balance is a bit off in that vid. Will fix  Hand Thumbs Up Right





   jamesprimate on April 26, 2016, 06:45:59 AM (Last Edit: April 26, 2016, 06:51:45 AM):

thank you!

yes, as the threat music ramps up it becomes more recognizably melodic / harmonic, and for some situational contexts.

its funny that you mention it, because we actually started with the concept of it being more-drone based, but for a variety of reasons that didnt quite work. then the original versions of the threat music loops were much more active melodically / harmonically, but we found that the ear wanted to follow the melody line or the harmonic progression so there was an awkward sensation when the music would fade in or out halfway into the loop. the percussion is great because it can be subtly ramped up or down without being too obvious, and is effective at building tension in a linear way. but if the player remains in a higher degree of threat, you'll hear a more fully assembled track.

this is all the layers from Suburban, which is the one that you can hear bits of in the video: https://clyp.it/udj0xjnt

you wont ever hear all of them together, as there are 10 layers here and in-game system goes up to 5 layers, but the idea is that its something thats constantly shifting for each dangerous situation you encounter. there is a hierarchy for how the different layers come it and out, etc., so hopefully it never gets too stale (one of my biggest fears!)


edit: OH! a curious note about the high lead line on that track... each of the threat music "songs" have something like this, and its kind of supposed to be as if a slugcat is singing a lonely caterwauling tune XD






   jamesprimate on April 26, 2016, 10:30:45 AM:

this is all the layers from Suburban, which is the one that you can hear bits of in the video: https://clyp.it/udj0xjnt

you wont ever hear all of them together, as there are 10 layers here and in-game system goes up to 5 layers, but the idea is that its something thats constantly shifting for each dangerous situation you encounter. there is a hierarchy for how the different layers come it and out, etc., so hopefully it never gets too stale (one of my biggest fears!)


edit: OH! a curious note about the high lead line on that track... each of the threat music "songs" have something like this, and its kind of supposed to be as if a slugcat is singing a lonely caterwauling tune XD
James,
Is this what we would expect from the arranged OST? The full 10-layer complement of the tracks?

This track sounds amazing, by the way. Fantastic work.

probably the arranged threat music tracks, plus the other 130ish other "regular" tracks as well XD i honestly have no idea how thats going to work out yet logistically. maybe ill ship it on a hard drive or something, lol

thanks for the kind words guys!! im excited to finally be able to show some of it to you all  Beer!





   JLJac on April 26, 2016, 01:22:06 PM:

Update 528

Scavengers can send out a "kill squad" to hunt you down if they really hate you, or if you've transgressed an outpost, or both. Kill squads are not to be played around with - they will track you region wide and wreck you once they find you.

Personally, playing with these kill squads hunting me really revived the fun to my experience by introducing a tension I haven't had from lizards etc in a long time now. The lizards used to be worthy opponents that I felt cunning and smart when I managed to trick, but I've gotten used to them. When reading the terrain I know where there might be a lizard and where there might not, and while they are still dangerous if I'm being reckless, I have a sort of "lizard safe" play style where I just move between safe spots and very rarely am surprised by them. Also because of their somewhat limited ability to track you across several rooms, I know that if I manage to put some 3 rooms between me and a lizard I can basically count it out.

Scavenger kill squads, not so much! As they use ranged combat, the safe spaces in any given terrain are way smaller - I can't just jump from pole to pole to avoid them. Rather, when setting myself up with the challenge of traversing a region while being hunted, I've found myself resorting to weird paranoid tactics such as moving stealthily between crawl spaces under the floor, or traverse the level up in the rafters rather than on the standard floor level, out of fear that they might suddenly pop up and throw a spear at me, approximately 1.2 seconds between my first spotting them and being dead.

If I'm fighting back, I have to employ some weird rambo style guerrilla warfare where I stay hidden as much as possible to suddenly pop up and take out an isolated target. I had a really intense moment where I saw the squad enter the room, so I hid under the floor. Lying perfectly still I could see something like 8 scavengers gather on the floor above me, still unaware of my exact position but spreading out in the room looking for me. They were going to see me sooner or later, so when to initiate the violent rush for the exit? Tense! And extremely difficult - just getting from one gate to another in a well known region takes some 5 tries for me, who have played the game quite a lot over the last few years  WTF

Technically it works by the squad "magically" knowing where I am on the world map, and gravitating to that general area. They won't see me through walls once they're in the room though, so staying hidden is still a viable tactic. Originally I had a pretty purist approach to the AI not ever having access to information about anything it shouldn't actually know, but despite all my efforts the AI will always be pretty dumb compared to a human - so cutting them some slack by letting them know which general area to look in while still having to find you in the actual room felt like a good hybrid for keeping the suspension of disbelief alive while also promoting exciting gameplay.

It should be noted that this behavior from the scavengers will only be engaged in if you're consistently really bad to them, to the degree where their entire society declare you public enemy. So it's mostly a feature for experienced players who want to get some excitement out of playing a war-like run, or really really bad people who deserve the punishment  Evil

On the brighter side, if the scavengers really like you, they can send out a "chill squad" which works basically the same, except that instead of spearing you on sight they'll hang out with you as you move through the region, and instead utilize their rocks and spears to protect you from whatever lizards and vultures might be on your tail. The chill squad is not as intense an experience, but it feels really nice to cruise around with your scavenger pack! I hope it will be a cool reward for the player that puts a lot of effort into building a good relationship to the scavengers.





   jamesprimate on April 26, 2016, 03:53:17 PM:

Joar's been in the gamedev battlefield too long, hes going commando!





   jamesprimate on April 26, 2016, 08:52:53 PM:

They definitely look a bit like Taoist Talisman...



good eyes! there might be some kind of connection...

Are stones and spears still the only means of attack? I know there are more defensive organic tools like the flare fruits and smoke pods

i think Joar has some ideas for expanding that a little bit, but it'll be mostly the stuff that you know





   JLJac on April 26, 2016, 10:40:35 PM:






   jamesprimate on April 28, 2016, 09:01:31 AM:

A very nice 15min in-depth sneak peek with Gamespot from PAX East :








   jamesprimate on April 28, 2016, 10:15:10 AM:

going to bring this past the bump because its definitely the best live gameplay video we have so far  Hand Thumbs Up Right Hand Thumbs Up Right Hand Thumbs Up Right

A very nice 15min in-depth sneak peek with Gamespot from PAX East :









   JLJac on April 28, 2016, 01:53:36 PM:

Haha yep, garbage worms are going to get the bezier curves in their polish pass!

Update 529

Working some on alternate food sources. First up, pop corn!



These "seed cobs" require a spear to open. Once you've opened one, you can eat your fill from it - it allows you to max out your food meter. However, once opened it will go stale (like the other two in the gif) for many cycles, I have the default set to 7-10, but it's tweakable on James' end.

The idea is that these are sort of a limited resource where you have to make some interesting decisions - you can get free food, and all you need, now - but then you won't have it for later. So coming across one of these you'll have to ask yourself if you REALLY need it right now.

The ideal tactic I imagine is to be using them mainly when moving between regions. It has previously been sort of a problem that you manage to collect enough "karma" to pass into a neighboring region, but once through the gate you starve because you don't know where the food is in the uncharted territory. The alternative is to get some food in your starting region and then move out - but then the time pressure can be really rough. So with these, you'll be able to scope one out but save it until you're doing your rush for another region - then you can fill up before moving out, giving you a bit of a softer start in the next region.





   JLJac on April 29, 2016, 11:05:20 AM:

Update 530

Food sources pt. 2, Water Nuts. These guys are originally hard little seeds, that can in fact be used as rocks for throwing at enemies, and are completely inedible. If you dip them in water though, they become a delicious frog egg kind of watery blob.



How much of a pain getting them to water will be, is completely up to James over in level design department. Sometimes they might grow very close to water, making it easy to just plop them in and enjoy. Other times, it might be a long haul where you have to ask yourself whether it's worth it to bring them with you, as they do occupy your paws that could otherwise be used for carrying spears or catching bats.





   jamesprimate on April 29, 2016, 09:35:55 PM:

^^ gooooood point, im def going to use that :O





   jamesprimate on April 29, 2016, 10:15:06 PM:

none! or at least very little. its a sandbox, with multiple ways through every path, so we really want people to experiment and discover things for themselves. in fact often when showing the game we see players finding solutions that we didnt even anticipate, which is amazing! handholding would spoil that i think.

that said, im working on the tutorial right now, which is few rooms of environmental puzzles forcing the player to learn basics of control and game mechanics, perhaps with a little glowing holographic helping hand  Gomez





   JLJac on April 30, 2016, 07:27:38 AM:

Update 531

Food pt. 3, jellyfish!



The jellyfish float on the surface in shoreline region, behaving perhaps a bit more like a portuguese man-o-war than an actual jellyfish.  They are a pretty straight cut food source - you just collect them and munch them down in 3 bites like most other edibles. I did want to add something to make them a little bit more exciting though, so they do have sticky tentacles. The tentacles don't stick on every collision, but swimming through them there's a small chance to get tangled. If that happens, the jellyfish acts as a buoy making it harder to dive down, which might be a slight annoyance. After being stuck for a little while the jellyfish will stun you momentarily and then let you go. It's easy to get away though - just get out of the water, or even just do a swim-jump up above the surface. Or better yet, grab the thing and gobble it down!





   jamesprimate on April 30, 2016, 10:38:44 PM:

How's multiplayer and co-op coming along? Haven't been much discussion on those in a while

ah, this is a very good question! long story short: in order to get the game out to players sometime this decade, we had to prioritize. so the initial release will be the single player mode, followed a little while later by a large update focusing on multiplayer and NG+ gameplay.





   JLJac on May 03, 2016, 07:00:07 AM:

Sorry about the quiet atm, crunching for a big Adult Swim deadline!





   jamesprimate on May 04, 2016, 02:14:59 AM:

one thing thats been interesting(?) to realize over the course of showing rain world at various conventions, interviews and events, etc., is just how much information needs to be conveyed in order to give a person an idea of "what the game is about". I usually try to gauge a person's interest first and give a series of shorter answers that work by themselves, but also can be stacked up and elaborated on if the person seems like they are willing to go deep into it.

this article isnt entirely accurate with some of the details (i was either misquoted a few times or *really* tired for whatever interview it was taken from), but is also kind of spot on in how it presents the game. details or not, the author totally gets it, and thats pretty encouraging: http://www.gamesradar.com/rain-world-wants-you-to-feel-bad-for-killing-its-hungry-enemies/





   JLJac on May 04, 2016, 07:17:57 AM:

Update 532

Adding some scavenger specific items. The scavenger lantern:



(The graphic of the actual lantern might change a bit, I'm reusing another sprite atm which I'm not 100% happy with)

The scav lanterns are very valuable in Shadow Urban, as they are strong, reliant light sources that can be carried in one hand and don't struggle/flee like the Lantern Mice.

Scavenger fire spear:



The fire spear is a spear with a fabric around the top, apparently containing some powder of some sort. These are terrifying when being used against you, but can also be a valuable resource as they're a very powerful offence. The sneaky game design trick here is that while they appear super terrifying when used against you, they don't actually make the game much harder, as you die from just a normal spear already. Contrary, scavengers attacking you with these might provide a small benefit as that gives you the chance to get your hands on one.

As you might notice, these items are basically purely better versions of already existing items. The idea with that is not to ruin the balance of the game, but to provide a reason for interacting with scavengers. Scavs are the only source of these goodies, and in order to get your hands on them you'll need to either trade with, be friends with or fight the scavengers, each with their corresponding consequences.






   jamesprimate on May 04, 2016, 01:27:52 PM:

It's looking awesome! Will it be at E3 by any chance?  Gentleman

yes indeed! not sure if i can properly announce it yet, but it will be at one of the big booths Ninja

anyway, pls come say hi!





   jamesprimate on May 04, 2016, 02:31:42 PM:

Can you make tentacles not just disappear on the last bite, but be sucked in like spaghetti?
I second this! :D

I third it Hand Thumbs Up Right
Quaruple it.  Shocked Hand Thumbs Up Right

I love you guys, haha. Never fails to amuse me when we're slaving over putting in some huge overly ambitious systems, the thread can always be counted on to keep us on track with what's really important: cute Slugcat interactions!!

Quintupled!





   JLJac on May 05, 2016, 01:14:56 PM:

Still deep in crunch. These last couple of days have been about 6 updates worth of progress, but not enough time to assemble a single one! We'll debrief you guys a bit as we come down on the other end!





   jamesprimate on May 16, 2016, 07:00:52 PM:

Just learned about another game that's planning an ecosystem with an adaptative AI

Nothing like Rain World genre/gameplay-wise, but I really enjoying seeing devs trying to advance AI in interesting ways

http://twirlbound.com/pine/

ah yeah! it needs to happen and there is absolutely no reason not to... other than that its messy and time consuming and rich with infinite feature creep potential  Cry

the description is a little jargony for my tastes though, i hope we dont come across like that haha





   jamesprimate on May 17, 2016, 09:49:49 PM:

It was really interesting to see how way back at the start, pre-kickstarter, a publicly accessible level editor was a key aspect of development, which suddenly made me very nostalgic for early Unreal engine mapping - understandably once things switched to Unity (and probably a while before then really!) and priorities shifted it became a means to an end rather than a focus. I'm sure it is the furthest thing from your minds now you are on the home stretch but I wondered in a related and roundabout way how moddable the game would be? It seems like things have become way too complicated for a super user friendly level editor - the levels and accompanying effects/AI mapping are way more intricate now so I imagine that is off the table, but I wonder what the scope will be otherwise?


ah yeah! for the level editor, its not so much the move to unity as 1. that it has to run on super outdated tech (instanced within Adobe Director), and 2. that it has become *insanely* complex and unintuitive at this point. We'd likely need an equal amount of time to develop that for public use as the game itself! Also, since the game world has become so huge and factoring in the eventual multiplayer rooms and all of that... i feel like the last thing people are going to want is *more* maps, lol. But I could be wrong!





   jamesprimate on May 19, 2016, 01:07:00 PM:

placing in magic mushroom consumables, so now its officially A Real Video Game:






GUYS THIS MONTH HAS BEEN SO WILD YOU DONT EVEN KNOW!!





   jamesprimate on May 23, 2016, 04:14:10 AM:

Well I just finished, finally. Looks like a couple weeks was a better estimate for how long it would take me Smiley

what a brave soul!  Beer!





   jamesprimate on May 23, 2016, 12:41:06 PM:

shockingly little tbh! Shocked we have some insane deadline that were trying to meet right now, but its mostly testing and bug-hunts and touch-up stuff, trying to get the experience right.

the past few weeks have been wild though! i find it hard to find a place to begin to talk about it. we've been living in an echo chamber for years (well aware!), so having it going through legit testing by normal gamer types has been seriously eye-opening. not in a bad way necessarily, just that its quite apparent that a lot of the cool systems of the game are completely opaque, and so now were trying to find ways of making it so you dont need to read 284 pages of devblog to be able to see some of them.





   jamesprimate on May 25, 2016, 10:58:26 AM:

ohhh, good suggestions! we're exploring a couple ideas around this as well, but yeah its on the list  Hand Thumbs Up Right





   jamesprimate on May 26, 2016, 07:57:58 AM:

ah yeah its a little strange. the "fall out of screen" aspect was part of the previous "one screen = one room" design paradigm from the alpha, which we moved away from significantly, and most regions have none of this issue, opting instead for pits that have bottoms, and generally offering alternate routes, etc.

however, there are 2 aerial regions that we have that are built around this "fall out of screen" death-drop mechanic, and its impossible to go back now. I think if we firmly establish it that "in this region you fall down" and add some visual indication, might be clear enough.





   jamesprimate on May 31, 2016, 09:14:17 AM:

ah great suggestions and very easy to do!





   jamesprimate on June 02, 2016, 10:18:09 PM:

Tomorrow's my b-day. A new Rain World GIF would be a nice present  Well, hello there!

Oh nice, happy birthday! Joar's was last week and mine is next week, haha. GEM CREW.

Alright, heres a Top Secret Never Before Seen gif (Only for Christian, nobody else look) : https://imgur.com/7uwVdJj





   jamesprimate on June 05, 2016, 01:01:42 PM:

hi hi hi!

So if anyone is interested, Joar and I just did a prettttttty long interview (1.5hr!) with Destructoid's Jonathan Holmes on his "Sup Holmes" Youtube show:



Pretty good chats I thought!





   jamesprimate on June 05, 2016, 03:46:17 PM:

hi hi hi!

So if anyone is interested, Joar and I just did a prettttttty long interview (1.5hr!) with Destructoid's Jonathan Holmes on his "Sup Holmes" Youtube show:



Pretty good chats I thought!

bummping!

What was that Joar's favorite game called? I didn't quite catch it, Laila or something like that?

Btw, great interview, enjoyed listening to it.

Thx!  Lyle in Cube Sector





   jamesprimate on June 06, 2016, 12:27:53 PM:

SOME news at least: Rain World will be playable (on a PS4!!!) at the SONY booth at E3.

https://twitter.com/adultswimgames/status/739875661209317376








It has been a *wild* few weeks getting to that point though, let me tell you.





   jamesprimate on June 08, 2016, 12:46:36 PM:

hey im no podcaster! my nice mics are aimed at much more interesting things than my face Cheesy





   jamesprimate on June 11, 2016, 12:07:06 AM:

Hey! hi! hello! Yeah, valid. Unfortunately... both things are true simultaneously. Content is wrapped up and we are doing final group testing with new players on controls and tutorial elements. The only thing left other than that is some polishing up of art / UI elements and assorted bug-fixes.

As for the change in date, the past few months we've been sprinting like crazy to hit a certain release window (that was *really* soon), but some 3rd party stuff came up last minute that couldnt be avoided and now we have to wait until the next window. Its not AS bad as you probably think, but we cant announce it until some other things get locked into place.

For some context, at this point there are a bunch of other moving pieces beyond just when the game is finished. Publishers and porting teams and platforms all have packed release schedules the next few months, and for a successful launch everything has to line up just right for all of them. With all the time, money and blood (so much bloooood) thats been poured into this project, we have to nail these last steps.

No question that we're disappointed though, because we absolutely killed ourselves to get things wrapped up in time (seriously, its been brutal), only to get derailed by elements that were out of our control. But honestly... this is best for the game too. In order to make the sooner timeline work out we were compromising on the quality of certain things in ways that neither of us were comfortable with. Now with this added time we can polish the polish and add that last 5%... and get that big content update ready to go for post-launch  Hand Any Key

So anyway, on to the twitter death threats!





   jamesprimate on June 11, 2016, 12:16:00 AM:

that said.... i think we're going to have some really cool stuff for you guys before that!

things have been dark on here because of us being consumed by this last sprint and E3 death march, but man you guys dont even KNOW. https://gfycat.com/QuarrelsomeLoathsomeCony





   jamesprimate on June 11, 2016, 10:52:58 PM:

thanks for being understanding, guise! seriously, im amazed that you all even still check in here considering how radio silent we've been the past few months. that will change soon though!

Can I say as an aside that Del has done such an amazing job on the art? I am so glad you guys tagged her for the ingame screens. She has such an eye for colour...

Yes, thank you! Her work has been absolutely stunning. You wont even believe :O





   jamesprimate on June 14, 2016, 11:04:45 PM (Last Edit: June 14, 2016, 11:13:30 PM):

Yeah thats no good :/ Got to get him out in front of the camera!





   jamesprimate on June 15, 2016, 08:43:58 AM:

Yep! And honestly, I'm getting much worse. Media burnout is real, friends! International plane tickets are expensive tho, so you'll probably have to suffer me a little while longer yet  Cry

Bats have some flight formation stuff to make them more *reliable* to catch when in swarm rooms (not necessarily easier), but also id say this clip wasn't really representative of their behavior.





   jamesprimate on June 18, 2016, 04:05:34 PM:

Hellooo! Okay, back from E3. Whew that was intense  Shocked

Yes, quite a few nice long gameplay vids up! That Sony underground one Christian linked was good, and we had a 30 min long twitch interview that wound up going pretty deep too. Others vids we're pretty short or catch me at various stages of exhaustion, so probably not interesting for all you Rain World experts here.

So! To answer some of the above questions, for this E3 we were in the SONY booth and wound up at the last minute having to port a build to playstation 4 in an *extremely small* amount of time. Like, completely impossible actually. But somehow, shockingly, it all worked out! I can't get into specifics about it as its NDA and contract related stuff right now, but the first time I was able to even play the show build was *literally on the show floor* at the SONY booth the first morning of E3. Basically we were like "I... hope this works", lol. Not. an. ideal. situation. believeeeeeeeee me.

For that reason it was a pretty old (but stable!) build getting ported that just happened to be laying around exactly when we needed it, so there were tons of minor things with it. For instance that build was what we were using to test the observer's behavior, so as you noticed they were a little annoying. There were actually quite a few crashing bugs in this build too, so the challenge was to do these interviews showing large chunks of the gameplay while avoiding certain creature or world interactions that would bring up error screens while being livestreamed on the front page of twitch or whatever. SUPER HARD MODE! lmao. But doing events like this (and i have done many), you find that you just have to roll with whatever comes and make the best.

Anyway! Back to the grind...






   jamesprimate on June 19, 2016, 12:17:01 PM:

Thank you! Yeah hilariously the shelter saving crashes that ps4 build, so I had to figure out how to show the game without its primary progression mechanic for 3 days Facepalm But hopefully to the outside observer it looked natural enough.

Also tbh there are some aspects to the shelter and saving mechanic that we are *kinda* keeping secret (you'll see!), so I'm not unhappy to be able to wait until it's all finished and looking nice before showing!





   jamesprimate on June 20, 2016, 02:21:23 AM:

Speaking of Overseers, I think those guys could also be used as a subtle-ish tutorial helpers. Having them closely examining items and types of food the player haven't seen or used yet would direct the player's attention to those objects as well. They can even project some holographic hints on them, for instance, project an animation of a pop-corn opening on an unopened plant of pop-corn.

 Wink Wink Wink





   jamesprimate on June 24, 2016, 05:11:09 PM:

Speaking of PS4, heres this mysterious appearance:

https://www.playstation.com/en-us/games/rain-world-ps4/





   jamesprimate on June 26, 2016, 12:17:30 AM:

aww glad you like it!



By the way, you showed the first versions of Del's painted slugcat on this page:
https://forums.tigsource.com/index.php?topic=25183.4240
that's 75 pages(!) ago.

ikr! shes been working in secret the whole time too :O we've been keeping her work under wraps, kind of as a "big reveal". the game has had so much media exposure and visibility for so long that theres definitely a concern on our part that when it comes out people will just be like "oh, theres rain world finally, it looks like rain world." Del's work is hopefully going to flip the script on that a bit, making things exciting even for people who have been following the game forever.

fingers crossed!





   jamesprimate on June 28, 2016, 08:45:59 PM (Last Edit: June 28, 2016, 08:55:16 PM):

ah, yes! this is true. the PS4 store illustration there is by Daniel Dussault. in a wild turn of events, we wound up in a situation where in order to make SONYs requirements for being at E3, we had to deliver a page on the PS4 store with certain very specific formatting, and have it done in *3 days*. Del was swamped working on in-game content, so Adult Swim swooped in and hired Daniel, who did seriously amazing work in such a short period. Maximum pro effort and massively appreciated.

im not sure of its fate though, as we'll likely want to keep Del's style at the forefront, so we'll see! but worst case scenario it makes for a very very nice placeholder!





   jamesprimate on July 08, 2016, 06:19:34 PM:

How are things going? Still crunching, or have you guys had time for a breather with the release being pushed back?

Hey Christian, thanks for checking in! We're in a sort of awkward crunch i guess? Past 2 weeks we've been waiting for some large-scale testing results to come in and biding our time with finishing up the RW version of "cutscenes and cinematics", but we just found out that the testing group that ASG was working with sort of flaked out apparently! So now we're regrouping for another set of tests next week that will be held at Adult Swim HQ in Atlanta and I'll be flying down to oversee to make sure we get some results.

This is all testing the tutorial elements and early game stuff, seeing how players who are totally unfamiliar with the game approach problems: if they are understanding the game mechanics and how to progress, etc etc. (Long story short: no, they aren't) That seems to be the biggest problem we're having. Players are impressed with the visuals and atmosphere and are having fun, but without being explicitly told what to do they just get lost, die a lot and get frustrated after a while.

It's *really* hard stuff for us to understand as developers, having played the game for 4 years and you know, designed every element or whatever, so we're hoping to iterate a few builds during this week of testing to try a few different concepts on fresh eyes. We've been stubbornly refusing to use text cues in the game, but its getting to a ridiculous point where Joar has spent weeks on versions of very cool "holographic" dynamically occurring contextually-dependant tutorial animations and players STILL aren't understanding, where a simple "press X to jump" text box would solve everything. So... its probably time we acquiesce and just put in some dang text (at least for the tutorial!)

While all this is going on Del has been finishing up cutscene illustrations, and Joar has been diligently working on wrapping up the ever-expanding list of bugs and events and polish. Right now he's expanding the interactions with Scavenger society quite a bit, as they are coming into more prominence during the mid-game. (I dont think its really spoiler stuff, so he could probably post about it. I'll ask him!)


One thing that we've sort of been aware of for a while but now is very clear: we basically made the game that we wanted to make, but now have to make several other easier to understand games within that game, because our version of the game is too loose and indecipherable. This isn't a bad thing at all really, as it means that the finished version is going to be much closer to *actually playable* and so vastly more people will be able to have fun. And none of that takes away from "our game", which is still 100% there and will exist for high skill players to discover. We've created this huge world and there's plenty of room to fill it with stuff!






   jamesprimate on July 09, 2016, 09:38:31 AM:


For Rain World, the whole narrative kicks off because you're a slugcat who's lost his family, right? Not sure how feasible it would be, but could you make that a tutorial? A "monkey see, monkey do" kind of thing? Traveling with an older/slugcat partner going through a linear area, the other slugcat performing moves and such, thus demonstrating to the player what to do?

Ideally, yes! This was my first suggestion waaaay back when we were starting the tutorial stuff, but apparently Rain World's character movement and AI are done in a manner thats completely opposite to "sockpuppeting": the movement AI is completely tied to pathfinding and a million other systems, so we can't just plop in another slugcat and ask it to act without rebuilding a bunch of super low level systems. Very annoying, but also not atypical for "Rain World problems." With our tools and engine it's easy to do weird Rain Worldy stuff, and hard to do normal basic gamey stuff.

So! As you may have surmised from earlier posts, we're using a friendly Overseer, who we call "Iggy", to fill in that role and show the player the ropes, and that aspect is working out really well.

In my experience as a player the best alternative to text is animation of the button(s) being pressed. If you combine it with animated holograms you seem to already have, you'll end up with demonstration of input needed to perform an action, which is an equvalent of "press X to jump" thing. It will also be more useful than text for combinations of keys and for actions where timing is important, such as backflips: it's harder to understand "move in one direction, then change the direction of your movement and jump" in text than in visual form. Basically show how the hologram does what it does, not just what.


Yep, totally! Iggy projects context-appropriate gamepad and button-presses if the player isnt able to quickly progress through certain level puzzles, plus offers hints, etc. I think my "press X to jump" example was misleading, as that basic stuff is going relatively well, its more teaching the player to understand the relationships between the various game mechanics: hunting food, eating food, finding shelter, the map system, the rain cycle countdown, and of course... the weird and confusing "karma system" which will probably never make sense to anyone but us.

Right now we have it so that Iggy takes the player through a cycle, shows them the controls, some slugcat moves, shows them some foods sources, shows them to a shelter, and players are totally fine completing that no problem. But without being told explicitly "you need X food to survive" and "the rain is coming, which will kill you, so you need to find a shelter" they don't really see how those puzzle pieces connect.

So! I think we'll try adding just that and try how that goes, fingers crossed. Thanks for the suggestions and links!





   jamesprimate on July 09, 2016, 11:17:49 AM:

ohhhhh, yes i love these ideas! we're planning some marketing stuff thats like that, but having it be integrated into the tutorial is super clever. there could be some big narrative implications depending on how its implemented, so i'll ponder on this, but yeah fantastic suggestion





   jamesprimate on July 31, 2016, 06:51:48 PM:

How's the testing going, by the way? Any new insights or developments?

Hallo friends! Doing pretty well, thanks for asking~

It's been intense on top of intense the past few weeks, but extremely productive. 2 weeks ago Lydia and I flew down to Adult Swim HQ in Atlanta for a solid week of testing, which was very enlightening.



The way it worked was that we had 2 sessions a day with groups of players who hadn't played the game before, and we observed how they handled the first 40 or so minutes of gameplay. They'd fill out questionnaires before hand about their experience as a gamer and then afterwards about what they liked / didnt like about the game, what was challenging, what didnt make sense, etc., and then we'd sit around and talk about it for a bit. Then at night, I would take the feedback to Joar (who was still in Sweden naturally) and we'd attempt to iterate a new build that solved some of the problems to test for the NEXT day, etc etc.

In early testing people always liked the art, mood, characters and sound, but generally found themselves frustrated by aspects or didn't understand what was going on, or often felt like the game was unfair. Even after playing the tutorial, it seemed to be an issue of the players not understanding how the various mechanics of the game fit together.

This was a little surprising and humbling for us because we have been showing the game for a long time, both among friends and with new players at conventions like PAX, E3, etc etc., (for years!) and observed people to generally pick it up pretty well. But what seemed to be the X factor at work here was that in those contexts for new players we'd always be standing right there chatting with the player beforehand, and just giving a super brief description when handing them the controller ("its a survival game where you play as this lost creature, have to catch food to survive, rain cycles, etc etc") was enough to give them the tools to piece together the various mechanics. And obviously a person playing the game blind in a test or downloading it from Steam or whatever, wouldn't have that.

And most importantly we had to realize that it wasn't that "its just not a game for everybody" (as we'd sometimes let ourselves off the hook with), it was actually that we were failing to give players the tools they needed to play the game. NOTHING is worse than watching in front of you someone who is really excited and enthusiastic about your game become frustrated and disillusioned, when 2 seconds worth of text hints or a controller diagram pop up would clarify everything.

So we had to fix all that. It was intense and stressful! I was working practically 24hrs a day for a good part of the week. But the results were nothing less than paradigm shifting and improved the new player experience (and i'd say the game in general) tremendously. Over the course of the week the tester surveys went from "looks beautiful, but is frustrating or i dont understand" to "i love this, can i play more, when does it come out, let me know if you need deeper testing", which is *extremely rewarding* Tears of Joy



And after getting back from that we've been applying all that we learned from the testing sessions and sprinting to our upcoming gold date! Joar has been heroically slaying bugs, polishing gameplay and UI stuff, adding in new features to tie everything up; Del is somehow slogging through an impossible list of illustrations, and im tidying up levels, music, audio and organizing some last bits of deeper testing this week.

Anyway, we *really really* appreciate you guys still posting and checking in, staying enthusiastic even as we have been mute codeslaves for the past months, too exhausted from the pixel mines to make posts. This will change soon though! The light at the end of the tunnel is so bright I almost feel like Im outside!!!





   jamesprimate on August 01, 2016, 12:53:57 PM:

Yeah and it's not like an "either or" sort of thing, this was just a blind spot we had that's been corrected somewhat, so one doesn't take away from the other. Don't worry, it's still the same overly complicated, obtuse and confusing old Rain World, we've just workshopped the tutorial aspects so that it might now be actually be playable by people that aren't Joar and myself, lol!

Basically, long story short: issues that we thought were inherent to the game design turned out to just be a lack of communication to the player. Fixed!  Hand Joystick





   jamesprimate on August 15, 2016, 09:02:03 AM:

aha i cant seem to see them! idk if thats an amusing ironic truism or not  Wizard


much like the olypmics, we are "sprinting" towards deadlines and counting down to "gold" over here!  Cheesy As you can tell im getting like 3hr of sleep a night.

anyway, have some gross glowing slime molds!






   jamesprimate on August 16, 2016, 01:01:16 AM:

ha! i think joar has a proper viking beard going. i find them too annoyingly itchy to suffer for too long, so i just look like ive been in a cave for 500 years and forgotten the taste of bread






   jamesprimate on August 16, 2016, 04:15:03 AM:

basically! i know it SEEMS like i have murdered Joar and completely taken over the project, i assure you thats not the case. hes just trying to keep distractions down to a bare minimum for this last "sprint" / deathmarch.

that said, it cant have been pleasant though as the past few weeks most of the communication has just been bug reports and various re-phrasings of "WE NEED THIS DONE IN 2HRS BEFORE THE NEXT TEST BUILD LAUNCHES" etc. there is going to be some PTSD





   jamesprimate on August 22, 2016, 05:25:29 PM:

ah that video is from a while back! i just realized most of our vids were set to private so ive been turning them public. this was an early version of the system just showing the functionality, and the "threat ramp up" was juiced a bit for the purposes of demonstration. its been polished quite a bit since then ofc.

yeah spot on! the "pulse" idea was the inception of this system. initially the concept was that it would *just* be the pulse, as if you were hearing the slugcats heart beating louder and the adrenaline rushing, but that got boring quickly. also at that same time we were having an issue with the world feeling a bit too quiet generally (despite having 120+ music tracks, its just so large!) so we used this to solve both problems in an appropriately rain world way

each region has tiered system of 8 to 12 layers of "threat music" that can stack up depending on how dire the situation is for little sluggie. to avoid becoming repetitive, each tier of audio pulls from a pool of possible tracks, with many many possible combinations. the pool for the early layers (first to come in) is generally pretty simple and subtle: a pulse beat or white noise elements but as the layers stack up it becomes more recognizably "music", with the final layers being a melody or lead line.

at this point it works pretty well! there are certain situations where the threat level ramps up too quickly for my taste, such as when vultures drop down from above, and there are some track layer combinations that work better than others ofc, so i might give it a bit more polish soon.





   jamesprimate on August 29, 2016, 09:09:49 PM:

HEY FRIENDS! Busy week coming up for the slugcat crew. We're going to be showing the game at 3 difference events. I have like 2 seconds to devote to this post, but gotta make some sort of announcement Shrug


PAX West, Seattle Sept 2-5: As usual! You can find me and the freshest build of Rain World at the Adult Swim Games room, and other playable versions will be at the Sanshee Games corner and the SONY indie games booth. Maybe I'll be 3 places at once, who knows. http://west.paxsite.com/

XOXO Fest, Portland Sept 8-11: Lydia and I will be showing Rain World at the XOXO Arcade on a huge projector screen, should be pretty sweet. I'm kind of stoked to see XOXO Fest, I've heard really good things. https://xoxofest.com/

Busan Indie Connect, Busan South Korea Sept 9-11: Joar is going to be showing Rain World at Busan Indie connect and I'm *maximum jealous*, it looks super super cool. http://eng.bicfest.org/


But anyway, if you are at any of these def come say hi! I'll tell you 1000 secrets that I can't post here  Hand Fork Left Hand Knife Right





   jamesprimate on September 03, 2016, 11:36:03 AM:

ah that video is from a while back! i just realized most of our vids were set to private so ive been turning them public. this was an early version of the system just showing the functionality, and the "threat ramp up" was juiced a bit for the purposes of demonstration. its been polished quite a bit since then ofc.

yeah spot on! the "pulse" idea was the inception of this system. initially the concept was that it would *just* be the pulse, as if you were hearing the slugcats heart beating louder and the adrenaline rushing, but that got boring quickly. also at that same time we were having an issue with the world feeling a bit too quiet generally (despite having 120+ music tracks, its just so large!) so we used this to solve both problems in an appropriately rain world way

each region has tiered system of 8 to 12 layers of "threat music" that can stack up depending on how dire the situation is for little sluggie. to avoid becoming repetitive, each tier of audio pulls from a pool of possible tracks, with many many possible combinations. the pool for the early layers (first to come in) is generally pretty simple and subtle: a pulse beat or white noise elements but as the layers stack up it becomes more recognizably "music", with the final layers being a melody or lead line.

at this point it works pretty well! there are certain situations where the threat level ramps up too quickly for my taste, such as when vultures drop down from above, and there are some track layer combinations that work better than others ofc, so i might give it a bit more polish soon.

Related: I pre-purchased the Rain World alpha in January, alongside which was generously included a collection of your tentative candidates for the proposed in-game soundtrack: however, as a borderline-obsessive appreciator and sometime curator of 'seminal' videogame scores both for posterity and home-listening—think Streets of Rage, Command & Conquer, Syndicate Wars, Sub Terrania, Abe's Oddysee, et c.—was slightly disappointed to find that the latter is only provided in (it must be said, increasingly obsolescent) lo-fi mp3 format.

While I do of course recognise that given the sheer number of subsequent iterations and, by extension, revisions to the game's sound-design it arguably wouldn't have made sense to accord these 'preliminary' works the same, lavish treatment as befits a full commercial release; can you at least confirm that the final, definitive soundtrack will be made available in glorious Bandcamp-worthy FLAC—and, if so, perhaps mastered a tad more sympathetically than this abomination? (Obviously I'm not expecting full chamber-music dynamics, but perhaps something in the vein of Disasterpeace's exquisitely rendered official score to Hyper Light Drifter, because believe it or not, from what I've heard thus far your music really does warrant the extra attention.)

Thanks in advance, and keep up your truly world-class endeavour in all departments!

Cheers,

- Ryan

Most certainly! The soundtrack at this point is absurdly long, like 3.5hr+, a good deal of which is music that is setup in layers for dynamic audio, or other game context dependent format. So after everything is settled with development  i really want to take some time and get everything cleaned up, organized or arranged into proper listenable tracks (so it sounds like a song rather than 12 layers of loops that interact etc), and see how it can be grouped into a few albums worth of music.

We've had a few companies come to us with concepts for doing nice vinyl editions and I'd really like to pursue that as well, though 3.5 hours of vinyl is a LOT of vinyl, so might break it down into a few different self contained volumes or something. But yes I'm going to go all out with the music, its going to be fun!





   jamesprimate on September 07, 2016, 11:44:22 AM:

Are the tracks still "junk audio" transformed to music?


yes, mostly! most of the audio is in fact, including sound effects and all of that





   jamesprimate on September 11, 2016, 09:30:52 AM (Last Edit: September 11, 2016, 09:41:58 AM):

Yeah it's definitely not intentional, believe me  Waaagh!

Basically we're in the process of porting the code to PS4 and that's a tedious time consuming thing, plus scheduling a simultaneous release on steam and PSN with our publisher adult swim... there's only certain windows of time when everything works out for all the pieces that are in motion. We had one if we would have had all the code wrapped a few months ago, but we weren't happy with where things were at, so had to wait for the next one.

Even now, we *pretty much* have the code wrapped, but we're still polishing art and fixing bugs, so... yeah it's definitely going to be a much better, tighter game as a result of the extra time. It's not like it's just sitting around.

Thanks for patience!





   jamesprimate on September 12, 2016, 06:51:43 AM:

Things have been *extremely* busy for us the past few months. In addition to continuing to wrap up the dev work, right now Joar is moving to Seoul, South Korea (after spending a week showing RW at Busan Indie Connect, where it was nominated for excellence in Art, Sound and the Grand Prixe prize!) while I've been showing the game at PAX West in Seattle (where it was shown at 3 locations: Adult Swim, Sony and Sanshee) and then the XOXO Fest Arcade in Portland for the past 2 weeks.

I think something that's lost on these boards and even in documentaries like indie game the movie etc is just how many roles you have to take up as an indie developer. There may have been a time when someone could code a game in their basement and release it on steam the next day and that would do well, but it is definitely not the case now. Pretty much every indie budget game that I've seen succeed the past few years has been accompanied by tireless promotional work. I was talking about this with Joar yesterday, how there's basically this unspoken under-culture of devs as "marketing nomads" going from convention to convention perpetually, in different states and countries,  exposing a game to new audiences, making journalists aware of it, building support from various communities, etc etc. It's like running a political campaign or something! But if you've spent years of your life and all of your savings account developing a game, you can't take the risk of just throwing it out there and hoping for the best.

Outside of the traveling circus of the industry I don't think anyone is really aware of it. Like, the average person might go to a convention and see a dev there with their game and assume "oh cool, they are at this convention", but the truth is that they are at EVERY convention, and they probably have been for months or years, writing code in the hotel room, sending emails on shitty Starbucks wifi. This goes for the most polished indie darling to the roughest unity asset flip. Kind of fascinating, really. Even devs that are considered to be "reclusive" by the online gaming  community I see regularly at these events, working hard. Phil Fish was at XOXO, Tarn Adams was at BIC, etc etc

And as an indie you are doing this with a very small team of course, so long story short sometimes we're not reading too deeply into the TIGS comments, or will forego responding to questions that are answered elsewhere in the thread  Gentleman




As for the alpha that's on humble, the link is legit but it is **OLD** and not in any way representative of the current game, so I personally would only recommend it to people who might be interested in following the development process in some depth. It might be interesting for people like Christian and Chris Early who have played the Lingo alpha years ago, then this early C# build and then get to see how the mechanics evolve into the final game, but likely not to the average player.

And lastly: shoutout to the TIGS fam for holding down the threads while we've been away, answering questions, etc. Y'all are the best  Hand Metal Right







   jamesprimate on September 15, 2016, 12:28:06 AM:

oh hey wow, i take a plane and this thread blows up again! since im getting flak for NOT doing this, i guess ill try to answer some questions now that im home...

Also, will the final game feature Co-op multiplayer? (because I remember reading somewhere that they were testing local multiplayer)

that is the plan! though there are some gameplay problems to solve with that, so were going to wait until we can focus on it before making any big announcements. actually, basic functional co-op multiplayer is already in the alpha (i think? its been a while), just go into setup.txt and change 'player 2 active: 0' to 'player 2 active: 1'



Cool, I'll try it ! would you happen to have a link to the 10$ tier purchase as well ?

there is none. we really didnt want to extend the kickstarter or anything like that, and would prefer people to see the game when its complete, but had so many requests for the alpha that we put up the $25 one as a "if you REALLY want it" sort of thing. you'll notice that we dont advertise it at all and poor christian has to be the one to post it when people ask. sorry! its just how we feel on the matter



Quote
VARIOUS DIATRIBES ABOUT HYPE AND OUR COMPLICIT / NON-COMPLICITNESS IN SAID HYPE

Debatable! In our minds Rainworld has been pretty overhyped and media saturated, so we have been consciously making an effort to downplay things the past months until we do the official release date / trailer and all of that (hence the lack of new footage, etc etc.) We dont want the game to come out and people to be like "ah yes, its rainworld, which looks like it has for the past 5 years". 

But that said we are still obligated to show the game and be present for conventions and events, which carries its own natural hype. Similarly, if a journalist gets in touch and wants to do a thing of course we're not going to tell them "no", that would be idiotic. But we also havent been actively seeking it out, if that makes sense. Though soon enough we will be! And we have 8 months of flashy progress to show, so im pretty excited for that.



*If I buy the alpha I will get the final version of the game when it comes out?*

yes! though probably only on Steam. Sony has its own rules for that stuff, and we are like bugs to them.

Quote
also, final price?

not sure yet, actually!



Quote
"DELAY" STUFF

People are weird about this. Knowing how variable, tedious and time-consuming all this stuff is (as well as awareness of the various bureaucracies involved), we *very consciously* never announced any official release date and we only will when everything is locked in and we are 100% confident with being able to hit that date. But hopefully soon!!!!



ok thats as far back as the quote machine goes, so let me know if i missed anything! im going to try to get joar to post too, i know you all miss him.

and hey i really appreciate you guys and gals all sticking up for us on the threads, and just in general. i honestly think of you all as friends and hope we can share a drink or whatever some day. i wont lie: development is lonely and super alienating. for years we've spent locked away in basements working insane hours, separated from the real world, living this weird life of half utter isolation / half 100,000 person conventions and media appearances. its impossible to discuss IRL, friends cant relate, its too weird. for me, twitter and TIGS have been my outlets. not just common interests, but people who are going through the same stuff. so anyway, cheers to you all  Toast Right





   jamesprimate on September 21, 2016, 05:41:52 AM:

a little taste of Del's incredible illustration work






   jamesprimate on September 21, 2016, 12:56:29 PM:

a little taste of Del's incredible illustration work
The lighting and colors are amazing, but... 492x404. Don't you have a larger version? This would look so sweet as a desktop wallpaper.




Once the game comes out I we can get a full album or something so I can set a rotation for my wallpaper with all Rain World art   Kiss


Def! This is a little corner of a much bigger, and spoilery, pic. So we're going to wait until the trailer is out at least to release. Del wants to do a whole bunch of proper wallpapers and extended illustrations too, which might fill in some story points and backgrounds of other characters. Looking forward to it!





   jamesprimate on October 11, 2016, 06:30:23 PM:

thanks all!!

Tiniest of updates:

The past weeks/months/lifetimes have been spent testing and improving the PS4 build with our porting team, Carbon Games. Things are looking REAL NICE Well, hello there!

Its pretty crazy though: Joar is in Seoul right now, Carbon is in London, and Adult Swim is in Atlanta. Im in Boston organizing everything, and never sleeping because as soon as one crew calls it a day another timezone day begins! But everything is moving along quite nicely.

For international peeps, its official that we'll be releasing in a few languages: English, French, Italian, German, Spanish and Portuguese; which im very very excited about. I never expected things to get this big.

We plan on doing Asian languages eventually, but localization is going to take quite a bit for that and we'll have to redo our text system to accommodate, so it'll be down the line a bit.



Another cool thing now that content production is wrapped up is that I can start focusing on PR/media stuff.

For some that sounds like dirty words I know, but what I mean by it is putting together cool media to tease on the lead up to release. Were planning on a bunch of trailers showcasing different regions, gif campaigns that follow little narratives, "music videos" showcasing some of our favorite tunes in context, wallpapers and teaser art from Del. Super super psyched to get into all of that! (Especially since the last few months have been a tedious bug-testing hellscape, haha!)

But anyway, if anybody has things they'd like to see or suggestions for that let me know and I'll take it into consideration!  Toast Right






   JLJac on October 13, 2016, 06:51:57 PM:

Icelandic Death Cat will be my band name once I'm done with this dang thing.





   jamesprimate on October 13, 2016, 11:01:54 PM:

Icelandic Death Cat will be my band name once I'm done with this dang thing.

THE PRODIGAL SON HAS RETURNED TO US





   jamesprimate on October 14, 2016, 01:38:40 AM:

yessssssss thats the plan! should be soon too. i just dont have a minute to devote to it until we get the PS4 stuff wrapped.

the game is Quite Large, and the only way for me to do a proper test is to "speed run" the game and take notes on performance issues, shader problems, wonkiness. I say "speed run" it in quotes because the fastest I, the person who made every room and region and know all the secrets and shortcuts, have been able to play to the win condition (skipping 3 regions!) is 8hrs. And that is ignoring all the narrative stuff and endgame content ofc.

ASG has people testing as well, but since a lot of this stuff is making sure that some shader effect in room 1367 is the right color and transparency, or this audio layer lines up with 4 others in the right way, its basically only me that can do it. So I run the game over and over every day as they update the builds, taking screenshots and video of the problems and sending it to them to tweak. this is my punishment for ambition!

but yeah as soon as this nightmare is over its time to update the fans and let them know the good news: rain world is coming...





   jamesprimate on October 14, 2016, 01:48:16 AM:

thank you friends, i'll need it!

since were here I'll post what Joar is working on right now, which is an options menu for the PS4 build: https://gfycat.com/SentimentalGoodnaturedIndianrockpython

how exciting!





   JLJac on October 14, 2016, 03:06:19 AM:

The UI and graphic design is generally pretty terrible hahaha! I hope to be able to go back to it and fix it up a little bit at some point for sure. The game only has like, 3 menu screens though, and in the standard case your only interaction with it will be hitting "continue" in the main menu, so it's a super minor part of the game. The button is big because it's a safety button - you can't click it but need to hold it and a white semi-circle will fill in gradually.





   jamesprimate on October 17, 2016, 11:18:37 AM:

^ this is a good point that brings up something that we haven't really talked about much recently.

the initial concept of the game, which we still believe in to a certain extent, is that it would be something to inhabit rather than "win" per se. the size of the world, complexity of the ecosystem, even the backstory and secrets, are all geared to hopefully make the ingame experience feel unending, self-consistent and "believable", where theres layers behind layers and you always feel like you could take another turn and discover a whole new world. so hopefully that sense of exploration and discovery is rewarding whether a player sinks in 2 hrs or 20 hrs.

Ideally what we want is some imaginary midpoint between the intention / art of a hand-crafted experience and the scope of a procedurally generated world. ambitious for sure. foolhardy and likely a terribly inefficient use of development time. but for whatever reason, we were compelled to do it!





   JLJac on October 21, 2016, 08:00:43 PM:

Discussion about length of the game actually makes me wonder...

With permanent positive relationship modifier, is it possible that some earlier species will become non-factor in late game due to mechanical reasons, as aggressive instincts of the individual will be overridden by positive global "reputation" stockpiled throughout?

The game technically supports this for some species, but for some of them it's very difficult to actually make it happen as the default interactions are mostly negative, as in the case of lizards. It would be interesting to see if someone could become a lizard master though - it would definitely take a lot of dedication, but the potential to make it happen should be in there!





   jamesprimate on October 22, 2016, 08:02:08 PM:


Asking for a 3rd time : any videos from PAX West ? hungry for new RW content Smiley

Nope! We we're pretty under the radar for west. Trying to avoid showing stuff we'll be hyping soon, etc etc





   jamesprimate on October 25, 2016, 04:24:22 PM:

thanks new friends!

Will the humble bundle alpha be updated ever?
Also, will you be able to play as the lizard in the full game?

The game is finishing up development right now, so we are farrrr past the Alpha im afraid! Soon you be able to play the REAL game though  Hand Joystick

Nope, just little slugcat! We do get that question asked a surprising amount of times though, haha.

I also have a question/clarification to ask Smiley - how will the zone progress take place ?
Will you rest in one zone while the rain takes place, then wake up in the same shelter and suddenly be in another zone ? or... do the shelters travel ( like a lift ) ?  or do you simply traverse from one zone to another ?



Region progress is just like moving through any of the regular game rooms, except you pass through a gate that separates the regions. like so:
















gotta get clean





   jamesprimate on October 29, 2016, 02:02:10 AM:

we will be actually! with 20ish estimated hours of playtime, theres plenty we can show without spoiling. we've been holding back on the gifs and new content for like 6 months for just this purpose Hand Thumbs Up Right Hand Thumbs Up Right





   jamesprimate on October 30, 2016, 09:23:15 PM:

hi new friends!

...I was watching this youtube video the other day about a species of lizard that has three natural color variations. Each competes with the other for territory and mates in different ways. Blues team up to defend mates and territory, yellows sneak around and oranges use brute force and size.

I can't help, but wonder if you guys were inspired by this, or if you even knew it existed? Regardless, it's kinda cool that RainWorld either on purpose or accidentally simulated nature IRL!

(Here is a link to an article about them: http://www.smithsonianmag.com/science-nature/the-lizards-that-live-rock-paper-scissors-118219795/?no-ist )

This is a really good question, actually. Any inspiration from this or is it coincidence?

Either way it's super cool!

ohhhh this is a good question! Ill ask joar





   jamesprimate on October 31, 2016, 02:51:57 AM:

in the meantime, some halloween goofs:










   jamesprimate on November 09, 2016, 09:51:59 PM (Last Edit: November 10, 2016, 02:40:35 AM):

im utterly catatonic and trying hard not to sink into deep despair, but Joar has been working on graffiti for our silly little slug game:










working on recapturing some of that old rain world vibe while we wait for the translation / localization finishes up





   jamesprimate on November 10, 2016, 11:15:41 PM:

Yeah, it was a big part of the early alpha aesthetic of the game for Joar. Since its super time-consuming to do and purely cosmetic we had kind of abandoned hope of making it a part of the slick new Rain World, so didnt talk about it much other than attempts to squeeze some tests in occasionally when there was a second of down-time. But now we have a few weeks that we cant touch the code while the PS4 porting then testing finishes up and the games off being localized, so Joar has been able to dive into tagging up all my lovely austere surfaces  Cheesy

It's looking awesome though and really adds back an important flavor to the world. Im glad its worked out this way!





   jamesprimate on November 11, 2016, 03:54:48 PM:

All Joar's art! He finally gets to take a break from the programming slave pits and do the thing this he's wanted to do the whole time! Funny that this just randomly happened because of a delay, because looking at it now it feels pretty essential to the aesthetic.





   jamesprimate on November 17, 2016, 01:20:27 PM:

show off some new Del art sneak peeks:



https://twitter.com/miimows/status/799352004204261376





   jamesprimate on November 23, 2016, 11:44:10 PM:

oh verrrry sweet! is it 3d?





   jamesprimate on November 27, 2016, 11:22:13 AM:

thanks friend! seriously, its been quite a month. hope you all are holding up as well.

totally boring update: right now were finishing up the PS4 port and sheesh its tedious. the code is super old and undocumented, so the port team (who apparently have infinite patience) will change one thing to optimize this or that, and it'll accidentally break or change something else. so im basically just running new builds of the game constantly and checking every room and event over and over to make sure nothing new has broken. but other than taking a long time its going pretty well. they have been able to get some really impressive frame rates in spots that previously would grind, and we've been able to apply a good deal of their technical knowledge to the PC version as well, so its basically made everything better.

Joar just moved back to Sweden from Seoul, so I'd expect him to be checking in here more regularly. Del is rushing rushing rushing to get through a seemingly unending list of illustration work from us. we've gotten so much feedback thats basically "the illustrations are amazing, there should be more of them", so were trying to get as much in as possibly before this last deadline. With the holidays and post election depression its been a struggle though.

anyway, the grind continues! we'll be showing rain world at the playstation experience (PSX) in a week, and should have a shiny new RW trailer for that, as well as some other fun stuff. cheers friends, hope you are all well!  Toast Right





   jamesprimate on November 29, 2016, 09:47:05 AM:

Oh hey its Del's official Rain World PSX trading card featured w/ Persona 5 & Last Guardian, no big deal  My Word!






   jamesprimate on November 30, 2016, 12:01:48 PM:

thanks jprosk! means a lot.

no news on a pre-order yet! sony has a pretty tight pre-order policy that requires us to have passed through their extensive certification first, which were in the process of doing now (though it takes a little while, especially since we're doing it in multiple languages).

actually is the same with their policy for release dates too, which is why we havent been able to say anything for so long. but supposedly once we clear through those teeedious hurdles everything should lock in place pretty quickly.
























i hope  Screamy







   jamesprimate on December 03, 2016, 03:53:14 PM (Last Edit: December 03, 2016, 04:00:59 PM):

Thanks dudes! This isn't THE trailer, just something we whipped up last minute for PSX. But I've been wanting to redo the alpha since forever so this was a fun opportunity!  Hand Joystick





   jamesprimate on December 06, 2016, 08:56:23 AM:

Thanks for the kind works friends!

New Kickstarter update posted (it's been a while, whew):
https://www.kickstarter.com/projects/rain-world/project-rain-world/posts/1757198

Not too much that you rain world insiders wouldn't know, but if you haven't seen the Rain World PSX 2016 Limited Edition Foil Trading Card in real life, it's worth the click imho!





   jamesprimate on December 17, 2016, 01:51:40 PM:

Oh hey that's amazing to hear! Yeah we have co-op built in but it's going to come later as an update, as we need time to work out some specifics with the implementation. Same for the head-to-head multiplayer.

Finbonne: I'd love to ask you some questions, as we've had like zero player feedback on the co-op. You're managing to have fun even with the camera only tracking player 1? And how do you handle the room switches? Just wait for the other player to show up before moving on? Literally any info about what you like / don't like about it will be super helpful.

We could implement it super quickly as it currently  is, having it as a looser "sonic and tales" style co-op where the other player can drift off screen and then warp them in to nearby room exits if they get too far, or perhaps require both players to be in an exit to move rooms. We have also talked about attempting a proper dynamic split screen, when the screens split and recombine, allowing a more serious co-op play-style, but it creates a ton of other problems to solve and might wind up way too CPU intensive with all the shaders that would have to be duplicated onscreen. Plus it doesn't REALLY work with how the significant game events happen, so idk that might be out at this point. Either way it'll take some fiddling!






   jamesprimate on December 17, 2016, 09:22:11 PM:

thank you, thats good stuff!

and obviously please note that the 2nd player controls in the alpha are totally borked because we had no idea anyone would ever know about it being there, lol. Clearly having 2nd player gamepad support, a system for room movement and, you know, 'not slowing down time by randomly pressing the down key' would be essential elements to the finished product.





   jamesprimate on December 19, 2016, 08:51:39 AM:

Awesome! Yes definitely. We're going to start thinking about this stuff pretty soon, so very happy to hear all this   Hand Joystick





   jamesprimate on December 23, 2016, 03:21:00 AM:

This is all really heartening, because were we expecting to have to do all manner of overhauling for the co-op and it seems like people would be satisfied with the functionality that is already more or less in place. AKA it might not take an additional 5 years to implement  Tears of Joy

Anyways, more on that in 2017. See y'all next year, friends! We wish you a very merry slugcat.






   jamesprimate on January 16, 2017, 07:08:58 AM:

Hey friends! We'll be hanging out in the Playstation Blog comments section all day, so leave us a Q!



http://blog.us.playstation.com/2017/01/16/rain-world-surviving-in-a-living-ecosystem/





   jamesprimate on January 23, 2017, 08:03:51 AM:

Thanks Christian!!

So Japan games twitter discovered RW last week and it got pretty wild: https://twitter.com/coder_Rfor8BIT/status/821573477652008960





   jamesprimate on January 24, 2017, 04:21:12 AM:

"Slagcat" apparently  Cheesy



for real though they can call it whatever they want for 30k retweets and 40k likes





   jamesprimate on January 24, 2017, 03:09:04 PM:

A LOT apparently. For the initial release we have the game in English, French, Italian, German, Spanish and Portuguese, but doing a Japanese localization would be an additional *6 months*  Screamy

From what I understand this is not just the time for translation and the minor adjustments to the way the game sets text for asian fonts, but also because Sony certification in Japan is massively more scrutinizing and arduous process than it is for western release.

So we're holding off on it for now :/ I think the idea is to wait until we have all the planned post-release content updates in before doing a proper Asian language localized version.





   jamesprimate on February 01, 2017, 11:48:33 AM:

Are you ready, Slugcat?






   jamesprimate on February 08, 2017, 06:25:15 AM:

HYPE! Im so stoked about this illustration. Most platforms require a "Hero Banner" for the store pages and all that, so thats what this is. Has to be able to arrange itself into all manner of ridiculous formats and sizes.

Quote
So, kinda random question: will there be a difficulty setting?

I don't think this has ever been mentioned, but I think that it would be a good idea, (maybe as an update down the line).

Yeah we agree. From what I hear its pretttty hard right now. (After playing it for 5 years I have no perspective of course.)

The concept of the game is just unfair sometimes (and thats the point!), but its been a real challenge to hit that balance where it maintains the mood and intended mechanics but also is generally playable. We've spent a lot of time tweaking it in its current state, but it's something that we want to address in future updates in a more clever manner. Some things we definitely want gated behind the high difficulty level, and we dont want an "easy mode" per se where you can just uncover all the map and thats that. But Im considering adding some alternate narrative paths in the current world that would satisfy players of lower skill levels, but also maintains some mystery of what else is out there.

Quote
I remember that James once said that they were trying to put in place a system in which the difficulty ramps up if the player has a fast progression, I don't know if it is the global reputation system, but it sounds a little different from it.

That remains to a certain degree, but in testing it was found to be pretty frustrating as the difficulty seemed fairly random from the players perspective. Also it basically broke the whole mechanic of being able to develop relationships with creatures, since you could be playing in a non-aggressive manner but suddenly creatures would be more aggressive just because you made it through a few rooms. Basically it was a good idea in theory, but less in practice, so we opted for just tuning the overall difficulty "better", whatever that means.



On the topic of difficulty, one thing thats really become apparent (and interesting!) in testing the game is that some people seem to naturally just be really good at Rain World, and its often people who you wouldnt necessarily expect given the supposed difficulty. I've seen 12 year old girls who "just wanted to play the slugcat game" get like 10x farther than seasoned gaming bros on their first try. I think it's because the game rewards observation and caution? So if a player goes in guns blazing expecting normal platformer behavior they're going to get destroyed, but if they play like a prey animal, hiding, observing the surroundings and learning about the behaviours of the creatures before making big moves, they will do well. And this might actually benefit players who dont have years of videogame genre conventions under their belt.

I dont know how well that will go over, but Im pretty proud of this actually!





   JLJac on February 08, 2017, 11:56:03 AM:

The difficulty being too low definitely isn't a problem, I'd say. I've played Rain World for years, and I still really struggle with certain passages - it's by no means a walk in the park. And I know the code and every little trick. We have been thinking about some kind of setting or similar going the other direction though, to enable less fanatic players to have some feeling of closure without necessarily see all of the cool stuff that's there for those willing to dive deeper. It won't be for this release though ~





   jamesprimate on February 08, 2017, 06:25:38 PM:

a wild Joar Jakobsson appears! :O





   jamesprimate on February 21, 2017, 12:56:45 PM:

some self-serving publicity here... you guys know this story!


http://www.theverge.com/2017/2/21/14685358/rain-world-game-junk-audio-soundtrack





   jamesprimate on February 25, 2017, 12:51:40 PM:

eh, yeah, honestly the alpha humble thing isnt something we really wanted to be doing, as we'd much prefer that people experience the game as intended. you'll notice we dont advertise it or link to it or anything, but its there for people who really want to find it. otherwise we'd have people still sharing the old 2012 lingo alpha, which is infinitely worse, lol!

and fwiw the reasoning for the closed beta was similar actually. we really want people going into the game fresh, especially the fans! going in with knowledge of some of the spoilers changes the players whole perspective of the game (imo), so having a QA/beta team thats under heavy NDA and lock-n-key is very nice. this may seem weird in 2017 indie game world, but was important for us!





   jamesprimate on March 02, 2017, 03:20:43 PM:

if anyone is interested, Joar and I did a nice longform audio interview with Erika from big cheshire grin:

https://bigcheshiregrin.com/2017/03/02/clear-skies-ahead-an-interview-about-the-journey-to-rain-world/

she really knows her rain world stuff, so it was fun to talk to chat with someone on that level! i think there is video of it too somewhere, but seriously nobody needs to look at our dumb faces for an hour, lol





   jamesprimate on March 04, 2017, 06:58:21 AM:

aw tahts very nice of you. id think yall would be sick of us by now!





   jamesprimate on March 06, 2017, 03:54:40 PM:

by the way! if anyone here does the reddit, i think were going to try to organize community stuff over here:

https://www.reddit.com/r/rainworld/

rather than have new players sift through 300+ pages of old devlog, etc etc. So join us if you would like!





   jamesprimate on March 08, 2017, 08:16:58 AM:

WHAT FATE A SLUGCAT?





Its official! After many long years in development, we are excited and terrified to announce that Rain World will be releasing worldwide on March 28th for Steam and PlayStation 4!  Waaagh!





   jamesprimate on March 09, 2017, 03:16:26 AM:

Thank you friends!! Honestly, we couldn't have done it without you.   Gentleman





   jamesprimate on March 13, 2017, 04:30:39 AM:

you all are so nice!! Tears of Joy

Quote
Um Question, I bought the Alpha on Humble bundle so do I get my key for steam on release day? Undecided

yes that is the plan! as soon as everything gets back and settled from PAX ill be starting to work on the logistics for that stuff. And speaking of PAX....


OBLIGATORY RAIN WORLD PAX HYPE WRAP UP POST

















Deep gratitude to Adult Swim Games, they went all out on this and it was damn amazing. Hard to comprehend how this all happened while standing under a giant 12' tall floating "Rain World" cube  Epileptic





   jamesprimate on March 14, 2017, 09:06:20 AM:

PLAYSTATION FRIENDS!

Rain World is part of the PLAY Collective:
http://blog.us.playstation.com/2017/03/14/play-collective-six-new-games-launching-with-ps-plus-discounts/

And pre-orders are live now for both the US and UK





   jamesprimate on March 14, 2017, 11:29:02 AM:

ohhh good call  Hand Thumbs Up Right Hand Thumbs Up Right





   jamesprimate on March 14, 2017, 12:36:18 PM:

bumping this for REASONS


PLAYSTATION FRIENDS!

Rain World is part of the PLAY Collective:
http://blog.us.playstation.com/2017/03/14/play-collective-six-new-games-launching-with-ps-plus-discounts/

And pre-orders are live now for both the US and UK






   jamesprimate on March 15, 2017, 03:39:27 AM:

ohhh Killscreen Gareth coming through with some choice shots from the media asset pack:
https://twitter.com/JumpOvertheAge/status/841953740248739842

https://twitter.com/JumpOvertheAge/status/841960507590508544





   jamesprimate on March 15, 2017, 01:59:26 PM:

 Epileptic Epileptic RAIN WORLD PREORDERS LIVE ON STEAM  Epileptic Epileptic



~~> http://store.steampowered.com/app/312520/





   jamesprimate on March 15, 2017, 06:48:08 PM:

O______O;






   jamesprimate on March 16, 2017, 07:00:26 AM:

I purchased Rain World through an old Humble Bundle link posted in this thread quite a while ago. How should I go about receiving my copy when the game releases?


If you ordered through humble, you should be all set! Were using them to distribute the kickstarter steam keys, so all of that will get sent out at the same time.





   jamesprimate on March 16, 2017, 03:21:28 PM:

Wait.... isn't rain world built in unity? Why is it windows only?

shaders, bro! While we are using unity as a rendering pipeline, the engine and everything else is 100% custom, and moving that from DX11 to OpenGL is still a time consuming process, especially since Rain World has hundreds of custom shaders and textures that will need to be fitted. Its just Joar doing the programming, so launching on 4 OSs simultaneously was impossible. But once we have the PC/PS4 versions launched we'll be able to turn our attentions to other versions and give them the attention they deserve!

Epileptic Epileptic RAIN WORLD PREORDERS LIVE ON STEAM  Epileptic Epileptic

~~> http://store.steampowered.com/app/312520/
Preorder'd.

Also, guys, you are in the phase of distributing review copies and all that stuff, right? Although most of that is probably handled by Adult Swim... but regardless of that, you absolutely have to give a free copy to that one dude who left that one first "slug cat" comment under one of your first videos. He earned it. It's a matter of honor.

I agree completely! Gotta track that fine gentleman down  Gentleman





   jamesprimate on March 17, 2017, 03:41:31 AM:

Kickstarter backers will get steam keys right?

of course!





   jamesprimate on March 17, 2017, 04:50:44 AM:

yes! co-op and competitive multiplayer are still planned, though they will come in an update (likely with additional content) post-release. it just needs a little more time to cook!  Hand Thumbs Up Right





   jamesprimate on March 17, 2017, 07:40:05 AM (Last Edit: March 17, 2017, 07:48:55 AM):

reviews should be up day before launch? things are a bit rushed! i havent talked about it, but our release date got bumped up pretty significantly so everything is a scramble.

im actually pretty nervous about the reviews! i know i shouldnt care, but its so weird having our little weird basement game going out next to like... horizon and zelda. what the hecckk. i just hope people keep the whole "one programmer" thing in context  Epileptic

6 year labor of love: ehh, just throw a number next to it and w/e





   jamesprimate on March 17, 2017, 09:25:58 AM:

We are working that out now! Will post deets when we get info ofc





   jamesprimate on March 18, 2017, 04:31:30 AM:

Ahh streams have been going surprisingly well! I was so nervous since it's a pretty slow paced game that takes a while to unravel. Obviously the tutorial and first region , getting an understanding of the controls and mechanics etc., is the most boring part. But watching Etalyx's stream and the dude made 4hours (!!) in the first region seem fun. Tay is an expert slugcat and has played the game for years at pax so she got through to the 2nd region much quicker, but still I think my playtime estimate is WAY off. Adult Swim is sending out info that it's ~30hr to beat, but that estimate is based on getting through the first region in like 15 minutes tops, lmao. In my 8hr runs it takes me 1minute and 30 seconds max to get to the 2nd region, lol!

Anyway, enough rambling! We're stoked though  Corny Laugh

Re: gates and death penalty - yeah it can definitely be harsh before you understand the mechanics. There are almost always shelters near the gates, and once you get into the rhythm, know to look for those first and stock up enough food for the journey before leaving, progress becomes much more viable.


Re: tutorial creature as a vibe killer - definitely a concern for us! 2 things: firstly, beyond the early tutorial it will only help you if you want to follow it. You can throw rocks at it to scare it away and it will leave you alone, or if you simply don't follow it's directions it will appear less and less. Also, no spoilers but you do part ways relatively early in the game.


Re: why do some people have the game early - for hype, reviewers and press! In addition to being huge for marketing, streamers also act as a 3rd round of QA so we can see how people are responding to difficulty, what they are liking and disliking etc. Allows us to make some final touch ups to squeeze in before the release and early patches / updates.

Cheers friends!!! Hand Any Key Hand Joystick





   jamesprimate on March 19, 2017, 08:34:26 PM:

Totally valid point! But I think that's okay? It's not strictly necessary to use until you start doing sequence breaking. Tbh I didn't want the hint in at all! The opened husks should be the hint! For me the game is all about those moments of natural discovery when all of a sudden you realize that there's a new path. But alas!





   jamesprimate on March 20, 2017, 03:48:00 AM:

Local multiplayer yes. Online multiplayer NO WAY (unfortunately). Given that all of the creatures in the world exist perpetually, the .net code for online multi would be MADNESS. Like MMO-scale. So unless blizzard calls us up, there's just no way we'll have resources or knowledge base to pull something like that off.





   jamesprimate on March 20, 2017, 07:30:57 PM:

that we do! there are 3 save slots available in the options menu for the launch build, and we plan on elaborating on that a bit more in later updates





   jamesprimate on March 21, 2017, 08:33:23 AM:

Christian has become faster than me with the RW content! :O

I really really enjoyed this interview btw. It was so nice to get the whole team in one place hanging out and talking. It really captures the development vibe too.






   jamesprimate on March 21, 2017, 04:18:00 PM:

yes indeed! Joar, Lydia, Del, James, the whole gang! we were all in NYC for what was supposed to be a break, but there is no rest the weeks before launch  My Word!

and speaking of which....

 Crazy Crazy OBLIGATORY 1 WEEK TO RELEASE HYPE!!  Epileptic Epileptic



Pre-orders are up if you would like a discount!

STEAM: http://store.steampowered.com/app/312520/

PS4 US: https://store.playstation.com/#!/en-us/games/rain-world/cid=UP0151-CUSA04196_00-RAINWORLD0000000

PS4 UK: https://store.playstation.com/#!/en-gb/games/rain-world/cid=EP0149-CUSA05667_00-RAINWORLD0000001


...and soon to be more  Shocked





   jamesprimate on March 22, 2017, 03:41:38 AM:

Not a bug, but rather a potential second chance opportunity! The slugcat has an invisible health meter (all creatures do), and if you are grabbed by a creature but not quite dead yet, the game allows for the possibility that you could recover if that creature drops you or if you are able to snag a spear and free yourself, etc. Generally how this works is if a lizard grabs you and begins to drag you to its den, then other lizards (or creatures) attack it to try to snag you as an easy meal.

The idea behind it is mostly show off the creature agency, allowing you to witness the churning ecosystem a bit more as the creature drags you screen from screen, and also reward patience in a way that suits the game: you never know what will happen


Totally understand if you don't want to do this or don't have time, but I was looking through the last hundred or so pages of this thread and noticed this video had been switched to private:





It would be great if it were changed to unlisted so it could be seen in this thread!

Done! and ill do one better too. Here is an updated version of that video, featuring a brief middle section that was recorded for a magazine article and then never used:



Quote
Do lizards eat anything else, go after anything besides you?

Yes indeed! Each creature has a web of other creatures that are its prey, generally with at least one or two creatures that are considered tastier than the slugcat! But that said, depending on your playstyle this may not be the most noticeable thing. The world is large and you can only view whats on your screen!





   jamesprimate on March 22, 2017, 05:25:29 AM:

Completely agreed! I'd like to have that first pop-up be something like "Second chance?" or "Can you escape?", etc., until you are actually dead. Anyway, its on the list for the first update. We'd have changed it before launch, but now that all the text is localized in 7 different languages we can only really do text changes in larger batches.





   jamesprimate on March 22, 2017, 07:55:57 AM:

L O L





   jamesprimate on March 22, 2017, 01:35:42 PM:

ahhh the pups! their gameplay mechanics didnt fit with the arc of the main game, so we are putting them in with the first content update as a separate narrative loop. (no one is sadder about that than me, i assure you!) once the initial game is out, we'll start talking about all that stuff!





   jamesprimate on March 23, 2017, 08:29:40 AM:

Thank you!

The PC/PS4 versions are identical, though depending on your PC specs the PS4 version might run smoother in certain locations. The team that helped us with the port, Carbon, did a fantastic job of optimization on some of the larger / more chaotic areas where there might be hundreds of AIs, events, audio etc all burning up CPU cycles. It purrs at a smooth 60fps in all circumstances!

One point that might be worth considering is that after the initial release we are not sure how things like multiplayer / co-op / updates will be handled. PC we have a lot of control over, so its possible that PS4 might wind up with changed versions to suit the platform, and then possibly later than the PC updates. But tbh we dont actually know that yet, this is pure speculation!





   jamesprimate on March 24, 2017, 09:39:42 AM:

the game was originally made for keyboard controls actually! some people prefer the controller, but I still play on the keys mostly. Probably out of habit.





   jamesprimate on March 24, 2017, 06:37:36 PM:

they taste terrible!





   jamesprimate on March 25, 2017, 05:00:51 AM:

So... hi ! I'm one of the early supporters of rainworld. I also happen to be a bit of an artist, and I'd like to send some love Smiley with a little fanart. I hope you guys like it Smiley !




:O :O :O Thats gorgeous, thank you!! if youre on twitter, tweet this at me and ill gladly RT and get it some views


Quote
Also, after barely surviving a long stretch of the level, I entered a room where the rain killed me instantly. The thing is, there was no rain outside. I am not sure if this is a bug or a feature.

HMMM that sounds like a bug. Can you email me more details to james[at]videocultmedia.com and ill look into it? Thank you!!  Gentleman





   jamesprimate on March 25, 2017, 07:28:52 AM:

Miros Birds!  Perhaps you'll catch the art reference





   jamesprimate on March 25, 2017, 10:29:01 AM:

Adult Swim said on Twitter that the game would be coming to GOG



ohhhhhh man Christian is so ahead of me at this point, lol. I didnt know the GOG and Humble store info was announced yet. Tweeting it now





   jamesprimate on March 26, 2017, 07:40:17 AM:

added to the bug list! thank you!





   JLJac on March 26, 2017, 01:13:43 PM:

Current mood:  Shocked





   jamesprimate on March 26, 2017, 07:34:25 PM (Last Edit: March 26, 2017, 08:30:04 PM):

Got it from Humble, didn't receive any email with any key. What's happening ?

my bad! there was one batch of humble pre-orders that hadn't gone through. should be fixed now. thanks for telling me!


Quote
James, I hope this crazy emergent lizard behavior still in. It sounds awesome. It reminds of those stories Derek Yu would tell about the unexpected stuff that would happen in Spelunky

http://steamcommunity.com/app/312520/discussions/0/135512555423704858/#c135512555425077359

it was a while ago, but i dont think we changed it!





   jamesprimate on March 27, 2017, 07:34:53 AM (Last Edit: March 27, 2017, 08:14:50 AM):

Quote
James ate you happy with the review? Undecided

yeah, actually! i mean if we were aiming for review scores this game certainly never would have been made. its entirely some weird, personal, arty experiment, with all the baggage that entails. the fact that anyone is looking at ALL is amazing.

we've had some incredible high praise from people who really understood what we were going for with the game and were able to take it on its level and see past the rough edges, and unsurprisingly we've also had some dings from reviewers who didnt have the patience to spend 60hr wandering around in some terrifying, occasionally impossible lost land. and thats 100% okay, because the game is both of those!

from my perspective, id vastly prefer that the right person buy this and play it deeply because it resonates with them than 10 randos buying it because of some number rating.





One thing I will say though is that from some of the big site reviews its pretty clear that a number of reviewers didnt make it out of the first region. I completely understand time constraints and definitely this game is a lot to deal with if you are a journalist under deadline (and certainly were low on the totem pole of reviews to invest time in), but even so it would be reviewing the game based on experiencing like... 3% of the games content. Which, idk, seems a bit strange of a position to be making bold proclamations and rigid numbered reviews... but we arent the first to experience this situation and ceraintly wont be the last

edit: lol, and apparently im not alone in thinking this:

https://twitter.com/EightBitDylan/status/846387991996239872





   jamesprimate on March 27, 2017, 08:07:31 AM:

GOG and humble should be up on launch day!





   jamesprimate on March 27, 2017, 09:00:14 AM:

honestly though, its pretty hard to complain when this is the BAD review

Quote
Rain World is astonishingly good-looking and absurdly cruel, a 2D action-platformer that thrills almost as often as it makes you throw down the controller in despair.

i mean this is basically the review of my dreams, lol





   JLJac on March 27, 2017, 12:42:51 PM:

Woah these reviews are mixed! The best ones are amazing and the worst ones are brutal Shocked Yeah the game is unfair, that's true - and yeah, we'll definitely be trying to smooth out the experience a bit. Adding more shelters would probably make a big difference for example. Need to have this crazy mix of input cool down a bit before making decisions though!

I actually have no idea what happened to the polygon reviewer - there isn't any mechanic that sets you back further than where you started to my knowledge! It seems to me they just had a really sour experience with the game - we've seen the same thing with streamers, some have a bit of luck, figure some things out, feel rewarded and appreciate it. Others have bad luck 5 times in a row, fail to figure some key element out, get frustrated early on and (understandably) gets into a mood where they can't really appreciate it even after they actually get to move forward. That said I think their frustration is real and valid of course, and it's still 100% on us! Work ahead, but for now let's just see where stuff is as the dust settles!





   jamesprimate on March 27, 2017, 02:29:56 PM:

ive asked about this and was told its because the store page wont go live until release day, tomorrow. check back then, and if it doesnt work please let me know!





   jamesprimate on March 27, 2017, 08:31:10 PM:

GOOD LUCK LITTLE SLUGCATS! <3





   jamesprimate on March 27, 2017, 09:16:55 PM:

ohh! Sequence breaking already!

If you go the Drainage System route, you'll skip some of the early tutorialization, which is perfectly fine for a seasoned professional such as yourself. Also its a bit higher difficulty route, but very possible! The streamer 8BitDylan was able to make it through this route pretty well.

Drowning is definitely a concern. One thing to note is that pressing the *swim* button decreases the breath noticeably, so my advice would be to calmly swim through the sections as best you can for maximum underwater distance.





   jamesprimate on March 27, 2017, 10:13:32 PM:

GoG version is still missing ! I understand it's live on Steam. Any updates on that ?

as i understand it, GOG should go live when they wake up tomorrow and press the button

Quote
I'm okay with crawling slower (assuming it's got a sneak advantage), but it is pretty counter-intuitive: Animals are supposed to run faster on all fours!

crawling is actually the sneaking mechanic! quieter and less visible to predators. but also, as you note, slower





   jamesprimate on March 28, 2017, 04:19:06 AM:

thank you for your kind words, friends!

if you'll pardon a request: for those of you who are enjoying our little rainy world, Id like to encourage you to write Steam / PS4 reviews! Launch day is super huge for us ofc, and getting past the "i died it was too hard 0/10, 0.2hrs played" crowd is going to take our supporters speaking out. TY!!  Gentleman





   JLJac on March 28, 2017, 12:18:10 PM:

I've been following this game for years and I unfortunately have to side with many of the complaints voiced by others in this thread and those on negative reviews. There are many mechanics that need to be addressed before more positive reviews come in. Everything to be addressed has already been mentioned, so I won't repeat, but James & Joar, I do hope you are taking the valid, well-thought-out criticisms (not the "i died it was too hard 0.2hrs played") to heart, because I want nothing but your game to succeed, rather than only appeal to a very limited crowd.

Believe me, we're in 100% sponge mode soaking all this up and making plans right now!





   jamesprimate on March 28, 2017, 09:49:57 PM:

WOO LAUNCH DAY OVER!! And now the great patching begins...

im so stoked to see people working their way through the learning curve and starting to work as a community. i think this is going to be a lot of fun  Coffee





   jamesprimate on March 28, 2017, 10:44:49 PM:

Yep, i think this is totally valid, and were considering ways of changing it up in the first patch.

it was introduced as a way of preventing people from just quitting and restarting scot free when the going gets tough, but its unnecessarily punishing and there are obviously a million reasons that a person might have to quit and restart other than that they want to game the system.





   jamesprimate on March 29, 2017, 01:16:55 AM (Last Edit: March 29, 2017, 02:15:23 AM):

ohhh these are fantastic suggestions (and cuuute drawings), thank you!





   jamesprimate on March 29, 2017, 01:45:48 PM:

100% correct!

Somehow weve found ourselves in the truly bizarre situation of having a super hyped game entering the high polish marketplace of 2017 that was in fact originally made on software designed for creating SPREADSHEETS. We have all manner of insane dependant legacy weirdness and hand-coded-workarounds-that-became-essential-aspects that you wouldn't even believe me if I told you. The fact that this games works as well as it does (aka fairly solid with some noticeable strangeness here and there) is incredible and due entirely to sheer brute willpower and dedication.

So, yeah sorry if certain aspects aren't as slick as one might expect!





   JLJac on March 29, 2017, 08:05:15 PM:

Hi everyone! Thanks so much for taking the time to give feedback. Right now we're putting together lists and working out the details on how to adapt to the feedback. We're not aiming to make the game easy (maybe a little easier here and there  Smiley) but to sort out some of the kinks that have come up as frustrating. I've already addressed a few commonly mentioned issues. For now the focus is on stuff that's pretty small for me as a programmer but with big impact on the experience, and I'm making my way through the short-term list of programming stuff at a brisk pace right now.

Apart from the short-term list, we have more long-term stuff, but want to get the most pressing things done first. Long story short, we hear you and are at the task! Updates as things move on!





   jamesprimate on March 30, 2017, 10:18:02 AM:

shoutout to  RPS for this labour of love: https://www.rockpapershotgun.com/2017/03/30/the-deadly-creatures-of-rain-world-a-bestiary-in-gifs/

Be forewarned, some spoilers in there!





   jamesprimate on March 30, 2017, 08:41:17 PM:

there are 12 regions, but some are large enough and with diverse enough look or terrain to have named sub-regions.

Partially this was for mood/context, and partially it was to de-spoiler. there are a few key "aha!" moments that would have been ruined if you knew that you were already in X region.





   jamesprimate on March 31, 2017, 08:57:48 AM:

Hey ,

I was wondering what the special ability of the golden faced lizards is.
I now they have armor on the head and dont get scared of you waring a birdmask at all, but beside of that do they have any special ability?
Does realy every different colored lizard has a special ability or are some only recolors?

ohh the yellows are my favorites. they are pack hunters, and will coordinate with each other to attack, usually with one or more flanking from the sides to trap you. the yellow with the longest antennae is the leader and if you are able to injure that one, often the coordination will fall apart





   jamesprimate on March 31, 2017, 12:30:24 PM:

BUG REPORT: On the PS4 version, I got snagged by one of those plant creatures that mimic a pole during the startup of a rain storm and it pulled me downward and then as the rain hit its peak it just sort of rained forever and the game was stuck like that (i.e. I was unable to do anything, the screen was dark and raining, but there was no game over).

yes! Thank you for reporting. I have another instance of this on record and have the PS4 code people on it, so a fix will be incoming!





   JLJac on March 31, 2017, 01:49:27 PM:

Don't press the jump button and your slugcat won't let go of the pole!





   jamesprimate on March 31, 2017, 04:53:21 PM:

My game has been prone to crashes for a while now, but now that I'm later in the game it's getting more and more frequent to the point where it's getting tough to progress.

Sad

Specs and locations? Were working on patches now!





   jamesprimate on March 31, 2017, 07:09:29 PM:

A few minutes ago i have encountered my first game breaking bug.
I was in the shoreline in transitioning through the karma gate in direction subteranien
As i hibernatied in the first hibernation chamber of subteranien the game kind of froze with a blackscreen and the little loading text in the under left ... i had to stop the game with the taskmanager.
After reentering the game my savefile is also corupted.. when i try to load the savefile  the Sound of the game is still there but the Screen stays black. Is there a way to get my savefile back?Or is my progress lost forever?

I still can get in the start screen, but one other thing is that when i select the Region button in the menu it only Shows me a picture of subteranion and i cant look at the other region pictures.


thats no good! let me know if it persists after restarting and if so ill try to get you a custom sav file.





   jamesprimate on March 31, 2017, 08:42:38 PM (Last Edit: March 31, 2017, 08:50:01 PM):

unless im misunderstanding your question: just climb the center pole, get off to the left, then pounce from the left ledge to the right!

i think you can also leap from the center pole and grab the bit of broken right-ish pole, then swing yourself over. but i am the level designer, so i WOULD say that, wouldnt i.





   jamesprimate on March 31, 2017, 09:00:08 PM:

unless im misunderstanding your question: just climb the center pole, get off to the left, then pounce from the left ledge to the right!

i think you can also leap from the center pole and grab the bit of broken right-ish pole, then swing yourself over. but i am the level designer, so i WOULD say that, wouldnt i.

That's exactly it - I can't climb the center pole! I was stuck under at the position on the screenshot. Shocked
Here's a gif: http://imgur.com/a/ksLfc
Or does carrying a spear block you from climbing there? That just feels...not right. Concerned

ahhhhh i get you! there is a tunnel to the left of you. cruise left then up and you'll be on that floor level platform





   JLJac on March 31, 2017, 09:13:39 PM:

Try taking a quick look at the map!

Hey guys, if any of you are experiencing corrupt saves or crash/freeze bugs, feel free to PM the save file to me, it would be super helpful! Save files are in RainWorld/UserData and just named "sav.txt"





   jamesprimate on March 31, 2017, 09:22:30 PM:

unless im misunderstanding your question: just climb the center pole, get off to the left, then pounce from the left ledge to the right!

i think you can also leap from the center pole and grab the bit of broken right-ish pole, then swing yourself over. but i am the level designer, so i WOULD say that, wouldnt i.

That's exactly it - I can't climb the center pole! I was stuck under at the position on the screenshot. Shocked
Here's a gif: http://imgur.com/a/ksLfc
Or does carrying a spear block you from climbing there? That just feels...not right. Concerned

ahhhhh i get you! there is a tunnel to the left of you. cruise left then up and you'll be on that floor level platform

Alright then - must be because when I go that way I'm incidentally stuck at the wrong way so when I go there I didn't climb upTears of Joy To be honest that place doesn't look like it's open either!

should be as easy as this:



but let me know if it isnt and ill look into it!





   jamesprimate on March 31, 2017, 10:26:33 PM:

no fault at all! a wary slugcat is a living slugcat





   jamesprimate on April 01, 2017, 12:50:43 PM (Last Edit: April 01, 2017, 12:57:28 PM):

good suggestions all!

Also as I was trying to come back toward Five Pebbles from The Wall, I managed to get out of the world: http://imgur.com/a/tAbGf

Are we supposed to not be able to go back?

Fixed this one today!



Got the weirdest bug. While chased by lizards and coming out of a tunnel, my slugcat started drifting left without taking any inputs. Now it's stuck there, and even the rain won't come.

image gallery: http://imgur.com/a/yhT6R

LMAO waaaat thats hilarious. Sending it to Joar.


thanks for the feedback guys, please feel free to keep it up!





   JLJac on April 01, 2017, 04:00:49 PM:

Hey, devs, was the setting for Rain World even slightly inspired by the megastructure in BLAME! ?

I personally love BLAME, yeah!

Edit: okay, I've crashed six times in Garbage Wastes now

Whoa, that's awful! Are you on PC? Does it seem like the bug happens on any specific action? Please feel free to send me your save file (RainWorld/Userdata/sav.txt) and if you have, any instructions for how to make the crash happen, and I'll look into it ASAP.

Oh and for people sending save files, some other way of doing it rather than dumping it all in a tigs PM would be super good - anyone knows any good ways to safely host a text file for a little bit?





   JLJac on April 01, 2017, 05:26:28 PM:

LOVE the gifs  Tears of Joy Keep playing  Wink





   jamesprimate on April 01, 2017, 08:35:43 PM:


No, I'm on PS4. It seemed totally random. Twice time it happened in the room between Industrial and Garbage Wastes, then in the gate area as the gates were closing (lost karma on that crash), and then the other threee crashes happened at random times while in Garbage Wastes



AHHHH, yeah we're getting a lot of random crash reports on PS4. Which is weird and disappointing because there is a separate, professional team thats handling the PS4 code, so we thought that at least that platform would be fairly rock-solid. I'll make sure they get this info and fix.





   jamesprimate on April 02, 2017, 12:33:53 PM:

What's up with this area in the Industrial Complex. Is there supposed to be nothing to the left? (screen doesn't switch for me), also those 3 poles aren't climbable. However it does look inviting, especially considering the high pole near the passage



good catch! thank you, fixing these today  Hand Thumbs Up Right Hand Thumbs Up Right





   jamesprimate on April 03, 2017, 05:04:02 AM:

Out-of-bounds is possible in this room of Shaded Citadel:



(green dot where I put a spear, green arrow leads to nowhere)

Good catch! Thank you!





   jamesprimate on April 06, 2017, 06:05:45 AM:

Hello friends and slugcats! We present to you patch #1: Rain World v1.01



This quick patch is intended to accommodate some early player feedback and polish assorted rough edges on the various game systems, etc. These were all low-hanging fruit that we think improves the player experience without taking anything away from the concept of the game. Rain World should be an existential experience: unforgiving and even occasionally unfair. But it should be the jaws of a Lizard that gets you or the Rain, not some ragdoll physics wonk or design oversight!

Gameplay improvements:
* “stuck in holes” fix - disconnected exits will no longer snag you
* subtle backlit slugcat in low visibility swimming situations
* quicker turning around in tunnels
* larger lung capacity while swimming
* nerfed the more intense waterfalls in Shoreline to prevent repeated drownings
* more pearls near Scav tolls in Garbage Wastes
* more food in central Garbage Wastes
* more food in central Shaded Citadel
* more karma flowers in world
* karma gate requirements on the Shaded Citadel, Drainage System and Underhang side were lowered to prevent players becoming stuck in challenging regions
* food / karma flowers regeneration now ticks forward on deaths (helps eliminate stuck / starvation situations at low karma)
* players will now keep map progress between deaths (Id say 99.5% of people asked for this)
* map now features gate karma symbols and shelter icons when locations are discovered
* karma depletion on game exit removed if done within 30 seconds of sleep cycle
* full karma drop on exit bug fixed (that was a brutal one, sheesh!)
* intro cinematic is now skippable by holding start / esc
* for players having issues with Grey Screen of Death and starting the game from sav files, you can now entirely skip loading the into by holding "s" when pressing "New Game." hopefully this helps until we have a real fix!
* many many minor room fixes

Stability improvements:
* map loading bug fixed (was causing the corrupted savs, ugh)
* gate crashing bug fixed
* stability improvements

etc.

Next steps: More patches and content is on the way, of course! We would like to see how this current round of bugfixes land before digging into further issues, as we have a feeling that these might solve a lot of the problems we've seen. But of course if you could keep sending in those bug reports and sav files that would be fantastic and hugely beneficial.

Thanks to all for feedback and please keep it coming! Let's all get through this tedious fixing and tweaking so we can get rolling on the fun stuff: new content!

<3
--Rain World team





   jamesprimate on April 06, 2017, 06:32:42 AM:

Quote
I'm actually a little sorry to see the change to let you keep your map after death. For me, losing map on death was a big incentive to plan very carefully before exploring, and getting to map some new area despite mortal danger (or, more likely, after dying a few times) was a substantial reward.

I agree, ofc! I think we'll make that an option when we do our proper update. But since we're in 7 languages now, localization for menu changes takes a WHILE, and there was an overwhelming request from the playerbase for this, so let see how it goes.





   JLJac on April 06, 2017, 07:07:49 AM:

@ crankykong

This is definitely not the final patch/update, we just wanted to get the things that were the quickest to fix out there... quickly.

Agreed that the controls need polish, but some of it could be solved with better tutorialization as well - which couldn't make it in this time around because of the time frame of translating it. Just want to address some of your valid concerns there though, as stuff that we plan to fix and/or tutorialize better!


Quote
-the button for charging up leap jump and the button for falling of of cliffs and poles should really not be the same button!!!
-controls which constantly let you fall of off cliffs and ledges,when you try to leap jump.

The leap jump is done by crouching + holding jump - you don't need to hold down to leap jump. On the fall-through platforms, you can tap down once to get into the crouching position - from there you can either hold jump to leap, or tap down again to fall through the platform. On smaller platforms, you can tap down quickly (not hold) to get into the crouching position, and then leap from there (although this is definitely a little finicky and something we'll look into!)

Quote
-controls which constantly let you roll down ledges,when you try to duck in a pipe on a Floating platform,because for some strange reason slucgat sometimes tends to do a barrel roll of the ledge, when you duck instead of going into the pipe you want to duck into.
Accidental rolling fixed in this patch!

Quote
+The transition of slugcat between horizontal poles and vertical poles on their crossing lines is slow and clunky as hell!

Noted, will look into! For now, a tip is to jump between the poles instead!





   jamesprimate on April 07, 2017, 07:16:38 AM:

Oh on the subject of the map, if anyone is interested I'll go a little more in depth since im here.

We didnt JUST implement the "sav map discovery through death" because players asked, there was also some thought behind it ofc. Basically the map in the release version just wasnt working how we intended. Part of the function was to allow players to track their location and plan routes, etc, like a map does. But the other essential part was to show players where they HADNT been, so when they wanted to explore new territory they would know where to start.

We had thought that having the map progress be lost upon death would do this, but in fact when watching streamers play it seemed to have the opposite effect! Since the game is quite challenging, players were only really able to save their map progress along main lines through regions, and when they'd explore side paths they'd die and lose whatever cartographic progress they had made. So then when you look at the map its basically just a straight line going from region gate to gate. Not at all what we were intending!

Saving the map progress through death allows for the progress along side paths and etc to remain, which i think is a much better indication of "path not explored" than what was happening before. So all in all i think its a solid improvement!





   jamesprimate on April 07, 2017, 01:40:32 PM:


Maybe the hibernation chamber is not only a place to hibernate but also a cloneing chamber at the same time, which saves the genetic information and the memorys of the creature resting in it for the purpose of information gathering by the central A.I of the megastructure and if this creatures does not return before the next rainperiode to rest in it, it just clones the creature after the rain has ended and gives this clone the saved memories from the brain scan... who knows ! Maybe its a mechanism against species extinction which is there only for the purpose of compensaiting for all the near species extinction caused by the rain. And the rain is a nessesary evil/byproduct of the weather control system which is needed for the global commodity circulation of the  abandoned,but still working, megastructure build by a former Type 1 civilisation (Kardaschow-Scale) which has "evolved" into Type 3 and left the solar system.
 

i love this actually. let me know when you get to the end and lets discuss :O





   jamesprimate on April 07, 2017, 04:06:18 PM:

James/Joar,

I'm disappointed that the patch seems to be unavailable to those of us who chose the GOG option.  I'm aware it was made clear that the Steam vs. GOG choice was "permanent" — but didn't expect to lose out on patches when I chose GOG!

Is there any way I can switch to the Steam option without buying the game again?

dont you worry, the GOG patch is coming soon! we just cant upload it directly there, so it takes a few days to go through the channels. Id say it'll be up on Monday.


Quote
I just realized that I can see the symbols for karma gates and hibernation chambers in places that I haven't explored yet, but that are accurate.  Waaagh!

this absolutely shouldnt be the case. Can you send me a screenshot?





   jamesprimate on April 07, 2017, 06:10:24 PM:

try imgur.com!





   jamesprimate on April 10, 2017, 09:11:52 PM:

Hello, could we have news about the PS4 patch ?

PS4 patch should be going up this week! It takes a bit longer than Steam, as we don't have direct access to the codebase it has to go through porting and then Sony's cert process. Also we'll have a GOG version this week as well.





   JLJac on April 13, 2017, 05:20:21 AM:

Yep, it needs DX11 or it's all purple! If your laptop doesn't have DX11, that might be it?





   JLJac on April 14, 2017, 06:27:29 AM:

FWIW I needed -force-d3d9 to make RW run under Wine.

Hey JlJac, I'm getting a consistent crash when I try to move from Farm Arrays to Subterranean; the console just repeatedly spams

Code:
World assigned to existing region state: SB
Adapt world to region state SB
ID.0.11153<oA>Spear<oA>353.31.11.1<oA>4<oA>0
NullReferenceException: Object reference not set to an instance of an object
  at RegionState.AdaptWorldToRegionState () [0x00000] in <filename unknown>:0
  at World.LoadWorld (System.Collections.Generic.List`1 abstractRoomsList, System.Int32[] swarmRooms, System.Int32[] shelters, System.Int32[] gates) [0x00000] in <filename unknown>:0
  at WorldLoader.CreatingWorld () [0x00000] in <filename unknown>:0
  at WorldLoader.Update () [0x00000] in <filename unknown>:0
  at OverWorld.Update () [0x00000] in <filename unknown>:0
  at RainWorldGame.Update () [0x00000] in <filename unknown>:0
  at MainLoopProcess.RawUpdate (Single dt) [0x00000] in <filename unknown>:0
  at RainWorldGame.RawUpdate (Single dt) [0x00000] in <filename unknown>:0
  at ProcessManager.Update (Single deltaTime) [0x00000] in <filename unknown>:0
  at RainWorld.Update () [0x00000] in <filename unknown>:0

while the sound loops and some of the animations continue (but the gate doesn't move).

What would you like me to do with the save file?

Ok! I think I know what this one is and have a fix in the pipeline. It would be cool if you could send me your save file though, because then I can double check and also de-corrupt your save if you want to. Pastebin.com works well!





   JLJac on April 14, 2017, 10:20:52 PM:

You can press the pickup button while holding the *down* direction to put down an item without throwing it!





   jamesprimate on April 15, 2017, 03:28:18 AM:

Version 1.015 patch notes from Joar:

Hi! Just wanted to let you know what's up in this patch - it's a mini patch really, with just two little tweaks:

Undiscovered symbols can't be seen on the regions screen map any more
Vulture mask is once again back to not being throwable, instead you release it with the down + pick up button command like in v1.0

Also there's a stability improvement that could help with some of the freeze issues on loading save files. All in all, very minor tweaks and no cause for alarm! Working mainly on stability right now, and have some more fixes of that sort coming up.

-Joar





   JLJac on April 16, 2017, 02:42:38 AM:

Thank you for the kind words! I'd recommend you to try for the gate up top instead of going left!





   jamesprimate on April 24, 2017, 01:45:41 AM:

Game is too easy, had only 3 deaths in my last speedrun, I think I'll go for a no-deaths run next  Hand Joystick Smiley

true, we definitely need a hard mode!  Cheesy





   JLJac on April 24, 2017, 04:17:35 AM:

Whew, what a month! Keep up the good discussion, we're taking notes Hand Pencil The opinions are kind of sprawling though:
Game is too easy
so getting together a concrete action plan will take some work!


Update 533

Apart from the bug fixes and tweaks, I recently started dipping a toe in new content as well:



The next update won't be mainly a content update I don't think, but we definitely should take the opportunity to throw in a few new things to encounter in the world!





   jamesprimate on April 24, 2017, 07:39:53 AM:

WE'VE had the PS4 patch done and submitted for over a week. Its just making its way through QA and Sony's cert process.  Hand Any Key





   JLJac on April 24, 2017, 09:29:26 PM:

PS4 patch is done and delivered, it's sony that are super rigorous with their cert process ~ but ought to be through soon!

Yup, we're aware it's possible to go off-level here and there, we should probably place some sort of invisible-wall-thing. Thanks for the heads up!

The idea with the echoes is that you won't get a good look at them - keeps it mysterious and your mind fills in the blanks with cooler stuff than I would be able to deliver Smiley





   JLJac on April 25, 2017, 11:27:03 PM:

@12LandsBoundlessSpace, nice name Smiley Thanks for liking the game. I say with mods, don't worry too much about canon - the fun is in making up your own stuff right? That said you're of course welcome to tell what you had in mind. As for twelve new regions... Good luck soldier  Shocked

@jprosk, yup, you going in the direction of the thing you throw is physically incorrect. It... felt right though, to have slugcat sort of lean into the throw.

@Manray, the sky centipedes are always sort of the same size.





   JLJac on May 04, 2017, 02:17:21 AM:

Update 534

Whew, lots of work these day! I'm doing some multiplayer stuff (basically an arena mode) and difficulty modes. The idea for the difficulty modes is that you'll be able to select a slugcat to play as, and they'll come with a few different perks and/or slight variations to the world. For the first update I'm gonna do 3 of them ~ Yellow (easy), White(normal) and Red(hard). White will ofc be just like the current game, whereas the other two have slight variations.

Here's Red carrying an extra spear on its back:


The extra spear goes outside of the two "slots" of the hands, meaning that you can have it simultaneously as carrying two other objects (and potentially a fourth one in your tummy). The spear is stashed and retrieved similarly to how you swallow stuff, but requires a significantly shorter button hold. I think there should perhaps be some more animation to the slugcat's arms when putting/retrieving the spear, will get to that later today.

This is a pretty significant boon to the player, but don't worry, playing as Red will be very very challenging! Red is basically for the action-oriented players, and you'll need that extra spear.

Playing as Yellow on the other hand is going to make your life easier in a bunch of ways compared to White.





   jamesprimate on May 04, 2017, 05:43:08 AM:

dropping in some of the early work on the new multiplayer levels...
















   JLJac on May 04, 2017, 10:48:24 AM:

Aaaand there!



@theod, yeah, might be a little bit too bright? Part of the puzzle is that they need to looks distinctive enough in multiplayer as well...





   jamesprimate on May 05, 2017, 07:44:35 AM (Last Edit: May 05, 2017, 08:28:57 AM):

Haven't you any news from Sony about the PS4 patch ?

Short answer: its probably still about a week away


Long answer: Bah! This has been an incredibly frustrating process and im so disappointed that it has taken this long, sorry. We shipped patch code for the PS4 version literally 2 days after the game launched, and basically its been back and forth between us, ASG, the people doing the PS4 port, and sony for the past month.

There was a "finished" patch version that got through the process a week ago which was intended to go out, but somehow aspects of the sleep screen UI got messed up (Huh?), stuff thats only apparent later in the game, and its just luck that I happened to triple check before it went out.

So now thats being addressed. Hope is that it can be out early next week, but there has been so many bugaboos with this PS4 patch that i dont want to make any official announcements until its done, tested, and in my hands.

Doubly frustrating because it takes time away from us working on the new content! Every time a new version of the patch comes in, its like 3 days solid of me and the ASG QA team running it for bugs.

Anyway! Pardon the vent, but thats whats up with that.





   JLJac on May 08, 2017, 11:34:37 AM:

Update 535

Just steam-rolling through the list of little things for this next update. It's gonna be pretty substantial, apart from new game modes there's actually a bit of content sneaking in as well, but I don't know how much I want to give away!

Several little weird uninteresting problems show up as a side effect of splitting the game into two modes that you can switch between ~ for example I had the Threat Music from single player unexpectedly show up in multiplayer, etc etc etc.

In the game I actually call it "arena mode" right now rather than multiplayer, because it's possible to play by yourself as well and just brawl against critters. Don't know for sure where the name is going to end up, but I think "Arena" might be good - I would call it "Sandbox" but that's gonna be the name of a specific Arena mode, so it gets a little complicated!


(lame multiplayer footage of me running around alone - but yeah, you get the idea, slugcats and everything else thrashing around like mad in a little room. And yeah, I think that centipede killed a vulture  Shocked)

Also, what might be very good news from a technical standpoint! Previously I had loaded all the sounds of the game on startup (a clunky setup, but we had to do it that way so James could feed it external sound files) and that soaked up a loooot of RAM. So I decided to try to load the sounds through Unity instead ~ and that actually worked. So now the game is lazy-loading the sounds, and RAM is doing much better. But the REAL good news is that this enabled me to call the elusive Resources.UnloadUnusedAssets(); method, which just drops everything in RAM that's not being used. I couldn't do that before because Unity didn't recognize all of my hack-loaded sounds and ditched them, but now after a few tweaks it worked out, and *that* truly worked wonders for the RAM issue, it seems. So, all fingers crossed, the RAM crash demon might finally be purged, and people won't any longer get crashes every time something slightly graphics intensive loads. Touch wood, fingers crossed, but seems to actually be a big step in the right direction!

In difficulty mode news, things are coming along. Red is pretty much done, and is extremely hardcore. I went ahead and made Red not save maps on death just like old Rain World 1.0, because some people mentioned missing that feature.

The main thing about Red is eating meat:



Animation is perhaps not quite there yet, but you get the idea. Don't want it too gory, but would rather just suggest the concept through the movement of the characters. Might take a little tuning!

Yellow is coming along and is generally easier in a bunch of ways, some of which are specifically targeting karma-related frustration. Some people want to see the game but just can't deal with the punishment, and Yellow is supposed to go in that direction without necessarily scrapping huge game mechanics. So just a little easier to steadily progress and see new pretty backgrounds, without being beaten into the ground too brutally for a random slip. It's still going to be rain world of course, with lizards hunting you and stuff like that, but just a little bit more approachable.

So all in all, good progress!





   jamesprimate on May 09, 2017, 07:27:08 AM:

bumping all of this for the new page. joar has been a CODE MACHINE these past weeks, and im really excited for yall to see the new content.  Hand Clap Hand Clap Hand Clap



Update 535

Just steam-rolling through the list of little things for this next update. It's gonna be pretty substantial, apart from new game modes there's actually a bit of content sneaking in as well, but I don't know how much I want to give away!

Several little weird uninteresting problems show up as a side effect of splitting the game into two modes that you can switch between ~ for example I had the Threat Music from single player unexpectedly show up in multiplayer, etc etc etc.

In the game I actually call it "arena mode" right now rather than multiplayer, because it's possible to play by yourself as well and just brawl against critters. Don't know for sure where the name is going to end up, but I think "Arena" might be good - I would call it "Sandbox" but that's gonna be the name of a specific Arena mode, so it gets a little complicated!


(lame multiplayer footage of me running around alone - but yeah, you get the idea, slugcats and everything else thrashing around like mad in a little room. And yeah, I think that centipede killed a vulture  Shocked)

Also, what might be very good news from a technical standpoint! Previously I had loaded all the sounds of the game on startup (a clunky setup, but we had to do it that way so James could feed it external sound files) and that soaked up a loooot of RAM. So I decided to try to load the sounds through Unity instead ~ and that actually worked. So now the game is lazy-loading the sounds, and RAM is doing much better. But the REAL good news is that this enabled me to call the elusive Resources.UnloadUnusedAssets(); method, which just drops everything in RAM that's not being used. I couldn't do that before because Unity didn't recognize all of my hack-loaded sounds and ditched them, but now after a few tweaks it worked out, and *that* truly worked wonders for the RAM issue, it seems. So, all fingers crossed, the RAM crash demon might finally be purged, and people won't any longer get crashes every time something slightly graphics intensive loads. Touch wood, fingers crossed, but seems to actually be a big step in the right direction!

In difficulty mode news, things are coming along. Red is pretty much done, and is extremely hardcore. I went ahead and made Red not save maps on death just like old Rain World 1.0, because some people mentioned missing that feature.

The main thing about Red is eating meat:



Animation is perhaps not quite there yet, but you get the idea. Don't want it too gory, but would rather just suggest the concept through the movement of the characters. Might take a little tuning!

Yellow is coming along and is generally easier in a bunch of ways, some of which are specifically targeting karma-related frustration. Some people want to see the game but just can't deal with the punishment, and Yellow is supposed to go in that direction without necessarily scrapping huge game mechanics. So just a little easier to steadily progress and see new pretty backgrounds, without being beaten into the ground too brutally for a random slip. It's still going to be rain world of course, with lizards hunting you and stuff like that, but just a little bit more approachable.

So all in all, good progress!





   jamesprimate on May 10, 2017, 08:02:37 AM:

Local multiplayer is really cool, I've wanted to introduce my gf to the game for a while. But I'm a bit sad if it's limited to arenas, unless those are at least as big as regions. Some people have managed to hack the game to allow multiplayer in the campaign so I kinda hoped that was also on the menu.

Do you guys also consider adding online multiplayer in the future?

ps: The Rain World now has its own page on speedrun.com. If you've got categories to suggest or would like to give it a go and want some advices, feel free to come this way.

we have plans to add co-op! as you might have seen, some people have found that the framework for it is already in the current game and can be played with some hacky solutions. but to make it work in a manner fitting for release is going to take a bit of experimenting. it certainly wont be in the upcoming content update, but is entirely possible for the one after that.


about speedruns! since you mentioned it, we're thinking of adding some tools and functions specifically for speedrunners. stats and counters, that sort of thing. but other than watching them occasionally we dont really know what the community would consider helpful. if you have any suggestions, we'd love to hear it!





   JLJac on May 10, 2017, 10:12:09 AM:

The tricky thing with coop is the screen - as we don't have scrolling, we can't even do the old hack "camera hovers at the point between the players, so you better stay somewhat close" ~ instead we have the screen-by-screen thing, which if you think about it is really difficult to get to work with two players. Actual split screen would be the only Real Solution, and I've been experimenting with that, but that in turn creates a bunch of difficulties with the shaders. So idk ~ we definitely want co-op, it seems like it could be really awesome, but it takes some serious thinking to come up with a good solution! We'll start with the one-screen arenas, those are a bunch of fun in themselves Smiley





   JLJac on May 10, 2017, 10:25:41 AM:

The issue with the teleportation option is that player 2 would be teleported like *all the time*, as you generally switch screens every 5-10 seconds - would be very hard to get flowing gameplay that way!

Ohh speaking of exploits, do you guys know the Guardian flashbang exploit? If any of you are speed runners I'd really like your input on that - I can as easily leave it in as take it out, but need to know what speedrunners prefer! Here's two ways I imagine you could think about it.

1) Take it out - it basically circumvents the entire game, and now that we've seen it there's not much more to add. It would be more interesting from a speedrun perspective to take it out so you actually have to play more of the game, and the people who found this exploit will be forever remembered in the hall of fame.

2) Leave it in - taking out exploits as they're discovered is cheap, speedrunning is all about finding those and if you find them the reward should be yours!







   jamesprimate on May 10, 2017, 10:47:56 AM:

personally, im all for keeping the exploits in. its kind of just a slightly more extreme version of what the game is all about anyway.

also the new slugcat modes will each introduce their own flavor of new challenges, so I think we're all about keeping the "standard mode" where its at right now for the most part, and if we want to adjust things for the new modes (which we'll be doing anyways) it just adds more playability imo.





   JLJac on May 11, 2017, 04:05:52 AM:

Thanks for the input! It looks like it's leaning "exploits stay"  Hand Thumbs Up Right Hand Thumbs Up Right

Update 536

I knew I said this wasn't going to be a content update, but I've not entirely been able to stick to that premise. Here's some kind of WIP lamprey-squito:






   jamesprimate on May 12, 2017, 09:10:49 AM:

yeah the speedruns are getting reeeeeeeally amazing  My Word!





   JLJac on May 13, 2017, 06:35:40 AM:

Update 537

Noodlefly joust!






   JLJac on May 13, 2017, 08:48:01 AM:

They're very dangerous but very unaggressive, is the idea. You really have to wrong them badly for them to extrude their creepy narwhal tooth, but once they do they're brutal. Also I think they'll hate each other, because it's a lot of fun watching them joust  Smiley

I'm trying to push harder on the "creatures that can be used to your advantage if you know what you're doing" concept, and these will have a role in that, although the details are still to be chiseled out. Because compiling has started to take a million years I've created a slim version of rain world in which I make the creatures, then I move them over to the main engine and integrate them with the ecosystem ~ these are still in step #1 there, so the exact interactions aren't set yet - but I have the basic idea!





   jamesprimate on May 13, 2017, 03:47:25 PM:

dont yall worry, joar has PLANS


HEY though! So glad to have the devlog back on track! Having to keep quiet to prevent spoilers for a year was really boring. This is much more fun.





   jamesprimate on May 14, 2017, 01:45:30 PM:

YEAH... we know, sorry  Cry

It has very little to do with us though. We sent in the patch code almost a month ago now, and there has just been issue after issue on the PS4 side. Its extremely frustrating, but the only thing we can do is just patiently go through the process until it works to make sure you all get a solid version out of it.





   JLJac on May 16, 2017, 11:48:21 AM:

Adult AI slugcats I don't wanna do, because it will look uncanny how different they move/behave from you when they're supposed to be the same creature. Slugcat pups we definitely want to do, and those will ofc be NPC ~ them being juvenile would explain them not being able to do everything you can.

Update 538

Speaking of kids, here's a noodlefly with its offspring:



The AI is pretty much done (it's pretty protective of the little ones) and I'm moving it over to the main build to set up the interactions with other creatures.





   jamesprimate on May 18, 2017, 11:15:10 PM:

this a good idea





   jamesprimate on May 19, 2017, 09:23:42 PM:

Is there more?

all i will say is "yes". one of the major points of the game (and to me the most significant part about it) is that you dont know the depth of the world and have to dig to pull it all together on your own, so i wont go too much into detail here. feel free to read the steam reviews by people who beat it (35-60hrs played) if youd like, they'll be a better barometer than asking us developers






   jamesprimate on May 25, 2017, 06:21:59 AM:

Rest in Peace Larynx the Scavenger. Gone but never forgotten:
https://steamcommunity.com/app/312520/discussions/0/1291817208481360253/





   jamesprimate on May 26, 2017, 09:44:36 AM:

newest version of the patch is tested and ready to go! barring any further nonsense (pleeeease) we expect it to be out on Tues Tongue


MUSIC NEWS!



The Rain World OST is now available on Apple Music, Spotify, iTunes, etc. Black Screen Records is also taking pre-orders for the deluxe vinyl edition, details of which will be announced later this year.

Cop it here on your fav music platform: http://smarturl.it/rainworldost





   jamesprimate on May 26, 2017, 03:26:10 PM:

AH! For clarification, I was talking about the PS4 patch! Responding to this:

Any news about the progress of the PS4 patch ? It's been one more week !

And that one just brings the PS4 version to parity with the current PC v1.015, with some huge added PS4-specific stability improvements.


But as soon as that goes out we'll start making official announcements about the timeline for the *new* update for PC! It just seemed wrong for us to be talking about the third update for the PC version before the PS4 even had one go through :/





   jamesprimate on May 26, 2017, 07:46:03 PM:


By the way, on an unrelated note, I'm working on an unofficial expansion with a couple of other people (though it's mostly just planning until we either have access to more tools such as the level editor or decide to try to forge our own way). We now have a Discord server, a sort of offshoot of the main one, which you can follow for updates, or even if you want to help with development: https://discord.gg/qS3ZedY


YO thats very very cool! I wont lie though, im intentionally *not* going to look at anything like that until we've wrapped up our own expansion plans, as i dont want to have that in my head even subconsciously (if that makes sense!)

But once we finish up our plans, we've discussed bringing the rain world level editor to steamworks and letting yall go wild with it. (and by "go wild" i mean "suffer the horrible tedium and instability that we did" lol) No timeline on that of course, but just letting you know that we're keeping yall in mind  Toast Right





   jamesprimate on May 27, 2017, 04:43:17 PM:

ahhh thank you thank you ! thats funny, im actually really good friends with Rich AKA Disasterpeace so for some reason its hard for me to think of my dude who i get weird pizza and watch seinfeld reruns with as being "my favorite soundtrack" or a huge musical influence, but theres no question that he is. to be honest, hes the person who suggested i do game music in the first place! so yeah, huge influence both from Rich's music and as a person. i owe him a ton. cheers to Rich! Toast Right


All of that was done in a single update...
Almost. I believe they were a day or so apart, one being v1.01 and the other 1.015, or the current verison


Yes! 1.01 was the update and 1.015 was to fix the stuff that we broke in 1.01, lol

How about a postmortem?

its not dead yet!!


So... WTF is Polybius? This is some of the most intense music I've ever heard.


Ahh! You are digging deep, haha. That was written early on, intended to be for the first Daddy encounter. Early on we had some vague ideas about Superstructure and the Leg where we'd have rooms seal off and you'd be stuck in them with some monstrosities until figuring out some puzzle or another, so I made some more traditionally scripted extreme horror music to go along with that. But that concept clashed a bit with the general concept of the game, so we quickly abandoned it. Now only remnants such as Polybius remain!







   jamesprimate on May 29, 2017, 01:54:18 PM:

GAME BREAKING BUG


When playing the Rain World, the game randomly freezes where I and any other creature cant move for no reason (but the "rain timer" keeps going)

This has happened to me countless of times, and it happened 3 times to me today

See Discussion on Steam: http://steamcommunity.com/app/312520/discussions/1/2741975115079713461/


Interesting! This is a new one. Joar has responded in the steam thread. We'll need some more info to proceed, so if you can give steps to reproduce as well as what your PC specs are (in the steam thread, not here) that would be very helpful for the diagnosis.

The grind continues!


If you're on PC, then unfortunately there won't be another update for awhile as far as I know. Hopefully the PS4 one is out tomorrow, though.

Not necessarily true. We have a big content update planned for the relatively near future, but if there are game breaking bugs that are fixable we can do minor bugfix updates pretty quickly without much fuss. Let's see if we can find it and fix it first though!





   jamesprimate on May 30, 2017, 10:46:58 PM:

After many long trials and tribulations... the Rain World PS4 v1.01 update is finally live! Details below!

Hello friends and slugcats! We present to you PS4 patch #1: Rain World v1.01

This patch is intended to accommodate some early player feedback and polish assorted rough edges on the various game systems, etc. These were all low-hanging fruit that we think improves the player experience without taking anything away from the concept of the game. Rain World should be an existential experience: unforgiving and even occasionally unfair. But it should be the jaws of a Lizard that gets you or the terrifying Rain, not some ragdoll physics wonk or design oversight!

This patch puts the PS4 version at parity with the current PC v1.015

Gameplay improvements:
* “stuck in holes” fix - disconnected exits will no longer snag you
* subtle backlit slugcat in low visibility swimming situations
* quicker turning around in tunnels
* larger lung capacity while swimming
* nerfed the more intense waterfalls in Shoreline to prevent repeated drownings
* more pearls near Scav tolls in Garbage Wastes
* more food in central Garbage Wastes
* more food in central Shaded Citadel
* more karma flowers in world
* karma gate requirements on the Shaded Citadel, Drainage System and Underhang side were lowered to prevent players becoming stuck in challenging regions
* food / karma flowers regeneration now ticks forward on deaths (helps eliminate stuck / starvation situations at low karma)
* players will now keep map progress between deaths (Id say 99.5% of people asked for this)
* map now features gate karma symbols and shelter icons when locations are discovered
* karma depletion on game exit removed if done within 30 seconds of sleep cycle
* full karma drop on exit bug fixed (that was a brutal one, sheesh!)
* intro cinematic is now skippable
* upon respawn after death, shelter doors cycle through opening animation faster
* many many minor room fixes

Stability improvements:
* Save file corruption fixed
* map loading bug fixed
* gate crashing bug fixed, as well as multiple other rare crashing bugs
* assorted additional stability improvements

Thanks for your patience!!
--RW Devs





   jamesprimate on June 04, 2017, 03:36:12 PM:

So, any news on the update?

nothing terribly new to report, im afraid! just doing the boring parts right now such as "making it all work together", placing the new bits, making sure the new bits dont break the old bits, etc.





   jamesprimate on June 07, 2017, 08:21:52 AM:

sadly, were in the "wait for things to come through from the publisher" holding pattern for the moment. but on the upside that just means there will be more content when it does happen! planning on making an official post this week detailing what we have so far





   JLJac on June 08, 2017, 03:51:14 AM:

Update 539

Ninja gecko lizards! My intention with these guys is that they'll be used to make life difficult for Red slugcat, but it's James who places creatures in the world so we'll see what happens. In either case, I think they have a lot of potential to be fun in multiplayer.



Jumping hasn't really been a thing for rain world creatures so far, because I couldn't sort it out with the path finding. Basically, once you open the pandoras box of jumping, pretty much every tile on the level is connected to pretty much every other, through the means of these really complicated parabolas. Was quite difficult to find a solution for that in terms of path finding.

My work around was this: From where the creature is, I follow its pathfinder around 5 or so tiles forward. This is a spot the creature can be expected to be in in about a second. At this position I plop down a "jump finder", which at a high frequency tries a bunch of random jump directions and velocities and traces out those parabolas with super simple physics.

It also keeps track of its "best jump so far". Every time it has a successful parabola (landing on actual terrain etc) it checks that landing spot against the "best so far". If the path finding weight is lower (closer to destination), this is the new best. Because it's very quick, it will pretty soon find some decent jump proposals.



Once the lizard reaches the jump finder, it checks whether the current best jump of that jump finder is valid and worth it (does it actually take me closer to my destination? Is it a reasonable jump arc and not a super high and narrow one that will bring me 3 tiles forward but take me on a 6 second rocket launch into the sky?). If so, it jumps!

When jumping it places a new jump finder on the expected landing location, which will be working during the air-time. With a bit of luck it will have found a new nice jump to be chained on immediately when landing.

Some more gifs!








   JLJac on June 09, 2017, 12:36:30 AM:

Does this mean that you're a little closer to possibly implementing Slugcat/Slugcat-like creatures in the future, now that jumping AI is implemented?

It wasn't about that specifically, that was more of a symptomatic thing ~ still wouldn't be able to make anything that looked remotely non-wonky. Scavengers are my honest attempt at a creature with sort of the slugcat moveset, for reference  Cheesy We want to do the pups at some point though!

Oh god I'm going to die so much to those things.

I'm 32 hours in and still haven't got to [SPOILER IMPORTANT CHARACTER/REGION] so I might still be playing by the time that that update hits.

Don't worry, we're very much steering clear of having the game come out more difficult after the update - rather the idea is that it will be a little easier. Or, to be clear, we will have 3 playable characters:

White - classic - not easier but a few quality of life improvements.
Yellow - this one will be easier. There are currently people who want to see the game but are unable to progress through it, which is a shame, so yellow will be a little milder in a bunch of ways.
Red - hardcore mode for hardcore players. This is probably mostly where the new horror critters will be used.

So don't worry if I post stuff that seems absolutely horrifying, we're aware that the game is quite challenging as is!





   JLJac on June 10, 2017, 02:39:02 PM:

Update 540

Dropwig!



This one is still WIP ~ the dropping in particular needs tuning to be dangerous while not being an insta-kill out of nowhere. Again this is stuff intended for Red. The dropwig is supposed to keep you always on your toes and never quite able to relax - every room is a potential danger and you need to be on your best game always!

The drop itself is supposed to be somewhat dangerous but avoidable with good reflexes. Once the dropwig is mobilized though, you have a quite dangerous predator on the floor next to you, and a situation that needs to be dealt with quickly. Although if you're playing Red it's assumed you're a pretty good spear thrower, and it shouldn't be too difficult to fight it off.






   jamesprimate on June 10, 2017, 05:30:46 PM:

SO GROSS





   JLJac on June 11, 2017, 06:48:42 AM:

Yeah sadly we're put a little bit on hold right now  Undecided We're trying to make the most of it though by continuously adding stuff so that when the update comes out it will be really cool. I've been adding creatures (some of which not announced) and it's a pretty good number now actually! Depending on how generous your definition, there are either 5 (with the most conservative definition) or 8 (if you're more forgiving and for example count adult needle worm and baby needle worm separately ~ which would make sense to do if you consider the lizard colors "different creatures" I think!) new creatures coming up, and a ton of other stuff as well, including the multiplayer/arena mode and the different playable slugcats. So I think the update will be pretty good! Here's to hoping we're allowed to move forward and get into QA etc soon!





   JLJac on June 12, 2017, 01:03:55 AM:

This is all James so you'll have to ask him, but it wouldn't be technically hard to throw in a couple of them in the easier modes just to Have Them Exist!

Update 541

...






   JLJac on June 12, 2017, 01:50:43 AM:

Mostly blue fruit is the idea, but yeah whatever item is attractive to creatures  Evil





   JLJac on June 13, 2017, 12:41:33 AM:

I'm very curious on the dropwig interaction with other creatures, like a white lizard or a bird, or even the nightmarish jump-crawler creature two pages ago.
Me too! Just taking it out of the incubator environment and into the real game and will start checking how the interactions play out.

@crankykong, trust me, when it's *somewhere* in a room and you aren't primed to look for it, it's not that easy to see at all! In the single player context you won't even know whether it is in a specific room or not, and have plenty of other things to worry about ~ so in the tests I've done it definitely seems surprising enough.

Actually the bait items are intended to be a little bit of a help to the player ~ from a lore perspective it's a "smart" thing for the bug to do, but from a gameplay perspective it's acting more like a help to the player. Like, "why is this item here, that seems out of place... ohhhh". The bug is heinous actually, so camouflage isn't really the main thing here - once you know where it is, you still have a real problem to deal with.

I'm here to throw my hat into the hardcore mode only legendary beasts crowd! And maybe even exploration mode only friendly beasts! Having the difficulties have a distinct playstyle flavor could be really cool!
I'm leaning this way myself and I think James is too, but having them exist in some optional corner of the world would add content to the experience essentially for no effort, which is hard to pass on! Listen to me, I've become all "content output per work hour" - I'm basically EA at this point  Shocked

@Manray as a matter of fact there's an unannounced creature that would fit into this category, and the needle worms are sort of there too! I agree that it tends to get a little predator heavy ~ which is because passive creatures by their nature have less interactions. To be EA again it's the same amount of effort but with basically nothing "happening" to the game, why they tend to not get as high a prio. In Rain World most critters are both predator and prey though, so the distinction is a little blurry! If you're talking about slugcat food sources in particular, a bunch of those have actually been added  Smiley





   jamesprimate on June 13, 2017, 04:38:47 AM:

this is all good discussion and things ive been pondering myself. my perspective is that theres no reason not to have some of the new creatures at least be *possible* to find, either through lineage or some out of the way rooms, in the easier modes. I certainly dont want all to be accessible from yellow and were not going to change the overall experience of white too much, but i think it would be cool that the knowledge one gains of the new creatures when playing through yellow and white would give you a big advantage experience-wise when going into red. if that all makes sense!


I'm very curious on the dropwig interaction with other creatures, like a white lizard or a bird, or even the nightmarish jump-crawler creature two pages ago.
Me too! Just taking it out of the incubator environment and into the real game and will start checking how the interactions play out.

@crankykong, trust me, when it's *somewhere* in a room and you aren't primed to look for it, it's not that easy to see at all! In the single player context you won't even know whether it is in a specific room or not, and have plenty of other things to worry about ~ so in the tests I've done it definitely seems surprising enough.

Actually the bait items are intended to be a little bit of a help to the player ~ from a lore perspective it's a "smart" thing for the bug to do, but from a gameplay perspective it's acting more like a help to the player. Like, "why is this item here, that seems out of place... ohhhh". The bug is heinous actually, so camouflage isn't really the main thing here - once you know where it is, you still have a real problem to deal with.

I'm here to throw my hat into the hardcore mode only legendary beasts crowd! And maybe even exploration mode only friendly beasts! Having the difficulties have a distinct playstyle flavor could be really cool!
I'm leaning this way myself and I think James is too, but having them exist in some optional corner of the world would add content to the experience essentially for no effort, which is hard to pass on! Listen to me, I've become all "content output per work hour" - I'm basically EA at this point  Shocked

@Manray as a matter of fact there's an unannounced creature that would fit into this category, and the needle worms are sort of there too! I agree that it tends to get a little predator heavy ~ which is because passive creatures by their nature have less interactions. To be EA again it's the same amount of effort but with basically nothing "happening" to the game, why they tend to not get as high a prio. In Rain World most critters are both predator and prey though, so the distinction is a little blurry! If you're talking about slugcat food sources in particular, a bunch of those have actually been added  Smiley





   JLJac on June 14, 2017, 04:08:57 AM:

Update 542

Bubble grass!



Don't know how or if James would like to use it, but the idea is that it could help smooth out the watery sections a little particularly for yellow.

It doesn't have an infinite use time but slowly depletes - how long that should take is to be subject to a bit of tuning.






   JLJac on June 16, 2017, 07:56:11 AM:

James was thinking along the same lines but I have to admit I actually discouraged it  Shrug We get into these feature creep loops where I add a a thing so James has to add a thing to mirror that thing, then I have to add a couple of things to make that stuff work, repeat and fade... And update already has plenty of good content so we want to get it out! Soo, while it's still up to James of course I don't think a new region is what will happen, but we're talking about some additions to the current regions.





   jamesprimate on June 16, 2017, 12:34:14 PM:

good question! actually thats one of the reasons that its going to take a bit of time is that we need to make sure that all this new stuff is thoroughly tested and rock solid compatible with old sav files. so short answer: yes





   jamesprimate on June 23, 2017, 03:17:35 PM:

ahahaha if you guys reverse engineer a level editor before we can even get this dang update out im going to laugh so hard

If it needs to be easier, you could even have it always increase when you survive a cycle, instead of just representing your highest living streak.

I'm confused. Isn't this what it does already? I mean, it only decreases by 1 when you die, it doesn't drop to zero. And I'd even argue that it does emphasize how you learn a region, because the karma requirement for each gate is carefully chosen so that you won't move on before you are ready to do so, forcing you to familiarize yourself with the surroundings and any new creatures and/or gimmicks in the area.

On an unrelated note, hmm... what's this?







   jamesprimate on June 24, 2017, 07:20:33 AM:

Lime Mime is AMAZING

Quote
By the way James/Joar, you asked a while ago if you could add stuff that might be of use to speedrunners. I have only one request. Fix that bug that randomly kills you in the Depths.

YES. top of the list. i hate that bug.





   jamesprimate on June 24, 2017, 11:54:22 AM:

you can delete the map in the options menu plus there are 3 save slots. you mean more options that than?





   jamesprimate on June 24, 2017, 01:14:45 PM:

So when I hover over the reset progress button, it says this will reset all progress except for map exploration.  Is there a way to reset map exploration as well?

ohhh wait... maybe joar changed that in one of the updates, good point. id still think that a new sav would give you a fresh map though. let me know if it doesnt and ill put that on the to do list!


Shouldn't this thread's icon be changed to "Done!", or is it still considered a WIP with all the user input constantly flooding in? p:

HA! Joar is not about messing with that stuff hahah, but yeah spot on. we still have a few updates until it'll be at a point where we feels its actually "done" to a degree that we're happy with.





   jamesprimate on June 25, 2017, 02:55:36 PM (Last Edit: June 25, 2017, 03:11:04 PM):

Yeah, just checked again.  Using the Reset Progress button does not clear the minimap.

hmmm are you playing the PS4 version or PC? we've got some version fractalization going on these days so just want to make sure O_____O


Got a bug to report. In both of Lime-Mime's 100% runs, he meets Moon for the first time while holding two neurons that he brought from pebbles, which he then gives her. However when he then goes to hibernate, the slide that shows up is the one of Moon being in pain. Despite that the overseer doesn't appear angry and keeps following slugcat as if nothing happened.

It first happenned here: https://youtu.be/SC1Rg20Amkg?t=2h07m25s
And it happenned again here: https://youtu.be/TNAz3KYd2pQ?t=1h58m2s

noted! ill send it to joar

Shouldn't this thread's icon be changed to "Done!", or is it still considered a WIP with all the user input constantly flooding in? p:
My guess is that some of the WIP elements are actually part of the original vision. If that is true then it's still not "done".
So the game was, shall we say... "late access"? Tongue


perpetual access! you know we can only do things our slow weird way, hahah


I was reading this excellent developer postmortem on TumbleSeed (a game I love but, like most users it seems, have never made it past the jungle) and I couldn't help but be reminded of Rain World. I would love to see a similar sort of thoughtful analysis from Joar and James on the reception of Rain World.

OOF those tumbleseed numbers are rough, sheesh. Shocked i assumed it was doing well based on the reception my friends gave it.

idk! were weird because to a certain extent... we never really cared about how it was received? it was never a product for us, so we probably dont have too much to say about it in that regard. like, if we were trying to make a game that we were designing for people to like, and this or that aspect didnt work out, then maybe we'd do some examination and finding out where we went wrong would be interesting to read.

but rain world was a sort of personal art project that we were super into for our own art weirdo / creative reasons, and then some other people got into it, and then it snowballed bigger and bigger into this amazing opportunity for us to just DO WHATEVER ART WE WANTED TO for years on end. incredible. our expectations were literally zero and we've gotten to live amazing lives for the past 5 years and met incredible friends and fans from all over the world. the fact that its already sold so well is still insane to me. but none of that was designed. objectively speaking, so much of the game is "extremely bad decisions" from any rational gamedev standpoint. we just thought they were cool and did them anyway. if it tanked we would have said "yep, that totally makes sense". it has all been pure self-indulgence.

so idk, if i were to any sort of "useful to the community" devtalk about rain world post mortem it would be just about tedious stuff like dealing with publishers and porting teams, various higher-level decision making stuff thats "important for success" and all super dry and boring and doesnt reflect our intentions or the spirit of what were doing. id so much rather talk about how cool the RW discord server is, or how wild and dedicated the fans are, the incredible fan art community, etc etc. we didnt make this weird ass emo game to throw it into a powerpoint presentation in front of a bunch of people in button up shirts, we made it to communicate some feelings through the aether; some emotion, some atmosphere, some mood, some certain sensibilities. so seeing the results of that is what im interested in at the end. but its probably not really helpful to anyone elses game making process!





   jamesprimate on June 25, 2017, 06:42:16 PM:

ah! i should probably explain that a bit more before it gets taken out of context.

the design decisions werent "bad" of course. they were exactly the right decisions for rain world. its just many dont make sense from a perspective of "gamedev as a business" (and even sometimes the perspective of "videogames as entertainment"). rain world is all about hidden depth, being unable to distinguish the barriers of the game, blurring that line of projecting into what you see and real AI behaviours, a world (and narrative) thats much larger than the player character experience, the surprise of discovering things that are totally outside your established frame of reference and perhaps even the frame of reference of other players, etc etc etc. but that also means that 90% of the development effort is spent on content that only maybe 2% of players will ever see. thats terrible ROI, lol.

and of course imo thats what makes it interesting! we were perfectly happy doing things that nobody else was foolish enough to do. anyway, ill get off this train of thought but thought it might shed a little light on some of our behaviours.





   jamesprimate on June 26, 2017, 07:37:26 PM:

Put differently, hoping that you'll see this as a sincere and good faith question, if you weren't prioritizing entertainment (acknowledging that entertainment takes different forms), what was guiding your process?

hm its a bit difficult to explain without going into a lot of detail and explanation about our personal design philosophies, but a short answer would be that we had a very clear sense of what we were trying to convey with the game, a "rainworld-ness" that we all agreed on very strongly, and achieving / communicating that was our only priority. things deemed "not rain world" were rarely considered.

theres a number of ingredients to this rainworld-ness, but much of it boils down to the desire to create a world-focus rather than a player-focus. games tend to be done in such a way that the entire world and everything in it exists only for the player. we wanted to move that frame a a little.





   jamesprimate on June 30, 2017, 04:15:33 PM:

huh! thats one ive never seen before. Joar, our programmer, is on vacation but I can have him take a look when he gets back.





   jamesprimate on July 05, 2017, 10:58:06 PM:

hahaha thanks friends! there will definitely be opportunities for beta testing coming up, so ill probably be taking you up on the offers!





   jamesprimate on July 10, 2017, 09:55:44 PM:

good question! they arent names at all really, but more describing the journey taken by each? the path of the original slugcat we follow was that of the survivor (its the default passage taken), so if it must have a designation then "The Survivor" would definitely be it!





   jamesprimate on July 12, 2017, 09:50:16 PM (Last Edit: July 13, 2017, 01:02:50 AM):

hmmm yeah the grey screen generally means that the world assets or setup options havent been loaded into RAM before startup. with certain computers (generally using win 7, though we havent been able to duplicate it on our side) it seems that the assets for the opening cinematic fills up the computers RAM, and as a result the world assets cant load, so grey screen. this is what joar added the "hold S" workaround for: it skips the opening cinematic and goes right to loading the world assets.

could you give more background on how this is occurring for you? have you been able to see the cinematic previously and start a new game? i only see loading from savs mentioned

and for the record, sav files contain most relevant debug information that we need





   jamesprimate on July 28, 2017, 04:37:36 PM:

Is there a date for the release of the next rain world update  because from what I see its building up as much hype as it did pre release and a lot of people are excited and want to play including me!   Hand Any Key CrazyHand Joystick

hey friends! ahh thats my fault im afraid. im dealing with some wrist injuries, so progress has been interrupted for a bit while i heal up. but things are still rolling on it and we'll post more info as things develop!





   jamesprimate on September 07, 2017, 05:39:19 PM:

Ahaha thanks all, both for the roasts and the boosts  Cheesy

Update is still going, and going well actually! It just takes a while since now everybody is working on other projects, as well as, you know, life, etc etc. (3 years of crunch is plenty, believe me!) But...we actually have a new hard deadline coming up soon though, so you will be seeing all manner of new things in the very near future.

I actually didnt realize this thread was still poppin (just assumed questions and such would have migrated to the steam forums or twitter, etc etc), so Ill try to stop by here more often!





   jamesprimate on September 08, 2017, 02:05:40 AM:

actually, since were here...






   jamesprimate on September 14, 2017, 07:17:55 AM:

I was thinking it would be awesome to have to unlock new arenas (0g or dark or water) by at least traveling to those places ingame.  Maybe you would also have to unlock the creatures in sandbox mode via killing them ingame.

we'll post more details soon, but its pretty much as you describe.





   jamesprimate on September 20, 2017, 05:08:34 AM:

How close are we to the update now, (or a general date) because its looking pretty close but I do know that just because it looks that way it might not be Shrug.
I am just really excited to share this amazing experience with my friends.
 Hand Any Key Lips Sealed Hand Joystick     Hand Any Key Screamy Hand Joystick      Hand Any Key Cheesy Hand Joystick    Facepalm

good question! we are nearing the end of the development aspect of it, with just a bit of art, testing and smoothing out the new "difficulty modes" yet to go. But an issue is that now Rain World is in 7 different languages, so there might be some time with localization before we can blast it out to steam. Fingers crossed though!


I was thinking it would be awesome to have to unlock new arenas (0g or dark or water) by at least traveling to those places ingame.  Maybe you would also have to unlock the creatures in sandbox mode via killing them ingame.
we'll post more details soon, but its pretty much as you describe.
Honestly, I think this is not the best way to do it. Multiplayer and singleplayer Rain World have different stakes and different pacing - they're almost two different games. And they fit two different audiences. By hiding multiplayer features behind singleplayer progression you would limit the enjoyment of people who would enjoy it the most. I think there should be an option to unlock all of the multiplayer stuff from the multiplayer itself, or people will just download everything-unlocked savefiles.

definitely a valid point, though we have our reasons (which imo will be pretty cool once they are discovered). i think with the sheer volume of multiplayer stuff were including, as well as the fact that it can all be unlocked in any difficulty mode, should be enough to mitigate any off-putting feelings on this. there will be a ton of playability just from the start, and honestly i think it would be pretty overwhelming if everything was included from the beginning.





   JLJac on October 29, 2017, 12:51:28 PM:

Hi! Sorry about the radio silence, I've been churning insanely on this update. Step by step Rain World is becoming closer to the vision, and an important part of that is of course multiplayer...



In the video you can see some of the new creatures as well! We made sure not to show anything that hasn't made its way to the internet already, but actually the update has a few completely unrevealed creatures as well.

Alright, back at it! We're quite close now, so it's maximum crunch. See you soon!





   JLJac on November 29, 2017, 02:36:46 PM:

Update beta now open on steam!

https://steamcommunity.com/app/312520/discussions/0/1489992713689642877

Check it check it check it!





   jamesprimate on December 01, 2017, 04:27:44 AM:

I’ve seen this! Looks very cool. Very ‘mushroom 11’ movement though, right?





   JLJac on December 13, 2018, 10:48:42 AM:

Hey, big news! We're on the Nintendo Switch Grin Grin Grin



 Hand Point Right Hand Point Right Hand Point Right Nintendo Page

 Blink Blink Blink New Trailer





   jamesprimate on December 16, 2018, 11:09:49 AM:

how could we!  so many years here, hah  Wizard





   jamesprimate on April 15, 2019, 08:35:16 PM:

yep, but its taking FOR-EV-ER

we have a new release candidate in testing right now, fingers crossed