BENJAMUS, are you interested in having the party character flawlessly follow the lead character around (rather than having the lead character transforming) and jump between platforms and stuff and never get stuck? I've recently found a method for this which I could give you the code for... if you want it. I don't have enough time to fully explain it right now.
= EDIT =
OK, now I've got time.
Here's how I thought: The problem with an ally following you around is to make sure it won't lose you by falling down somewhere and not getting up again. If enemies does that it's neglible, since after all the player's glad when enemies - that are a sort of obstacle - sorta gets rid of themselves. It's something completely different with having your healer falling down twenty storeys since she didn't jump properly... Sonic games solved this problem by having Miles Prower being able to fly, and every time he got lost he would appear flying (and being able to fly trough walls) and land himself on the very piece of ground Sonic stood at. (In the more recent games, such as Shadow The Hedgehog, the ally just respawn near you. That looks ugly, especially on moving platforms where the ally instantly falls down again)
The idea I got was... The player character can only be at "accessible" places. The player won't ever be halfway into a wall. The player will only pass trough OK places. The player's ally should be just fine if (s)he took the same path as the player...
So what if the player saved this path somehow? Let's look into expanding xprevious/yprevious into something even better... the Previous Array.
In the create event of the player we put something that defines this array:
for(c = 0;c < 20;c += 1){
xprev[c] = x
yprev[c] = y
}
allyoffset = image_xscale * 5
//allyoffset will make ally appear behind player when
//standing still, rather than being at the same spot
In each step (begin, normal, OR end - your choice) we update this array, as well as the allyoffset.
for(c = 18;c > 0;c -= 1){
xprev[c + 1] = xprev[c]
yprev[c + 1] = xprev[c]
}
allyoffset = max(-5,min(5,allyoffset - image_xscale))
//Assuming you use image_xscale to flip the hero's
//sprite rather than using one spr_left and one spr_right
Finally, we should make the ally move to the memorized position. The ally is pretty easy to code, (s)he only needs a End Step event and nothing else:
with(obj_hero){
other.x = xprev[19]
other.y = yprev[19]
if(other.x > x){
other.image_xscale = -1
}
else{
other.image_xscale = 1
}
}
You may of course want to have some code there to animate the ally to e.g. have jump animation whilst in mid-air and so on, but you'll figure out how to do that with the method you're using, I'm sure.
=EDIT END=
Anyway, some feedback:
The game needs a title screen of sorts. So that there's an easy method of loading a saved game on bootup.
As well, the game needs some music - it's not as immersive as it would've been with some sort of BGM (which deducts from gameplay). You could use more or less anything as placeholders (On To Grasstown? Emerald Hill Zone Theme? Kid Icarus Fortress Theme?) as long as you have a disclaimer screen shown at startup (before the title screen) with some text "Currently I use the music X, Y and W2. Those are just placeholders until I compose my own music (and that process is nearly halfway done!). Please don't be offended because of this.". It really would make the game feel even more fun to play (and make navigating the Gardens feel more like <exploration> than <being lost in a giant area where everything look the same desperately trying to get back to the Town>)
And finally, after getting out from the boss room I went lost. It would be nice to have the map system work properly, so that you get an impression wether you're going in the right direction or not. It was kinda annoying to wander around a silent garden with no real idea where you're supposed to go.
I'm swedish so I put more emphasis on negative items that need to be improved than on the positive ones that are polished enough... I hope I don't discourage you. The gameplay itself is pretty solid, with a single gripe of mine: when being hit by an enemy, it would be kinda nice if the character had some more visual damage-taking effect. Namely, they should be knocked back (set xspeed to negative image_xscale something, set vspeed to some value like -3, perhaps have some red circles fly out, and have a sound effect that sounds like they say "Ouch" in a 8-bit fashion. For reference:
Castlevania 1 when Simon gets damaged) by the enemies. Sure, this may make you having to pull of a certain jump again, but
meh.
Oh, and while on the subject of enemies... There's a cave in the gardens where you enter from the right-hand side of the cave, then go to the leftmost area, climb a wall, and jump to the righthand area to get a heart extension. One of the mushroom enemies are placed on a platform (on the left wall, right before you jump to the mid-air platforms you need to cross to reach the right-hand area) you need to step on to make the jump, and the only way to get rid of it is to jump into it and kill it whilst invincible (or time double-jump and shooting nigh perfectly). Fix that, it's a little piece of very annoying level design. I'd recommend you to make the platform one block longer so that it's possible to shoot the enemy without being inside it; and perhaps make the mid-air platform a bit shorter on the left side to compensate.
Edited by Yal, 08 December 2010 - 04:26 PM.