Okay, this is just part of the code which involves jumping. It's not finished yet (as there's no floor detection yet, because I'm still working on a map system ).

[pascal]
acceleration:= 6;

if pressed_space (*this is pseudo code, as you all know what happens here *) then begin
if jump = false then begin
velocity:= 50;
jump:= true;
end;
end;

(*this is not pseudo any more *)
if jump = true then begin
player.y:= player.y - velocity;
velocity:= velocity - acceleration;

if player_y_beforejump - player.y < 0 then begin
player.y := player_y_beforejump;
jump := false;
end;[/pascal]

And then it blits the player sprite with the destination rectangle of "player".

The thing is that the player jumps and falls too fast. I tried speeding up the movement and then delaying the whole thing, but it doesn't look smooth.

Also, as I said, I'm working on a map system.
I'm thinking of doing the same thing as jdarling - tiles through text files.
But I need a little help with this too.
I tried examining your side scroller code, but I really can't figure half of it out. I have a hard time understanding other peoples' codes.
So, I'll try this - reading characters from a text file. If it reads out ' ' then dstrect.x increases by the width of a tile. If it reads out eoln, then dstrect.x becomes 0, and dstrect.y increases by the height of a tile.
When it reads out '1', or '2' or something like that, it blits a tile (which kind - depending on which number it reads out) to dstrect onto the screen surface.

Haven't tried it yet (haven't had time), but theoretically, I see only one problem - how to scroll those tiles?
Or am I completely wrong here?