some updates! if you can't tell I like to keep things wordy
e: also im apparently level 4 now
jumpingI spent quite some time making sure the jumping felt good. typically what I do for jumping is make the jumping speed a static value, and if the player let goes of the jump button when in midair the vertical speed is decreased by a certain factor (usually half). this is something I've lately been trying to forgo for a few reasons. reason one is because, if the player taps the jump button really quickly then the jump will feel completely random due to the 60fps nature of the game, some taps might go much higher than others. reason two extends reason one -- if the player taps the jump button and barely gets any air then short hops become much less intuitive to pull off and emphasis is instead placed on the maximum jump height. and reason three is because it simply doesn't feel good.
in a search to remedy this I played a game known entirely for it's jumping, the mario series ... and I noticed a few things. first, is that when holding the jump button, the gravity seems to be reduced; secondly when the player releases the jump button, gravity seems to return to it's default state which is much stronger than when jumping. this feels nice because it presents an elasticity to jumping, almost like you are defying the gravity rules already established, and it also allows much more control in the air.
so what I did after this research was make it so that the player has two gravity states: a normal gravity state, and a gravity state while jumping that is drastically lower. when the player is holding the a button in the air and moving upwards, apply the jump gravity and when not apply standard gravity. this is really nice and intuitive because it allows me to keep the initial jump speed static, and it also solves the problem of before with tapping the jump button -- now when the player taps the jump button they jump one tile in height and the differences in taps are completely unnoticeable.
camera controlI implemented a smooth camera! the camera is a controller object that during gameplay should be the only instance controlling the view. it has 3 variables for each axes: view_x, target_x and factor_x. view_x is the center point of where the view should be -- in game maker the view's position is determined from the top-left, so this variable is important for framing the action effectively. target_x is where view_x should actually be, this is the variable that is accessed when other objects want to move the view. finally factor_x, this is the speed at which view_x moves towards target_x. then all I do is use the following equation:
view_x += (target_x - view_x) * factor_x
and viola! there is much more going on behind the scenes of how the player object influences target_x, such as separate focus points depending on orientation, but I'm rambling a bit too much at this point so I'll probably save that for another post.