Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type
- PlayerClass = record
- x,y, speed: longint;
- w,h, rLeft, rRight, rTop, rBottom,dir, jump, acc, dec: integer;
- falling: boolean;
- end;
- var mlevel: {array [0..2] of }array [0..160] of array [0..60] of integer;
- tileset, mainChar: integer;
- player: PlayerClass;
- procedure CreatePlayer;
- begin
- player.x := 0;
- player.y := 0;
- player.speed := 1;
- player.w := 32;
- player.h := 32;
- player.dir := 0; //left, right, up, down
- player.jump := 0;
- player.falling := true;
- player.acc := 4
- player.dec := 8;
- end;
- procedure DrawPlayer(players: Playerclass; buffer, sprite: integer; offsetX, offsetY: longint);
- begin
- if (players.dir = 0) then
- // masked_blit(sprite, buffer, (int)frame*32, 0, x - offsetX, y - offsetY, w, h)
- else
- // masked_blit(sprite, buffer, (int)frame*32, 32, x - offsetX, y - offsetY, w, h);
- end;
- procedure UpdatePlayer;
- begin
- if player.falling then
- begin
- if (airTime < 20) then
- inc(airTime);
- y := y + airTime/10;
- end;
- if jumping then
- begin
- inc(jumpTime);
- if (jumpTime >= jumpMax) then
- begin
- jumping := false;
- end else
- y := y - (7 - jumpTime/5);
- end;
- end;
- procedure Jump;
- begin
- if not(jumping and falling) then
- begin
- jumping := true;
- jumpTime := 0;
- end else if (jumping and not doubleJumping and (jumpTime >= jumpMax/2)) then
- begin
- doubleJumping := true;
- jumpTime := 0;
- end;
- end;
- procedure Move(players: PlayerClass; direction:integer);
- begin
- dir := direction;
- NextFrame();
- if (direction = LEFT) then
- x := x - speed;
- else if (direction = RIGHT) then
- x := x + speed;
- end;
- procedure NextFrame;
- begin
- frame := frame + 0.1;
- if (frame > 3) then
- frame := 0;
- end;
- procedure DrawLayers(buffer, tileset: integer; offsetX, offsetY: longint);
- var i, e: integer;
- begin
- end;
- procedure LoadMap(filename: string);
- var i,e,a: integer;
- level: string;
- begin
- if FileExists(filename) then
- ReadFileString(OpenFile(filename, false), level, FileSize(OpenFile('', false)));
- for i := 0 to length(level) do
- begin
- if level[i] = 'n' then
- begin
- inc(e);
- a := 0;
- SetArrayLength(mlevel, GetArrayLength(mlevel) + 1);
- end else
- begin
- SetArrayLength(mlevel, GetArrayLength(mlevel) + 1);
- mLevel[e][a] := strtoint(level[i]);
- inc(a);
- end;
- end;
- end;
- function CheckCollision(players: PlayerClass; direction: integer): boolean;
- begin
- end;
- Procedure FixTile(players: PlayerClass);
- begin
- end;
- Procedure Update(players: PlayerClass; offsetX, offsetY: longint);
- begin
- end;
- procedure Input;
- var i: integer;
- begin
- for i := 0 to 127 do
- if IsKeyDown(chr(i)) then
- begin
- if ord('d') = i then
- begin
- if not CheckCollision(player, LEFT) then
- Move(LEFT);
- end else if ord('a') = i then
- begin
- if not CheckCollision(player, RIGHT) then
- Move(RIGHT);
- end;
- if ord('s') = i then
- player.Jump();
- if ord('w') = i then
- player.y := player.y + 2.0;
- end;
- end;
- procedure main;
- var offsetX, offsetY: longint;
- done: boolean;
- begin
- if fileexists(scriptpath + 'tiles.bmp') then
- tileset := loadbitmap(scriptpath + 'tiles.bmp');
- if fileexists(scriptpath + 'char.bmp') then
- mainChar := loadbitmap(scriptpath + 'char.bmp');
- while not done do
- begin
- if IsFKeyDown(4) then
- done := true;
- Input;
- //collision with player
- player.falling = not CheckCollision(player, DOWN, mlevel);
- if player.jumping and CheckCollision(player, UP, mlevel) then
- player.jumping = false;
- FixTile(player, mlevel);
- Update(offsetX, offsetY, player);
- end;
- end;
Add Comment
Please, Sign In to add comment