Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411508 Posts in 69374 Topics- by 58430 Members - Latest Member: Jesse Webb

April 26, 2024, 10:36:22 AM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsProject Rain World
Pages: 1 ... 140 141 [142] 143 144 ... 367
Print
Author Topic: Project Rain World  (Read 1447184 times)
Christian
Level 10
*****



View Profile WWW
« Reply #2820 on: January 29, 2015, 08:31:45 AM »

New Tumblr post over at lifeofaslugcat.tumblr.com Smiley

Talking about how I envision the world, but doing a short bit of back-story first.
All fake, not true to the game as the Devs have intended. BUT, I made sure that you know that.

Anyway, have a read if you like lore and stuff like that.
http://lifeofaslugcat.tumblr.com/post/109492253910/the-big-picture
Ha, brilliant

Logged

Visit Indie Game Enthusiast or follow me @IG_Enthusiast to learn about the best new and upcoming indie games!
Goscalyon
Level 0
*

Programmer and Gamer


View Profile
« Reply #2821 on: January 29, 2015, 09:13:49 AM »

Dude this is insane, I love it Smiley.
I can't wait to see this released and finished.
Logged
chriswearly
Level 3
***


prince slugcat


View Profile
« Reply #2822 on: January 29, 2015, 10:01:34 AM »

New Tumblr post over at lifeofaslugcat.tumblr.com Smiley

Talking about how I envision the world, but doing a short bit of back-story first.
All fake, not true to the game as the Devs have intended. BUT, I made sure that you know that.

Anyway, have a read if you like lore and stuff like that.
http://lifeofaslugcat.tumblr.com/post/109492253910/the-big-picture
Ha, brilliant


Hehe, thanks Tongue There's gonna be lots of little easter eggs hidden all in the blog:PPPPP
Logged

Rojom
Level 0
***


View Profile
« Reply #2823 on: January 30, 2015, 07:00:52 AM »

I feel like the initial smoke color isn't dark enough. It's difficult to see the light smoke color against the light background. Right now it looks like thick dark lines just come out of nowhere, rather than flow out of the vulture's body.

Or maybe that's just me being color blind Crazy
Logged
gimymblert
Level 10
*****


The archivest master, leader of all documents


View Profile
« Reply #2824 on: January 30, 2015, 01:32:56 PM »

huh? the smoke is bright red  Durr...?
Logged

JLJac
Level 10
*****



View Profile
« Reply #2825 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
Logged
JLJac
Level 10
*****



View Profile
« Reply #2826 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.
Logged
Slader16
Level 8
***



View Profile
« Reply #2827 on: January 30, 2015, 09:32:49 PM »

Hey Joar, where should I start if I want to be as smart as you someday?  Who, Me?
Logged

gimymblert
Level 10
*****


The archivest master, leader of all documents


View Profile
« Reply #2828 on: January 31, 2015, 12:25:52 AM »

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
Logged

JLJac
Level 10
*****



View Profile
« Reply #2829 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.
Logged
gimymblert
Level 10
*****


The archivest master, leader of all documents


View Profile
« Reply #2830 on: February 02, 2015, 12:12:12 AM »

- distance map
You can try the keyword "distance field".
Basically assuming a solid tile
- any tile that is in direct contact with it get weighted with a max value,
- then any tile that is in contact with those tile get weight -1
- and you start again for every empty tile decreasing each iteration until all tile are weighted.
- once all tile are weighted you mark the top tile (tile who are surrounded with enough tiles with lesser weight) as top using hill climbing.

It has multiple property:
- you can path find and discriminate based on width weight (top tile have a weight too high in an area)
- you can "thin" a shape or volume to a skeleton (it's all the top tile), which can be useful to automatically place waypoints or bones for animation.
- for obstacle avoidance and terrain reasoning. For example you want your character to always stay within a certain distance of wall depending on its state.
- etc ...

more complex look at potential field who also encode direction.
IF you really want to have fun you can also look at spherical harmonics, zonal harmonics and circular harmonics which allow to encode surrounding variation in a single point (use in lighting mostly to encode variation of light around a single point) which is more data than a potential field with a single direction.
Logged

AxezDNyde
Level 0
**


View Profile
« Reply #2831 on: February 02, 2015, 12:47:53 AM »

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.

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.
Logged

Axez, Grant Ed.
JLJac
Level 10
*****



View Profile
« Reply #2832 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.
Logged
gimymblert
Level 10
*****


The archivest master, leader of all documents


View Profile
« Reply #2833 on: February 03, 2015, 08:57:03 PM »

you can add weight to the sky node connection so it's less desirable ... don't know how easy it might be with your code?

@map
Oh I add the description of potential map and spherical harmonics because I was geeking out AND maybe it would have inspired you Who, Me? I you hav'nt realize yet, you have state of the art ai and animations!
Direction I think you have that with the baked path, using djikstra if I remember, to pth and den, it basically is a flow map toward something, yes you can infer this with gradient but it can also be extra data for added pertubation or whatever use you cann find (wind, turbulence, etc ...). Spherical/circular harmonics is neat because let say you have a data that tells you how things vary around you. Let say you have a visibility map that store the degree by witch the tile is "open", it does not tell you which side so two tile with the same data but not the direction of visibility (which can be up or down). HOWEVER like you said it's useless in your case, the nature of the beast is that the data have smooth continuity through space, ie local data can effectively infer long distance data because if a tile have high visibility it's likely that the tile near it share similar quality through connection, therefore visibility have far reaching propagation. It's nice because it might help finding better way to do some stuff like AO by using this property! Ie voxelizing a space with something like octree (maybe more likely a variant) might be enough to infer AO instead of casting ray! Ao would accumulate at high frequencies tile (small) because they are in contact with objects and likely to be cramped, visibility therefore became easier to propagate (for example in cave vs opening). I wish I could try it now (finding ao by analysis of volumetric spatial frequencies) Sad damn /geeking out
« Last Edit: February 03, 2015, 09:13:49 PM by Gimym JIMBERT » Logged

JLJac
Level 10
*****



View Profile
« Reply #2834 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.
Logged
jamesprimate
Level 10
*****


wave emoji


View Profile WWW
« Reply #2835 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
Logged

Overman
Level 0
***


Kid Genius


View Profile WWW
« Reply #2836 on: February 04, 2015, 06:47:33 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
Congrarurations   Hand Thumbs Up Left Well, hello there!

A 142-page devlog... wow... wow... omg... wow...  Crazy

Will be keeping an "eye" on this project.  Blink
Logged

Genius game developer.
Me latest game: Rowan
http://www.overman-gaming.com
@OvermanGaming
Christian
Level 10
*****



View Profile WWW
« Reply #2837 on: February 04, 2015, 07:01:50 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
Congrats. Joan's excellent informative posts and mesmerizing GIFs make this devlog my favorite dev-related thing on the Internet. And that's counting here, other forums, Tumblrs, etc.
Logged

Visit Indie Game Enthusiast or follow me @IG_Enthusiast to learn about the best new and upcoming indie games!
gimymblert
Level 10
*****


The archivest master, leader of all documents


View Profile
« Reply #2838 on: February 04, 2015, 08:26:41 PM »

Good jobs, and well deserved, prepare for award to rain wo...  Ninja
Logged

Olsen
Level 1
*


somervillegame.com


View Profile WWW
« Reply #2839 on: February 04, 2015, 08:39:53 PM »

FINALLY caught up on this mammoth devlog and the KS updates.  This has some of the most endearing, connected animations I've seen in such a long time.  The flow of each little critter all feel unique even when the same character is being used.  The debug screens are mesmerising.  Great work.  Is there any other way I can back this now the KS is closed?
Logged

Pages: 1 ... 140 141 [142] 143 144 ... 367
Print
Jump to:  

Theme orange-lt created by panic