—    —  Home

   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!