RKSanders

Members
  • Content count

    57
  • Joined

  • Last visited

Posts posted by RKSanders


  1. I have mostly been working on the round and ability systems. I gave the units inventories that hold items which can hold abilities. By default units are given a basic_move_item and and a basic_attack_item. That they can use to preform their action during the turn.

     

    When the AI move they try to get adjacent to the player. It got a bit tricky though and I had to break the movement phase up into two parts: the move queue phase and the move execute phase. I want the AI to avoid situations where it picks somewhere to move, but becomes blocked by a unit that moves there first. I also wanted the AI to execute all their move visuals at the same time. So In the move queue phase all the AI units pick a move, then each mover asks all it's friends where they plan on moving to and if it's the mover's target position, the mover picks a new position and does all that again. I figured it was worth doing because being able to query another unit's action will probably be useful for abilities.

    Spoiler

    02enemyMove.gif.72abfabd00d9c2b708f307f8bbc4feb1.gif

     

    I also set up wall prefabs. I did have to fiddle with pathfinding :/ (only a little bit though) because they're a bit different than what I normally do. My pathfinding grid is the size of a floor tile, so the walls are not actually on the grid. Instead they need to break the connection between the grid nodes of the floor. I use A* Pathfinding Project and the author Aron has a SetNodeConnection method that allows you to do this.

    Spoiler

    03WallsAndPathing.gif.44882debcb7b25b523e46dc49a0485e7.gif

     

    Basic attacks were pretty easy to set up after unit's could hold items. I added an ability phase that runs before the movement phases. Most abilities won't need to do the waiting stuff that the movement phase does. So I thought it was a good idea to simplify it in it's own phase. I also set up playing an animation when the ability is used as well as basic damage, health, and health bar stuff.

    Spoiler

    02Attacks.gif.0f58851abf9b695dc6ed2b0af191ff93.gif

    04Attacking.gif.d9b5733357b6c97975655d23c4ffcc41.gif

     

    I'm pretty much ready to add items that can be picked up and their abilities. I expect all the unique abilities to be the most difficult part but hopefully the ability system I made will be a good base. I might start doing some visuals soon to mix things up.


  2. On 1/3/2020 at 10:45 PM, Travis said:

    I, for one, love the durability in Breath of the Wild. Maybe I'm weird. This sounds like a cool idea!

    I liked the BotW system too. It made me try new weapon types and think about what weapons I was carrying. I always kept a fire sword for the cold and a hammer for busting open rocks in my inventory.

     

    On 1/4/2020 at 4:01 AM, Sloane said:

    Ah, I remember that discussion. Sounds good!

     

    I like item durability in some games / genres (System Shock, for example, would have been a decent fit for Prey, too) but, yeah, in others it's just an annoyance.

    Nice, I tried to find that convo again yesterday but couldn't. I wanted to look up the games that were talked about. So i'll check out what System Shock and Prey did again.

     

    I think in my game I'll have each level spawn some items on the ground with a set of random abilities. The player can hold five items, with only one being active (meaning it's abilities will take effect), and items break after 1 - 3 uses. To get to the next level you have break 3 items for the exit to unlock.

     

    Some ability ideas:

    • Lose/Gain an ability with each durability loss
    • Lose durability each turn
    • Lose durability on move
    • Charges the gate an extra time when item breaks
    • Stuns enemy
    • Pushes enemy away
    • Repairs another item when this item is destroyed
    • Parry - ignore damage from first enemy attack in this turn
    • Block - damage taken while this item is active will damage the item instead
    • Counter Attack- first attack made against user causes damage to attacker
    • Back stab - move to tile behind enemy, does x2 damage
    • Cleave - Damages adjacent enemies but takes durability loss for each enemy hit
    • Cursed - blocks adding new item to inventory slot till end of level

     

    For the visuals I'm going to try something similar to Alrin Ortiz  interior dungeons. I really like the screen printed look and how simplified the tiles are.

    Spoiler

     

    arlin_3.thumb.jpg.e735b392b58d5297f536cf0905cf490e.jpg

    arlin_4.thumb.jpg.4a7b6722d2b104c113738d2052862645.jpg

    arlin_2.thumb.jpg.c6752867cbcc5fb5193bf51d10594cd9.jpg

     

     


  3. Update - jam version here: https://rks.itch.io/decrepit-wizjam10

     

    I'm starting this one a bit early because I'll be out of the country from the 18th - 25th.

     

    I'm going to make a simple Rogue-like/Brough-like that centers around item durability. The inspiration comes from the Nick Breckon patreon discord. I requested he play a game called Cinco Paus by Michael Brough because I had been thinking about its game design a lot at the time. I like how it took the idea of item discovery and turned it into the game's core idea. Around the same time some folks on the discord were discussing item durability and how it's almost always a terrible mechanic. So for this entry I'm going to attempt to make a game with item durability that's less terrible.

     

    I couldn't find a podcast title that really fit the game itself. So i'll just say this is my GOOD... BYE to Wizard Jam and what Idle Thumbs was.

     

    I'm working in Unity and I'm going to start with a code base I've been building for years now, because it significantly speeds up my prototyping process. It has stuff I always seem to need like: database management, object pooling, pathfinding, saving, etc. So i'll definitely have a huge head start with this, but I just want to work on the parts unique to this game and not fiddle with the more generic stuff like pathfinding.

     

    I started work on it yesterday. I got a player unit spawned and user inputs that make it move with WASD. The unit's movement is also validated to only allow it to move over a floor tile.

    Spoiler

    basicMove.gif.0189f1dcb2c150d114fc8ae633ecad59.gif

     


  4. Ah, I thought you might just use a channel value in the physics map, like say red 255. But I don't know how you could calculate a collision normal (without a normal map) from that to make the ball reflect. So having collision objects sounds like a good idea.

     

    If you do need a more optimized search method here's a simple generic quad tree script I love using: 

    https://pastebin.com/WUjCytRj

     

    It can be used by putting the following in your tree script for example:

    Spoiler
    
    public class Tree {
        public static GenericQuadtree<Tree> Quadtree = new GenericQuadtree<Tree>();
        System.Collections.Generic.LinkedListNode<Tree> quadtreeNode;
    
        void OnEnable() {
            //Register this object in the quadtree
            quadtreeNode = Quadtree.Insert(this);
        }
    
        void OnDisable() {
            //Unregister from quadtree
            if (quadtreeNode != null) {
                Quadtree.Remove(quadtreeNode);
                quadtreeNode = null;
            }
        }
    }

     

     

    And something like this where you want to test for collision e.g. ball script:

    Spoiler
    
    public class GolfBall {
    
        void CheckTreeCollision() {
            var allCollisions = new System.Collections.Generic.List<Tree>();
    
            Tree[] allTrees = SomeMethodThatGetsAllTheTrees();
            Vector2 ballPos = new Vector2(ball.position.x, ball.position.z);
    
            for (int i = 0; i < allTrees.Length; i++) {
                Tree tree = allTrees[i];
                float treeRadius = tree.radius;
                Tree.Quadtree.Query(ballPos, treeRadius, allCollisions);
            }
    
            //If the ball was within the tree's radius, that tree will now by in the allCollisions list.
        }
    }

     

     


  5. 18 hours ago, brendonsmall said:

     

    Yes indeed. I ran some tests, and have successfully loaded some test course holes from within the build's directory. I can't find a way to include a separate folder with the build, though. But building the jam version with holes in the resources folder will work for now. if you have any build command or similar "hey also include this within the _Data folder" tips or links, I would love to give it a go as well.

     

    In your project create the directory "Assets/StreamingAssets/". From there you can put any child hierarchy you want like "Assets/StreamingAssets/_Data/". Then you can access that directory with this property + your local path:

    Application.streamingAssetsPath + "/_Data"

    Anything in the streaming assets folder will be copied to your game build inside: ".../game_Data/StreamingAssets/".

    (more info here)

     

    You could stop here and require the player to also save their courses in this directory. However, that means if you update the game, the user would have to do some work to get their courses in the updated version. E.g. coping their courses out of the old versions folder into the new version. So, I think separating player courses from the game build folder is preferable. You could do this by using the 'Application.persistentDataPath' property. 

     Application.persistentDataPath + "/_Data"

    Which is a path specific to the users OS that doesn't change with game updates. On Windows it would be something like: "%userprofile%\AppData\LocalLow\<companyname>\<productname>\_Data\". 

     

    Hope this helps!

     

     


  6. 22 hours ago, brendonsmall said:

    the jam course will probably live in the build's Resources folder until I can figure out a better idea for "runtime" hole editing.

    Does that mean you're using Unity? If so it's pretty easy to load from a relative folder from within your application directory, which will also be built and distributed with your game.


  7. Glad you like it!

     

    On 8/2/2019 at 11:59 AM, Henke said:

    It certainly requires a lot of patience to master the controls and make any progress

    Yea, there's definitely some techniques that make climbing easier.

     

    On 8/2/2019 at 11:59 AM, Henke said:

    Also, that sequence with the treasure, holy shit what a plot twist

    Haha, I think you were the first to find it. I'm glad Nick got to it on the stream so other people could see it.

     

     

    On 7/29/2019 at 6:46 AM, atte said:

    The analog movement feels nice but having both lean and up/down on the same stick makes it hard to lean without accidentally moving up/down (and vice versa). Maybe separate sticks for those

    I added an option to switch leaning to the right stick. You can enable in the tilde menu > Options > Control Layout B. I like that it's an option but I don't think I'll use with it. It feels a bit like patting your head while rubbing your stomach to me, but it's probably because I've put in a lot of hours playing it the other way.


  8. 3 hours ago, atte said:

    The new visuals are lookin very very good! Thanks also for taking the time to do these in-depth posts.


    I just tried it again now with a controller. The analog movement feels nice but having both lean and up/down on the same stick makes it hard to lean without accidentally moving up/down (and vice versa). Maybe separate sticks for those (and then the side switch on a shoulder button so don't have to move your right thumb away from stick)?

    Thanks, it was fun to jam with everyone!

     

    I think you're right about changing leaning to the right stick. It would also provide a full 360 degree moving of the center of mass, which would be nice (right now it's just directly +/- X axis from your character). I'll definitely put that in some time soon!


  9. I've also been working on some environment art. I started replacing the basic blocks that make up the level with some more organic rocky shaped meshes. It added a surprising amount of variety to the climbing mechanics. It makes your footholds harder to find and you have to react more to the bounce and balance.

     

    rock_models.PNG.7cdc53f45d61e092e6ab6e035cab7a26.PNGenvironment_03.png.d76be5c84e66b3664debcd958c916bf3.png

    Also a cave background mesh.

    cave_model.PNG.c83df08ff6da5e9025d51ed23b56888e.PNG

     

    environment.png.0ac69aa30fc8132d694bda2aff41f841.pngenvironment_02.png.8a09769bd5e39f20dc3635d00291239b.png

     

    I used a tri-planar shader for everything so I can skip making UVs and keep clashing geo together but not get z-fighting.

     

    rock_shader.gif.ef6ae61a101d0851dcce00e14ff813b5.gif

     

    For the past couple years I've been using Photoshop's cutout filter to make textures. It's a real quick way to get simplified, angler, shapes. I run it a couple of times on frame 2 and 5. It also works really well on photos of different materials like concrete. That's what the texture is on frame 7.

     

    rock_texture_wip.gif.8b6668494953722d8da655f2449cb9b6.gifcutout_filter.gif.7f4c2fd9df722c5a860146b7f471f526.gif

     

    I added some small details like dirt particles that spawn when you touch the bricks and some lanterns that can move.

    rock_particles.gif.386b70c752a7d953869f6cf1922b7096.giflight_physics.gif.7dc1006da52752e9cc2195ae7c3592b4.gif

     


  10. Thanks everyone! 

     

    20 hours ago, phill said:

    The difference between the initial gifs and once you got the animation going is night and day

    Yea it was really surprising how much it improved the game feel. Especially the leaning animations because there wasn't any feedback for the shifting of mass.

     

    8 hours ago, z_bill said:

    I think there's a certain breed of streamer that loves Getting Over It and similar games so you should make it as hard as possible!

     

    Yea I agree,  this type of game can get a lot of attention from streamers and that's still a really great way to drive sales. I've found the toughest thing so far has been to make sure falling doesn't feel 'cheap'. Mostly trying to make sure the physics can't freak out and shoot you off when it doesn't feel warranted.

     

    I've been working on this a few hours each night but I've been too lazy to post updates. I've made quite a few changes to the physics stuff. I added raycasting to the ends of the pole that prevent you from moving into colliders which stops clipping issues like this:

    collisionClipping.gif.3fd5bad311986380b14c831f51f8b8d6.gif

     

    I also set up physics materials on everything. In general I made the character/ pole more bouncy and slick. Previously when you fell the character would pretty much come to a complete stop when you touched the ground. Now it's much more dependent on positioning your self correctly to stop your momentum after a fall. 

    bouncy_physics.gif.9936b520ed8b012f75ec4ef2752f2aab.gif

     

    There are also some new movement mechanics. You can do a little butt hop when the body is on the ground and you move to the bottom end of the pole. There is also a double jump when you jump off the end of the pole which gives you extra jump height.

    butt_hop_01.gif.f221de8a99f3dd39bc8084fd6115e3f0.gifdoubleJump.gif.3265b3582b00b55d772412ff50359c10.gif

     

     


  11. On 7/20/2019 at 6:33 PM, theschap said:

    This looks super fun to work on. I imagine you will discover all sorts of crazy techniques as you build out the level with those movement mechanics. 

     

    Yea, working on the level is really relaxing. It's just clashing stuff together and seeing if I can get up it and if it adds something new. Here's probably the wildest thing I've found so far. The friction and center of mass is just right to let this happen:

    maneuver_01.gif.381442ff118e9d9433ed253a8f0d2bd0.gif


  12. Updated to v0.6 in original post.

     

     

    Character animations!

    new_animations_01.gif.2a59c6849a0facecddc54ffeec4580a6.gif

     

    For awhile, I wasn't sure if I wanted to make the character humanoid or not. But the allure of being able to make a 3D-Mario style pole climbing animation was too strong. I knew I would need to use root motion to make the climbing look right. Which was not how the character controller was currently set up. Adding root motion would make the character move in chunks rather than sliding smoothly and I wasn't sure how much that would mess with the game feel. I liked how you could inch slowly towards the ledge of a gap to maximize your jump distance and I didn't want to loose that.

     

    root_motion_compare.gif.e2c291157e042c2b893545ee4f118a0e.gif

     

    I tried to move quickly through the modeling, rigging, and animation process in case I still wanted to ditch the humanoid. I only focused on body proportions for the character's mesh. I'm still not sure what kind of art style to go with. I've been interested in trying something like Toad Treasure Tracker. It would fit will with the Mario climb and they have some cool looking world space shaders that would work well with how I've just clashed boxes together to create the level.

    rig.PNG.01fca1f6c553c65db1f2c92c11252d4b.PNG

     

     

    There are a few different visual states the controller can be in: Idle, Climbing up, and Jumping. For switching sides I just rotate the character controller 180 degrees and seems fine to skip having any animations for that.

    amc.PNG.0a1d4efa4eb2d765626aeb21d4c48a22.PNGamc_leanblend.PNG.409e0fa7b33ff73bae579177e227352e.PNG

     

    The idle and leaning animations are basically just 1 frame poses. I used a blend tree, driven by the player lean input (movement.x aka left/right on joystick), to smooth out the transitions.

    lean_blend_01.gif.3d01c88ed25f44cac597ec58170209a9.gif

     

    After the animations were done and hooked up in the animator controller. It took a few code adjustments to work with the root motion. Mostly just disabling the parts that translated the character upwards, but I also had to rework how I restricted the character's max translation so it doesn't move past the top or bottom of the pole. I went with a kind of gross, but quick, fix to just clamp the character's position within the pole's height range at the end of every frame.

     

    With that root motion was working and. . . it was terrible LoL. Like I feared it completely lost the movement fidelity. There were also some other bugs introduced. Like when you jump it figures out the force to apply by looking at the characters delta speed along the pole. So if you build up some momentum on the pole you can jump further. But I didn't cap the force by some max value and now, being animation driven, the delta is much much higher.

    highjump.gif.670c85568f114ed0d46c80568f4e4d0e.gif

     

    While fixing this problem it hit me the that simplest way to fix the movement problem was to just make some slower animations and blend between them. It wouldn't work with keyboard inputs but like Team Meat says "A gamepad isn't required, but neither is bathing." So screw it. I was quickly able to duplicate the animations in Maya and adjust the root movement. I also made a few tweaks like not making the arms and legs extend so much. And it worked pretty well. You can still inch forward in the game but also rapidly ascend when you're trying to get up a wall.

     

    climb_blend.gif.8def5597591bf2bb39e5f33e535eef22.gifamc_climbblend.PNG.51a1cd395dacc4a861affef51ace992b.PNG

     

    I also added some cheats to get around the level. Right now they're manually placed points you can teleport to. If you're interested you can used them by pressing: '`' (tilde key) > cheats > and type in :

    Spoiler

    imababygamer

     

    Note: after you use select one you can just use the reset button to warp you back there again.