fictions 2019-10-07 07:02
Congratulation on your first jam :D Running was my best option in that game xD But when you skip the first weapon you never get the other one xD But hey... I saved the princess. Hope you had fun making this game :D
Foon → Ludum Dare Explorer → LD45 → Cuber
By banksho
| Category | Rank | Score | Count | |
|---|---|---|---|---|
| Overall | 1089 | 2.56 | 25 | |
| Fun | 1040 | 2.52 | 25 | |
| Innovation | 1107 | 2.06 | 24 | |
| Theme | 1001 | 2.60 | 25 | |
| Audio | 2 | |||
| Humor | 751 | 2.29 | 24 | |
| Mood | 1030 | 2.38 | 24 |
Congratulation on your first jam :D Running was my best option in that game xD But when you skip the first weapon you never get the other one xD But hey... I saved the princess. Hope you had fun making this game :D
This is a great first project for a game jam! There are some bugs I ran into. Mostly the only one that stuck out to me was the getting stuck on terrain.
All in all, great job and keep up the good work! Hopefully see you back for LD46!
The game is really cool, but a bit more animation and particles woul be cool
The game was cool, but i felt lack of feedback, i would put more animations and impact, to help me know if i'm getting hit or not for example, by the way, it is a nice game for your first jam! good job :heart:
@fictions @chambre19 @nachtwitch @ds-nahogara Thank you for the feedbabck everyone! It's nice to hear that my game was atleast nice. I was hoping it wouldn't be too terrible. It looks like it definitely needed more feedback such as animations and particles, and those bugs were quite annoying. I am going to try my best to get better for LD46. I'm excited to see you all there again! If you wouldn't mind giving me some advice back, I would appreciate that a lot. :smiley:
Nice game! I really like fighting with the enemy! :) This game should be taken ahead by the devs, it has potential!
"Impressive game, Very cool concepts. I left wishing that there is more. Had a lot of fun "
Nice game with potential.
Fun game to play keep it up
Good job the games alot of fun to play
For a first jam entry - what's important is - it mostly works!
It kinda works and at one point i almost had fun. a little feedback from the hits, a wider camera angle and this could be a pretty decent entry.
GG for your first jam. Nice graphics (no kidding). Thank you for your game
Great first project for a jam! I really loved your movement controls. They were very responsive and fluid, exactly what I would expect. Your jumping, however, was fairly hit or miss and the hit registration was kind of off. Some notes for future projects would be to make it more obvious when the player or an enemy has been hit, maybe like a little red flash. You also might want to increase the fov on the camera a bit, and the most important thing in game design is to test everything constantly.
Thank you for the feedback everyone! I definitely see what can and needs to be changed for my games, and will make sure to apply that for later games and jams! I had a lot of fun making this game and it was a great experience getting feedback from everyone. Thank you all!
@bip Thank you especially for giving the very detailed comment. I reallly appreciate it :smile:
Music and sound effects were great and the graphics were good too, although things like the door and the grey of the cubes didn't completely go with the rest.
The controls were a bit tricky and the jump didn't always work so it was hard to get far in the game. Also, I found it strange that the player cube had to jump over the gaps but the enemies would glide right over them - seems a little unfair if you ask me ;) But overall this was great for your first jam, so well done!
Fine first jam game. Sadly I was unable to complete it as I could never seem to get across the world without my jump failing at some point. :slight_frown:
Anyways, as this is just a first game, I don't want to be too harsh. So these points of feedback are meant to just be pretty commonplace advice that are relevant to this game. - It is very important for enemies to have some indication that they are going to attack you. This gives the player a chance to dodge enemies. I was actually more or less unable to fight the enemies in your game as I couldn't figure out a way to do it without being hit myself. - Other than that, player feedback in general--i.e. indications to the player that things are happening--is very important. This includes particle effects, animations, sounds, that happen when you attack, or take damage, or anything else, really. Many first-game-jam-games don't have great player feedback, so this is a pretty commonplace piece of advice. - I say this every time I see it: in my opinion, mixing pixel art resolutions is almost always a bad idea. There are a lot of schools of thought on pixel art: whether you should rotate it, whether everything should be pixel-perfect, etc, but in general I think the simplest possible improvement to all pixel art is to make sure that it is all drawn at the same resolution. For example, the player character in your game has much larger pixels than the ground tiles, which looks a little off. If they had the same size of pixels the game would look more consistent.
Here's something though: the player movement in this game does feel pretty good. The player accelerates and decelerates quickly but not instantaneously, which is generally a good feel for characters that are meant to be very responsive. And the jumping feels good (when it works), although it could potentially be improved with variable jump height.
Anyways, hope you had fun and will participate again. :thumbsup:
@honey-pony Hello. Thank you for your very detailed review on my game - I really appreciate it.
I am definitely aware of some of what you mentioned already, such as the jumping not always working and needing feedback for the game.
However, I still had some questions or misunderstandings on what you said. For one, what exactly do you mean by not mixing the pixel art resolutions? I get the idea, but I'm a little confused about some stuff. For example, what should you do if you need a certain pixel art sprite to be bigger (have more pixels for more detail) than the other? For me, a lot more detail was needed for the ground than the player. The player was a 16x16, and the ground was 32x32.
I am also interested to hear your opinion on whether you should rotate or create a whole new sprite for a character. In my game, I just made two different sprites, one for looking left and one for looking right. I just switched between the two depending on the direction of the player. Do you think rotating the sprite could’ve been better? Or maybe some other method I’m not sure of?
I feel like there is a lot of stuff in the game that had the opportunity to be better, but I’m not sure how I could even go about doing it. Like, I’m not sure how to make the enemies indicate when they will attack. Whatever I did, it seemed like it would apply damage to the player right away, instead of waiting until the animation is complete. So I’m not sure how to make some indication of an enemy attack if I couldn’t even figure that out.
@banksho
What I mean by mixing pixel art resolutions is pretty simple: despite the fact that you want less detail on the player, you should still make sure that it has the same size pixels as the ground. I guess "resolution" might be the wrong term for this. It's really just that, in my opinion (you're free to disagree!), every 'pixel' in your game should be the same size. So if one object in your game is 2x wider and 3x taller than another object, it should have 2x the pixels horizontally and 3x vertically.
This is how pixel art naturally works on e.g. old game consoles: if you look at any old NES game, all the pixels will be the same size.
Other examples include games like Celeste.
Or, just to be absolutely clear, I made an example: pixel_art_scaling.png
Your game is similar to the image on the left. I advocate art like the image on the right. This can be done either by drawing your player character in a higher resolution, or by drawing everything else in a lower resolution. My game this jam I drew my player in a pretty darn small resolution, which resulted in the tiles in my game only being 4x4 pixels. I actually added detail to them by having a whole bunch of variations of each tile.
Again, there's no rule against art like on the left. But art like on the right is just much more consistent.
As far as sprite rotation: what I meant is specifically relevant to how your player sprite is rotated during the attack animation. For simply changing directions, flipping the player sprite horizontally is a great technique that saves time (that's what I did this very game jam!). If you have a character that's particularly asymmetrical you may want to draw two sets of animations, one for each direction, but for a game jam that's not super important.
So, when I talk about sprite rotation, I mean when your player attacks, the whole sprite is rotated in a way that it is no longer aligned to a pixel grid. Basically, there are a few (purely aesthetic!) options related to rotating pixel art. It's completely fine to rotate pixel art, but depending on the aesthetic you want, you may want to change how your rotations work so that they are more "pixel-perfect": i.e. instead of having a square pixel that is pointed at a 45 degree angle, all your pixels are still axis-aligned but they represent a rotated sprite. This is something I experimented with this game jam and I think it looks pretty good, but again, it's 100% up to your tastes, and in my personal opinion, much less important than having all pixels be the same size.
Here's an example: rotating_pixel_art_example.png
Your game does the thing on the left. My game does the thing on the right. From this image it isn't obvious why you'd prefer the thing on the right, and I must admit that for *static* sprites it looks pretty bad. I think it looks okay in my game because it always happens during a continuous rotation. I have previously made games that used the technique on the left instead, and I want to be clear that I definitely think that's legit. I'm just trying to let you know of the options. :smile:
So yeah, I noticed that your enemies do have something of an attack animation, but they apply damage basically as soon as you touch them. You definitely want to change it so that your enemies only actually do damage to the player at some point during their attack animation. There are many, many ways to do this, varying by game engine. One way is to create a timer that is set to 0 at the beginning of the attack animation and incremented by delta time every tick, and then once the timer reaches a certain point, that's when you perform your damage.
I'm not sure if it helps, but [here's](https://github.com/HoneyPony/sandbox-ctf/blob/master/item_pickup.gd#L54) a place I did this in my own Ludum Dare game. The 'anim' variable is the animation timer, and once it reaches one second ('anim > 1') the game performs an action (in this case, removing the object performing the animation).
Okay, I ran out of space in my last comment. If there's anything else you'd like clarified I can try. :smile:
Actually I did want to mention: for the example of animation I gave at the very end of my comment, you can see that I'm doing `anim += dt * 2`. This is actually because this was a cheap way to speed the animation up by 2x. Usually I would just do `anim += dt`.
@honey-pony
WOW WOW WOW!
Thank you so so much for these very detailed explanations. I REALLY appreciate you putting the time and effort to help me, even going so far as to make sprite examples! I have a grasp of what you're saying, and I will try to apply it to my future games :smile:
Anyways, if you don't mind me asking a couple more questions, I would greatly appreciate that.
First of all, I'm a little confused about the whole rotating the sprite for the attack animation. I see what you mean (at least I think I do) of making a new sprite for the animation when it is 90-degrees instead of just rotating the sprite. However, how would you go about actually making that animation? If there were just two separate sprites, how would that work?
Also, I know that this doesn't really have to do with what you were talking about, but do you think you can explain (only if you want, of course) the line: ``` position = interpolate_position * (1.0 - anim) + player.position * anim + parabola(anim) ```. You don't have to, but that piece of code kind of caught my interest.
Thank you so much for your help. I was even thinking, now that I have a lot of advice and feedback on my game, maybe I should go back on the game and try to fix all the main issues standing out with it. I think that could help to fix some mistakes I made. You don't have to, but I was thinking that if I did that, then maybe I could send it back to you and you could take a look at it, and tell me if there's anything else I could fix? Up to you.
Anyways, I'm pretty much just trying to become better, so hopefully I can be as good as you one day. Honestly, I don't if you realized, but you were the person I reached out to through email, and you gave me a lot of cool feedback. You said I can send you my game, but it looks like you ended up playing it anyways :laughing:
@BankSho
Okay, so when I'm talking about rotating sprites I don't mean making a new sprite for the animation. Rotating the sprite the way you did is cool and good. What you can do is change how the sprite is rendered so that it is pixel perfect. So you can still just have a single sprite that is rotated, but tweak the rendering options so that you get the aesthetic that you want. In Godot this is a single checkbox, more or less; it might be more complicated in Unity...
Also, you should take my advice about rotating sprites with a HUGE grain of salt. Knowing the options you have for pixel-art related aesthetics, and how to get the exact look you want, is very important. But it's also pretty irrelevant to the fundamental aspects of game development, and has no material impact on almost any other part of the game. The reason I pointed this out is specifically because it is related to your game and I wanted to come up with relevant things. But you should not put much thought into it until you have a pretty solid understanding of the actual gameplay of your game, and then what aesthetic you want. If you like how your game looks right now, you can keep it that way!
I should also mention that all this is biased due to my recent experience. I very recently started looking into tweaking my pixel-art aesthetics (and, in particular, rotating sprites), so it's something that's very fresh on my mind. But this is something I started looking into *five years* after doing my first Ludum Dare. So if you want to deal with it, that's cool! But I just don't want you to have the impression that this is a ridiculously important thing. :smile:
Okay, so that line is based on a lot of parametric math. It consists of two main parts. The first part is `interpolate_position * (1.0 - anim) + player.position * anim`. `anim` as a variable ranges from `0` to `1` seconds, and so this part results in a linear interpolation between `interpolate_position` and `player.position` between the start and end of the animation. This is because, at `anim = 0`, `interpolate_position` is weighted `(1 - 0)`, or `1`, and `player.position` is weighted `0`, so the total is `interpolate_position * 1 + player.position * 0`, so it's just `interpolate_position`. This logic applies backwards once `anim` equals 1, and for every value between `0` and `1`, we get a linear mix between the two. For example, at `anim = 0.25`, we get `interpolate_position * 0.75 + player.position * 0.25`. This is a pretty common concept called [linear interpolation](https://en.wikipedia.org/wiki/Linear_interpolation).
Now, in context, this is animating an item pickup flying from it's original location to the player, so with just the linear interpolation, we get an animation of the item pickup moving straight to the player. This is where the `parabola` function comes in. The parabola is a function that adds additional height to the item pickup, so that it will fly in a parabola instead of a line. I came up with the parabola function by tweaking the factors in a normal quadratic function until they fit exactly what I wanted. You can play with the graph [here](https://www.desmos.com/calculator/dlt4yjktf9) (I actually used Desmos to help me come up with the function). On the graphing calculator I linked you, the `A` variable changes the height of the parabola.
As you can see, the parabola I came up with starts and ends at 0 additional height, at times `anim` = 0 and `anim` = 1. Then, in the middle, at `anim` = 0.5, the parabola reaches its maximum height. The end result of all this is that if I add the parabola as additional height, the item pickups will now fly in a parabolic arc instead of a (relatively boring :wink:) line.
So yeah. I hope that's clear enough. Most of these things become a lot easier to come up with yourself once you've had a lot of practice with algebra, and, in particular, parametric functions (which I did not learn about until I took calculus).
Anyways: If you iterate on your game I'll definitely take another look at it. :thumbsup:
Sorry that I'm not the best at explaining things but I will try. :smile:
Also, yeah, I looked at this game for a reason... you never sent me your game but I remembered that you originally left a comment on one of my posts and so I went back and found your profile. I didn't want to break my promise that I'd look at your game! :smile:
@honey-pony
Hey there again! Sorry for the very late response, I didn't want to leave you hanging :) I've been having some school and personal barriers that I was stuck on. But I'm back now :smile:
I see now what you are talking about with pixel-perfect sprites and rotating them. Maybe in the future, I'll take your advice and look into my game pixel-art aesthetics. For now, I'm going to follow what you said and focus on the fundamentals of my game, because that's definitely what I feel I need to do.
For the most part, I'm pretty sure I understand most of what you're saying about that equation. I couldn't figure it out completely, but I get the core concept behind what you're saying. There were just some misunderstandings that I couldn't figure out from researching linear interpolation and parametric functions (such as linear polynomials). However, I'm quite proud I was able to understand the basis of it, especially judging the fact that I've only gotten through Algebra 1 so far :stuck_out_tongue_closed_eyes:
One question for the parabola in Desmos that you sent me: why is it going downwards? Usually when I think of a parabola for an item pickup, I would think of it going upwards. (Like if you just take that link you sent me and inverted the parabola). I was only able to think of two things: either that was actually the intention you wanted in the game, or I still have a misunderstanding on these parabolas. Sorry if that sounded like a dumb question :laughing:
Unfortunately, when I learned polynomials in Algebra 1, I could never see the use of it. I thought it was completely pointless (take note that this was before I got into game development). As a result, I've forgotten the majority of what I've learned. Now I will most likely have to back and get a refresher to understand linear interpolation better.
Thankfully, soon I'm going to start Algebra 2, where I'm pretty sure it brushes the subject of parabolas. I also know it goes over matrices and more about linear algebra, which I've heard is also useful for game development. I'm hoping to get a lot out of it. I'm definitely excited about that!
Well, it seems I got about 1000th place on my game project. I'm not mad about that, but, hey, at least I got rated!
So yes, I've decided that I want to improve my game with all the suggestions I've got so far. I would definitely appreciate it if you take a look at the improved version and give me your advice on it! And yes, sorry for not originally sending you my game. I'm very glad you ended up coming back and looking at my game :)
Once again, thank you! I still really appreciate you helping me! Have a good one :smiley:
P.S.: Don't worry about your explanations, you actually did a really good job at explaining that one line of code.
@banksho
With respect to the Desmos graph I sent you, the scale was actually completely arbitrary. :smile: (You can see that it can be set to any particular value with the 'A' slider). For an upwards-facing parabola you would of course set the scale to a positive number.
In my game though, I did in fact use a negative scale (-12, according to the source code) - this is because, in Godot, negative Y is up and positive Y is down. So for a parabola that arcs upward in Godot (in 2D), you need a negative scale. :smile:
One thing I'd like to mention: I can't think of a whole lot of uses for polynomials, in particular, in game development. The quadratic that we've been discussing is one I came up with purely for aesthetic purposes, and although knowing algebra was useful in helping me find the right numbers, I did more or less just tweak the various factors until I got the shape I was looking for.
I mean, understanding polynomials is definitely helpful. Polynomials are helpful in understanding physics, they're helpful if you're doing cubic splines, and I'm sure there's a lot of other places that they might sneak up. I just can't think of a whole lot of places where I've personally applied a whole lot of my algebra education on polynomials. :smile:
One other thing: I would definitely recommend developing an understanding of linear interpolation. It's hard to really contextualize it without having learned about vectors and parametric equations, and things like that, but it is a relatively common concept in game development, and it helps you understand interpolation in the general case. Also, in case my last post was at all misleading: linear interpolation is more or less entirely unrelated to polynomials.
@honey-pony
Ah, thank you for the explanation! :smiley:
Well, it seems that I might've had a misunderstanding of the importance of polynomials. I will still keep them in mind, but I'll try to go over the more important stuff first. :smile:
I know that in my next classes I'll learn more about math, so hopefully, it might go over more about linear interpolation. I know that it definitely goes over quadratics, so I'll probably get something out of that.
As for my game, I ended up adding a pixel-perfect aesthetic to the game. It was actually much easier than I had imagined in Unity. I've also fixed the jumping and clinging to the walls bug. I added in more animations and sounds. I've also (at least I think I have, but it looks about the same to me), uniformly matched all the pixel amounts in the game. I am now going to do what everyone has been asking: add more feedback with particles and probably more animations.
I'll let you know once I've finished and you may take a lot at my first new "version" of the game. Thanks for the help and feedback! :smile:
@honey-pony
Hey there!
So I fixed up and added to my game a little, and I think it looks a lot better now. I fixed the bugs that would cause the player to get stuck to the wall and not let the player jump at times.
I also made the enemies more realistic by changing how fast they can hit. Before, they would hit instantly, but now, there is a wait until their sword hits the player. I also added a little red flash when the player is hit for some more feedback.
On top of that, I added a pixel-perfect element to the game, and made sure all the resolutions in the game were the same.
Hopefully it looks better now, and I would appreciate your feedback on it :smile: Thanks!
@BankSho Hi, I completely forgot about our conversation and just logged in to do theme suggestions. So sorry for the late response. I'll definitely play your game and give you some feedback.
Okay so I've played the updated version of the game. One thing that was improved a lot is the platforming. The jump feels pretty satisfying now (and the physics don't seem to be very glitchy) which is great. I still feel like the platforming is a little awkward, but not for reasons that are necessarily your fault. If you're interested in trying to make it even better, I would recommend looking up coyote frames / grace frames. Basically what you do is you allow the player to jump for the frames immediately after they leave the ground. So if I walk off an edge I still have a small window where I'm allowed to jump. This makes jumping off of edges easier and also helps deal with the amount of input latency that there can be on modern computers.
As far as the graphics go, I do think they are improved. The level of detail on the player's eyes and mouth (and the enemies eyes and mouth) is, in my opinion, too low compared to the level of detail on the weapons and level tiles. Or, in opposite terms, the level of detail on the weapons and level tiles is too high compared to the player sprites. I can see that things are definitely close in resolution, but the player is still a little out of place (in my opinion). I do want to emphasize that you should do it however you like it; it is merely my opinion that consistent level of detail is better.
Also, if I'm not wrong, you do have the player rotating the way I recommended? I actually do think it looks better in this case. Again though, you can disagree if you like and rotate your sprites however you want. :)
One note on the jump animation, which I think will actually be helpful: So I like that you have the stretch effect. Squishy and stretchy animations are super cool and can really help emphasize motion. Best I can tell, it is volume conserving, which is what you want. (i.e. when you decrease the width you want to increase the height so that volume remains constant; I think your animation accomplishes this).
However, once you reach the apex of the jump arc, you should actually not be stretched vertically, but actually squashed horizontally. The jump animation should go from normal proportions, to stretched vertically, to very briefly either normal proportions or squashed horizontally (at the apex of the jump), back to stretched vertically, and finally back to normal.
This is I believe the correct way to animate it. I did just try animating a square like this and it looks a little weird, so I'm not entirely sure. But everything I've done in animation makes me think that's the way to do it, so that's why I said it. Lol. I guess my advice is: try different animations, do whichever one you like best. The vertical stretch alone makes it feel a lot better than regular old jumping, so keep that in any case.
I see you also made some comments about player feedback. I think that yeah, having the enemies not immediately damage you is definitely a good improvement. I think maybe it could be improved by having a brief animation where the enemies prepare for swinging and then swing their weapon; while they are swinging their weapon they do damage, while they are preparing to swing the player knows to get out of the way. This is actually a pretty common thing but I can't remember what it's called right now, sorry.
And just to be clear, I'm not saying your player feedback doesn't work. It's definitely a solution. But on the animation side of things, having the swing animation always damage the player makes more sense, and so having the indication that the enemy is going to attack be a separate animation makes more sense.
Hopefully all my rambling helps some. Again sorry that I completely forgot about this for a few months. I hope you'll participate in the next Ludum Dare. See ya then. :)