Silly platformer demo where you spit on your enemies

Hi MonoGame people, I made a little game!

Most of the content was developed this month, and I’ll prolly continue to work on this, but this is what I have so far.

Check it out below and let me know what you think!

Thanks!

6 Likes

Looks great! Reminds me of Undertale.

1 Like

it’s true, i’m a big fan of undertale! :crazy_face:

Hello there. I really want to play it but i can’t. I have seen a video and the game looks pretty cool.

There is a crash report (i finded it in some folder). Please fix it if you can :pray:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
—> System.FormatException: Input string was not in a correct format.
at System.Number.ThrowOverflowOrFormatException(ParsingStatus status, TypeCode type)
at MyMonoGame.Factory.Parallax(Scene scene, ActorModel model) in C:\Users\zachi\Stuff\GameDevelopment\Projects\MyMonoGame\MyMonoGame\Scripts\Factories\Objects\Parallax.Factory.cs:line 14
— End of inner exception stack trace —
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at MyMonoGame.Scene.LoadActor(ActorModel model, Boolean single) in C:\Users\zachi\Stuff\GameDevelopment\Projects\MyMonoGame\MyMonoGame\Scripts\Scenes\Scene.cs:line 471
at MyMonoGame.Snow.Start() in C:\Users\zachi\Stuff\GameDevelopment\Projects\MyMonoGame\MyMonoGame\Scripts\Scenes\Snow\Snow.cs:line 65
at MyMonoGame.MyGame.UpdateScenes() in C:\Users\zachi\Stuff\GameDevelopment\Projects\MyMonoGame\MyMonoGame\Scripts\MyGame.cs:line 570
at MyMonoGame.MyGame.Update(GameTime gameTime) in C:\Users\zachi\Stuff\GameDevelopment\Projects\MyMonoGame\MyMonoGame\Scripts\MyGame.cs:line 369
at Microsoft.Xna.Framework.Game.DoUpdate(GameTime gameTime)
at Microsoft.Xna.Framework.Game.Run(GameRunBehavior runBehavior)
at MyMonoGame.Program.Main() in C:\Users\zachi\Stuff\GameDevelopment\Projects\MyMonoGame\MyMonoGame\Program.cs:line 16

1 Like

The same problem for me. :confused:

Without knowing the code, my guess is it’s related to numbers that use decimal point, versus operating system that uses comma (or the other way around). It’s a classic pitfall when parsing numbers from strings.

you’re awesome! thanks for not only reporting this to me, but going out of your way to find the crash report. I will look into it asap.

that was a pretty good hint! i don’t know if i would’ve ever thought of that :crazy_face:

yeah i’m parsing a a number with a decimal point from json here… it seems this scenario of parsing a number like this only comes up twice so it should be a really easy fix.

1 Like

okay it should be fixed, i hope it works now! try downloading version 0.0.5.

i’m only able to update the windows version right now. i’ll update the mac and linux versions when i get the chance.

Yes, it works! A cool game! Nice controls and a game mechanic. Music is so good too. I really want to see a full game version! Add more hardcore levels and challenges as extra contents. Nice job man.

P.S.
A game label does not work in my case
Can you reduce the size of the game?

yay i’m glad it works and more importantly that you liked it!

i’m not sure what you’re referring to with the “game label”. but i am looking into reducing the overall size of the download. all the music files are .wav (.wav is crazy big for some reason). i’d have converted them to .ogg by now, but out if the box monogame can’t play a song from any arbitrary position (for better song looping) and the only way i could find to implement it only works for wav files.

i was heavily “inspired” by one of the solutions here:

once i figure out how to loop .ogg files that should dramatically reduce the file size.

i’m not sure what you’re referring to with the “game label”

I mean a game shortcut in root folder. I ran a game through .exe file.

1 Like

Pretty nice overall, but here’s some stuff some I found. When my keyboard layout is set to Russian, ZXC keys stop working. Was playing on macos, dunno if Windows behaves the same way. At least in my games I don’t have this bug. Also, ZXC is a pretty weird layout. Space is usually the jump button with everything else assigned around it. Also the dive move is pretty clunky and underused in level design. It would feel way better if you could cancel the dive in mid-air, like in A Hat In Time.

Man, just use FMOD, WWISE, anything but monogame’s built-in sound engine. Pretend it doesn’t exist, forget about it.

maybe i should but i’m like 90% there already, i just need to figure out how do partial loops with .ogg files and i’m all set.

i looked into FMOD and WWISE and they’re both proprietary it seems so i’m not super interested. my main draw to monogame was that it’s open source, it would be a shame to slap a proprietary thing on top all the open source stuff i’m using.

Monogame already uses an evil proprietary shader compiler, so you’re already tainted. : D
If you’re almost done, then yeah, no reason to switch, but I don’t really see a reason not to look into it inthe future, considering the monogame’s alternative doesn’t even function properly half the time. Maybe there are some opensource audio engines but I don’t know about them.

Thanks! i appreciate the feedback.

That sucks, I have no idea how to test that… If what you’re pressing is sending a “Z” to the game then it should work?

My input system isn’t very complicated. It’s just a list of name, state. ex: (“Z”, “Released”)

    private static void UpdateKeyboard()
    {
        KeyboardState keyboardState = Keyboard.GetState();
        Keys[] currentKeys = keyboardState.GetPressedKeys();

        // Print whatever is being pressed.
        // if (currentKeys.Length > 0) Debug.WriteLine(currentKeys[0]);

        // Iterate over keys being pressed
        // Deal with "pressed" and "held."
        foreach (Keys key in currentKeys)
        {
            if (keyboardState.IsKeyDown(key))
            {
                // New Input
                if (!KeyStates.Any(i => i.Name == key.ToString()))
                {
                    KeyStates.Add(new InputState()
                    {
                        Name = key.ToString(),
                        State = InputStateType.Pressed
                    });
                }
                // Existing Input
                else
                {
                    foreach (InputState existingKey in KeyStates.Where(i => i.Name == key.ToString()))
                    {
                        existingKey.State = InputStateType.Held;
                    }
                }
            }
        }

        KeyStates = KeyStates.Where(i => i.State != InputStateType.Released).ToList();

        // Deal with "on released."
        foreach (InputState input in KeyStates)
        {
            // Current inputs aren't being pressed.
            if (!currentKeys.Any(k => k.ToString() == input.Name))
            {
                input.State = InputStateType.Released;
            }
        }
    }

To check if something is pressed it just looks for a name and a state.

public static bool IsPressed(string name) 
    => KeyStates.Any(k => k.Name == name && k.State == InputStateType.Pressed);

And this is for example how I would hardcode an input check. (In reality I’m doing something a little more complicated, but this is the gist.)

if (Input.IsPressed("Z"))
{
    // Jump
}

I checked Dustforce and Celeste and their action buttons default to to “ZXC”, so I guess it would hopefully make sense to someone who frequents these kinda desktop platformer games. There is an input config, so you can make it be whatever you want.

My intention was to make the player character feel a little clumsy, but I’m not opposed to trying that out. I do think my level design needs an upgrade though I agree.

It should, because we are operating with key codes instead of actual characters. I have already seen such bugs in some software where it listens to characters instead of key codes, so instead of getting ‘Z’ it gets ‘Я’ because the layout is set to russian.

Checked it on Windows and it all works fine. So it seems to be a macos-specific problem which means it’s gonna be pretty damn hard to fix. Probably something wrong in Monogame itself.

1 Like

thanks! the shortcut should actually work now

ah well can’t be perfect i guess lol, i mean i am typing this message on a windows machine…