—    —  Home

   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.