[Comp G] The Great Train - A Bandits Run

edited in Online Competitions & Jams
Hi Guys!

I'm so happy that there's a new compo! They a good motivator to finish something.

Link to builds
Compo build v0.07
PC Download
build v0.05
Mac Download

Here's a picture of the quick idea on paper taken with my shitty phone camera.

How To Play:
Click to change direction of your rider.
Collect sheep to buy new guns and riders.
Hold down to shoot. Shoot enemies and things in the way.
Double Click to dig/dive. Dig under rocks or bombs, and to gain a little ground to get closer to enemies.

Win the game by defeating the Train Boss.

So It's a glorified SkiFree, I played this game a lot growing up.

The Great Train is actually a game I'm wanting to make that's far bigger than what I can handle at the moment. But I still want to think about and play around in the world it's set it because I think it's neat. So this is an attempt at making something small, finished and within my current skill level.

The Elevator pitch:
A 1 button cartoon western auto runner / shooter, where the only thing you can do is switch the direction you run in to navigate dangerous canyons and train routes.

Ideas
Player Interaction:
Switch move directions

Collectibles:
coin - buy different guns and characters / money sink
ammo - needed for player character to shoot down enemies and progress the level

Obstacles:
cactus - lose ammo , tumble for a second and then regain control
rock - death
skeletons - auto switch direction

Guns:
cause guns
Auto shoot when in range of enemies

Levels:
Designed random level gen. I've something similar in the passed with pure random spawning, and it wasn't fun.
Levels have a beginning, middle, boss section and end as described by my scribble in the sketch above.
boss sections repeat for x time or until dead, if you can't kill the boss in time he leaves and you run the same level again.

Bosses:
Barrel Master - Chucks barrels (moving obstacles) - weak against pistol.
Handcar bomber - Drops TNT sticks - weak against shotgun.
Train Bandit - Chucks TNT (timed explosions) - carriage door protection - weak against rifle.

Other half thoughts
Environment things that make for cool moments, equivalent of burning tree in SkiFree.

Here's my cube dude. If you can't tell he's a cowboy jumping up and down on his crocodile mount.
image

Here's the loop so far
image

I'll upload a link to a build as soon as I get the boss sections working.
Here's hoping the scope is small enough.

Comments

  • edited
    I've updated the OP with a link to the build.
    I wanted to get the health bars in but glad I got the bosses working anyway. I'm finding the TNT a bit strange, I like them as an Idea but they not working as well as I'd hoped. specifically on the train boss. I think its that they don't explode at the right time.
    image
    Here's a gameplay vid:
  • edited
    Update:

    Cool sound effects by @Mexicanopiumdog for a bunch of different things, and some not so killer stand in sounds by me.
    Also added the auto switch skeletons which are working quite nicely, I'm thinking of scattering a whole bunch more around to increase difficulty.

    Also had a thought now that the shooting is in, with making shooting only happen if you hold the button down, your move arc goes straighter but then shoots while down until out of ammo, or making reloading an the holding down action. Going to play with both.
    Thanked by 1Merrik
  • This is very cool! For some reason it reminded me of the running of the bulls that happens annually in Pamplona, Spain.

    It would be cool to ride one of those bulls and navigate it to bump some of those idiots... you know, just add some human intelligence to guide what we all know should really be happening at that event at a much more refined pace ;-P
  • edited
    Update:
    Shooting is manual now, by holding down you can start to empty your magazine on the enemy.
    Some more cool sounds and music by @Mexicanopiumdog.

    I played with a version of shooting that fires on every tap but seemed less interesting than the holding down.
    firing also has accuracy rating so you not guaranteed to hit the enemy with every shot

    Cacti now throw you in the air and disables your input for that time, I've made it easier by not changing your move direction that much when you hit one, because it was pretty difficult when it throws you into a random direction combined with the camera wobble.

    Thinking about some other pickups now that can augment things I have already like accuracy, damage, shooting range.

    Working on Checkpoint next.
    Thanked by 1dammit
  • Update:
    Checkpoint after getting to the new level, want to make this more of a spectacle when you get it.
    Some initial ground textures.
    Rock death
    Gap jump - thought it would be cool to try use the Cacti, so you avoid them until required.
    Added some leniency to the out of bounds hotboxes.

    Otherwise trying to fix some bugs where you hit the out of bounds boxes even though you inside, not sure if it could be caused by the temporary non-uniform scaling of the parents.

    Shout out to @Chippit Thanks for your advice on using the singleton pattern (about half way down) given almost 3years ago. Finally clicked and I'm using it for a bunch of things.

    Another Shout out to @Squidcor for teaching me some cool things during our Tips n Tricks.
    I didn't know you could store a reference to a Coroutine and stop them like this:

    public class A: MonoBehaviour
    {
        Coroutine routine;
    
        void SomeMethod()
        {
            if (routine != null)
            {
                StopCoroutine(routine);
            }    
            routine = StartCoroutine(TheRoutine());
        }
    
        IEnumerator TheRoutine()
        {	
            yield return null;
        }
    }


    Next I'm going to implement the concept of a currency (collected sheep) and then try and implement a very simple store to use it in, maybe for buying lives or the infamous Northern Pink Rider, with her trusty ostrich mount.
    Otherwise I think I've completed most of the features I set out to make. Then on to making another level and maybe some other doodads for movement opportunities, like vultures that fly above, almost like in level bosses that can be shot at to consume some of the ammo you collect.
  • This is interesting. I was under the impression that that was the only way to stop a Coroutine.
    If you were to say StopCoroutine(TheRoutine());, wouldn't it essentially first start that coroutine (again), and instantly stop it?
  • Awesome, I didn't know you could do that! Your game's looking great!
    Thanked by 1Pomb
  • @roguecode yeah, I was always just using StopAllCoroutines(); or the string argument version StopCoroutine("TheRoutine");
    @Elyaradine I know right!? Thank you.
  • I love how the screen view rotates when enemies are introduced!!

    The train boss is really cool variety, but would be nice to see more action before this,
    and of course more visual feedback when shooting at the enemy.

    So far looks the most like a fun game with character in the competition to me.
  • @Boysano hey thanks man.
    I also want more action! :D but also want to keep to the simple control scheme, thinking of some more interesting interactions to up the anti.
  • Update:
    image

    Made my first in game Shop! you can totally buy new riders. And although new riders don't do anything other than look different, a purchase loop is possible! You can also buy revival bottles, although revival isn't implemented it's next on the to do list.

    Also want to put in different kind of guns for purchase, but will require me to do some refactoring on how I'm handling my weapon class, I think weapons also need to be ScriptableObjects.

    Still not totally comfortable with ScriptableObjects but I'm using them to store shop items. also realizing that I need a way of saving what's been purchased for that session. Would totally suck if you played long enough to buy a rider worth 30 sheep, only to not have it next time you play.

    TODO:
    Saving purchase list. //Inventory
    Revival mechanic

    Wishlist:
    Vultures and any other environmental doodads I can think of to give more life to the world
    Dust particles
    Different weapons
    Mechanic change with different rider, thinking of modifying the movement for each rider.
    Mobile build :P pfft.
  • edited
    Update:
    Revival and Saving with a little bottle o dust.

    I've not really done much saving and loading before, only used for simple things in player prefs. Had a hard time figuring out how to store the purchased riders because they ScriptableObjects. Decided to give them an int ID and then store that, then check the store on load for anything that matches the stored IDs and put them back into the inventory. Seems straight forward now, but man I was having a hard time with that, Looked at some Unity Tutorials on persistence that helped me get to this:

    public void Save()
    {
        BinaryFormatter bf = new BinaryFormatter();
        FileStream file = File.Create(Application.persistentDataPath + "/PlayerInfo.dat");
    
        Debug.Log("saving player data to : " + Application.persistentDataPath + "/PlayerInfo.dat");
    
        PlayerData data = new PlayerData();
        data.currency = currency;
        data.lives = lives;
    
        foreach (ShopObject shopObject in ShopController.Instance.RiderPurchases)
        {
            data.riderPurchases.Add(shopObject.ID);
        }
    
        bf.Serialize(file, data);
        file.Close();    
    }
    
    public void Load()
    {
        if (File.Exists(Application.persistentDataPath + "/PlayerInfo.dat"))
        {
            BinaryFormatter bf = new BinaryFormatter();
            FileStream file = File.Open(Application.persistentDataPath + "/PlayerInfo.dat", FileMode.Open);
            PlayerData data = (PlayerData)bf.Deserialize(file);
            file.Close();
    
            foreach (int id in data.riderPurchases)
            {
                foreach (ShopObject shopObject in ShopController.Instance.StockList)
                {                
                    if (id == shopObject.ID)
                    {
                        ShopController.Instance.AddRiderToPurchasedList(shopObject);
                        Debug.Log(shopObject.GetTitle());
                    }                    
                }
            }
                
            currency = data.currency;
            lives = data.lives;
    
            ShopController.Instance.RefreshPurchases();
            MainMenuDialog.Instance.InitializeMenu();            
        }
    }


    Their tutorials really are easy to follow. It seems to be working fine, but my gut tells me there's something funny going on.

    Need to fix some bugs on the revival and shooting during a boss section. I can't seem to kill the Train boss. The Revival in general needs an overhaul. What I want is: for it to return you 2 seconds prior to death. Atm I have it saving positions every 2 seconds and then placing you back at the last saved position before death, which sometimes leads to you spawning in really bad positions.

    Next I want to work on different movement mechanics for each rider.
  • Comp build update:

    Don't really want to call it done, but this it is what it is, a bugfest mess. :P
    Lesson: when you set out to make something small, when the urge arises to add a feature, don't.

    Purchasable Weapons, different damages attack ranges and what not.
    Transitional level without a boss.
    Added an end to the game after the train boss.
    Loadout screen and inventory item picking.
    Generic settings options.
    Vultures!
    Made things Killable cactus / skeleton / sheep and Vultures
    Double click dig dash ability.
    Bunch of effects and random juice.

    Here's a video of what it plays like in the compo build:

  • I think its too late. Not sure if I am seeing straight but it looked like I saw a crazy amazing game being born in such a short time with such beautiful graphics, smooth gameplay and it looked addictive. Let me go sleep now rather :D
  • amazing work Paul :)

  • Thanks guys.
  • edited
    This is amazing! Love the feel you set up here from the first screenshot you posted. The little character animation and dust trails are amazeballs!

    Now because I want to see you take this further:
    - When I play I feel like perhaps the soul of what the game wants to be is getting a bit obscured by all the shiny features. I believe this could be a really fun game with just the turning mechanic exalted above all else, ala crossy road.
    - I didn't especially enjoy shooting, particularly because my angle is fixed and aiming is hard. Solutions I could imagine, one shot shield instead of bullets, or blast waves instead of bullets.
    - I found fun in trying to collect things. Sheep. Bullets, etc.
    - I found the contrast between canyon walls and floating platforms strange. Imagine this is unfinished? In particular digging to cross gaps was odd.
    - Even it feels nice, I didn't really enjoy digging because I couldn't predict where I would emerge. Felt like a curse rather than a power. Potential solutions: have fixed tunnel entrances in the terrain. Means you always know where you'll come out - also can be combined with difficult passages in the design. So now it rewards the player use of core mechanic, while still providing decision making. Maps well to jump pads for an extra free variant.
    - Didn't make it as far as the boss. Though curious to see what that is about ;)
  • edited
    @TheFuntastic Awe yeah thanks for the feedback. I totally agree with the things you've mentioned. The shooting hasn't felt 100% since I added it, but I do want to add something else to the generic avoidance mechanic.
    Haha, so digging tp pass the gap is a by product of hapdash adding extra mechanics after the fact, before you had to use the cacti to jump the gap which is a much stronger thing I feel because you avoid them and then opportunities arise that you need them, I quite like this as an idea, everything is useful, in a given situation. I may post compo, start a reduction build in which I pull features trying to get to the core fun bits you mentioned, because I agree. Thanks for playing.
    Thanked by 1TheFuntastic
  • Is v0.07 the final build for the deadline?
  • @Fengol, I'm afraid so.
  • This looked a whole lot easier in the vids :)

    Things I liked:
    * The art, juice etc.
    * The options available - store, players etc.

    What I didn't like:
    * The controls - I would have preferred a click-here-to-make-me-go-this-way mechanic. I found it frustrating to not be able to just move straight down. Also sometimes gave a sprint, without knowing why, which was confusing. To be honest, I didn't really spend a whole lot of time playing, so never mastered the controls, nor did I read any instructions, so all of this could be seen as just "beginner syndrome", but it just didn't feel intuitive to me. I should also note that I am a big fan of playing games with a controller, so this could be why I expected the controls to feel different.

    Well done on a great little game, your effort in creating this can be seen. Well done!!
Sign In or Register to comment.