diff --git a/images/knight-named.zip b/images/knight-named.zip deleted file mode 100644 index 65ebf43..0000000 Binary files a/images/knight-named.zip and /dev/null differ diff --git a/images/knight-named/roll1.png b/images/knight-named/roll1.png new file mode 100644 index 0000000..aa2fb86 Binary files /dev/null and b/images/knight-named/roll1.png differ diff --git a/images/knight-named/roll2.png b/images/knight-named/roll2.png new file mode 100644 index 0000000..7ad8826 Binary files /dev/null and b/images/knight-named/roll2.png differ diff --git a/images/knight-named/roll3.png b/images/knight-named/roll3.png new file mode 100644 index 0000000..ef0e5df Binary files /dev/null and b/images/knight-named/roll3.png differ diff --git a/images/knight-named/sprite-1-1.png b/images/knight-named/sprite-1-1.png new file mode 100644 index 0000000..3555836 Binary files /dev/null and b/images/knight-named/sprite-1-1.png differ diff --git a/images/knight-named/sprite-1-2.png b/images/knight-named/sprite-1-2.png new file mode 100644 index 0000000..dbe7b16 Binary files /dev/null and b/images/knight-named/sprite-1-2.png differ diff --git a/images/knight-named/sprite-1-4.png b/images/knight-named/sprite-1-4.png new file mode 100644 index 0000000..dbe7b16 Binary files /dev/null and b/images/knight-named/sprite-1-4.png differ diff --git a/images/knight-named/sprite-2-1.png b/images/knight-named/sprite-2-1.png new file mode 100644 index 0000000..3c63be4 Binary files /dev/null and b/images/knight-named/sprite-2-1.png differ diff --git a/images/knight-named/sprite-2-3.png b/images/knight-named/sprite-2-3.png new file mode 100644 index 0000000..0aaa020 Binary files /dev/null and b/images/knight-named/sprite-2-3.png differ diff --git a/images/knight-named/sprite-2-5.png b/images/knight-named/sprite-2-5.png new file mode 100644 index 0000000..61c7c58 Binary files /dev/null and b/images/knight-named/sprite-2-5.png differ diff --git a/images/knight-named/sprite-2-6.png b/images/knight-named/sprite-2-6.png new file mode 100644 index 0000000..b7e6a7b Binary files /dev/null and b/images/knight-named/sprite-2-6.png differ diff --git a/images/knight-named/sprite-2-7.png b/images/knight-named/sprite-2-7.png new file mode 100644 index 0000000..0aaa020 Binary files /dev/null and b/images/knight-named/sprite-2-7.png differ diff --git a/images/knight-named/sprite-2-8.png b/images/knight-named/sprite-2-8.png new file mode 100644 index 0000000..93138ab Binary files /dev/null and b/images/knight-named/sprite-2-8.png differ diff --git a/images/knight-named/sprite-3-1.png b/images/knight-named/sprite-3-1.png new file mode 100644 index 0000000..381efc9 Binary files /dev/null and b/images/knight-named/sprite-3-1.png differ diff --git a/images/knight-named/sprite-3-2.png b/images/knight-named/sprite-3-2.png new file mode 100644 index 0000000..b7e6a7b Binary files /dev/null and b/images/knight-named/sprite-3-2.png differ diff --git a/images/knight-named/sprite-3-3.png b/images/knight-named/sprite-3-3.png new file mode 100644 index 0000000..0aaa020 Binary files /dev/null and b/images/knight-named/sprite-3-3.png differ diff --git a/images/knight-named/sprite-3-4.png b/images/knight-named/sprite-3-4.png new file mode 100644 index 0000000..dbe7b16 Binary files /dev/null and b/images/knight-named/sprite-3-4.png differ diff --git a/images/knight-named/sprite-3-5.png b/images/knight-named/sprite-3-5.png new file mode 100644 index 0000000..61c7c58 Binary files /dev/null and b/images/knight-named/sprite-3-5.png differ diff --git a/images/knight-named/sprite-3-6.png b/images/knight-named/sprite-3-6.png new file mode 100644 index 0000000..b7e6a7b Binary files /dev/null and b/images/knight-named/sprite-3-6.png differ diff --git a/images/knight-named/sprite-3-7.png b/images/knight-named/sprite-3-7.png new file mode 100644 index 0000000..0aaa020 Binary files /dev/null and b/images/knight-named/sprite-3-7.png differ diff --git a/images/knight-named/sprite-3-8.png b/images/knight-named/sprite-3-8.png new file mode 100644 index 0000000..dbe7b16 Binary files /dev/null and b/images/knight-named/sprite-3-8.png differ diff --git a/images/knight-named/sprite-4-1.png b/images/knight-named/sprite-4-1.png new file mode 100644 index 0000000..3555836 Binary files /dev/null and b/images/knight-named/sprite-4-1.png differ diff --git a/images/knight-named/sprite-4-2.png b/images/knight-named/sprite-4-2.png new file mode 100644 index 0000000..c90d045 Binary files /dev/null and b/images/knight-named/sprite-4-2.png differ diff --git a/images/knight-named/sprite-4-3.png b/images/knight-named/sprite-4-3.png new file mode 100644 index 0000000..40a0da8 Binary files /dev/null and b/images/knight-named/sprite-4-3.png differ diff --git a/images/knight-named/sprite-4-7.png b/images/knight-named/sprite-4-7.png new file mode 100644 index 0000000..541cfe8 Binary files /dev/null and b/images/knight-named/sprite-4-7.png differ diff --git a/images/knight-named/sprite-4-8.png b/images/knight-named/sprite-4-8.png new file mode 100644 index 0000000..0ddb1a2 Binary files /dev/null and b/images/knight-named/sprite-4-8.png differ diff --git a/images/knight-named/sprite-5-1.png b/images/knight-named/sprite-5-1.png new file mode 100644 index 0000000..3555836 Binary files /dev/null and b/images/knight-named/sprite-5-1.png differ diff --git a/images/knight-named/sprite-5-2.png b/images/knight-named/sprite-5-2.png new file mode 100644 index 0000000..3df1cf6 Binary files /dev/null and b/images/knight-named/sprite-5-2.png differ diff --git a/images/knight-named/sprite-5-3.png b/images/knight-named/sprite-5-3.png new file mode 100644 index 0000000..0902e2d Binary files /dev/null and b/images/knight-named/sprite-5-3.png differ diff --git a/images/knight-named/sprite-5-4.png b/images/knight-named/sprite-5-4.png new file mode 100644 index 0000000..3df1cf6 Binary files /dev/null and b/images/knight-named/sprite-5-4.png differ diff --git a/images/knight-named/sprite-6-1.png b/images/knight-named/sprite-6-1.png new file mode 100644 index 0000000..3555836 Binary files /dev/null and b/images/knight-named/sprite-6-1.png differ diff --git a/images/knight-named/sprite-6-2.png b/images/knight-named/sprite-6-2.png new file mode 100644 index 0000000..056f45d Binary files /dev/null and b/images/knight-named/sprite-6-2.png differ diff --git a/images/knight-named/sprite-6-3.png b/images/knight-named/sprite-6-3.png new file mode 100644 index 0000000..cd08586 Binary files /dev/null and b/images/knight-named/sprite-6-3.png differ diff --git a/images/knight-named/sprite-6-4.png b/images/knight-named/sprite-6-4.png new file mode 100644 index 0000000..d037bf5 Binary files /dev/null and b/images/knight-named/sprite-6-4.png differ diff --git a/images/knight-named/stand.png b/images/knight-named/stand.png new file mode 100644 index 0000000..0aaa020 Binary files /dev/null and b/images/knight-named/stand.png differ diff --git a/images/knight-named/walkleft.png b/images/knight-named/walkleft.png new file mode 100644 index 0000000..93138ab Binary files /dev/null and b/images/knight-named/walkleft.png differ diff --git a/images/knight-named/walkright.png b/images/knight-named/walkright.png new file mode 100644 index 0000000..b7e6a7b Binary files /dev/null and b/images/knight-named/walkright.png differ diff --git a/main.py b/main.py index a286a99..9809719 100644 --- a/main.py +++ b/main.py @@ -58,17 +58,34 @@ class Player: self.anim_counter = 0 self.ANIM_SPEED = 8 - self.stand = pygame.image.load(sprites["stand"]).convert_alpha() self.walk_left = pygame.image.load(sprites["walk_left"]).convert_alpha() self.walk_right = pygame.image.load(sprites["walk_right"]).convert_alpha() - self.jump_img = pygame.image.load(sprites["jump"]).convert_alpha() - + # support three-stage jump: + # - sprites["jump"] can be a list/tuple of 3 paths [start, mid, end] + # - or provide explicit keys "jump_start", "jump_mid", "jump_end" + # - otherwise fallback to a single jump image (same for all stages) + jump_entry = sprites.get("jump") + if isinstance(jump_entry, (list, tuple)) and len(jump_entry) == 3: + self.jump_start = pygame.image.load(jump_entry[0]).convert_alpha() + self.jump_mid = pygame.image.load(jump_entry[1]).convert_alpha() + self.jump_end = pygame.image.load(jump_entry[2]).convert_alpha() + elif all(k in sprites for k in ("jump_start", "jump_mid", "jump_end")): + self.jump_start = pygame.image.load(sprites["jump_start"]).convert_alpha() + self.jump_mid = pygame.image.load(sprites["jump_mid"]).convert_alpha() + self.jump_end = pygame.image.load(sprites["jump_end"]).convert_alpha() + else: + single_path = jump_entry if isinstance(jump_entry, str) else sprites.get("jump", sprites["stand"]) + single = pygame.image.load(single_path).convert_alpha() + self.jump_start = self.jump_mid = self.jump_end = single + self.stand = pygame.transform.scale(self.stand, (int(self.stand.get_width() * scale), int(self.stand.get_height() * scale))) self.walk_left = pygame.transform.scale(self.walk_left, (int(self.walk_left.get_width() * scale), int(self.walk_left.get_height() * scale))) self.walk_right = pygame.transform.scale(self.walk_right, (int(self.walk_right.get_width() * scale), int(self.walk_right.get_height() * scale))) - self.jump_img = pygame.transform.scale(self.jump_img, (int(self.jump_img.get_width() * scale), int(self.jump_img.get_height() * scale))) + self.jump_start = pygame.transform.scale(self.jump_start, (int(self.jump_start.get_width() * scale), int(self.jump_start.get_height() * scale))) + self.jump_mid = pygame.transform.scale(self.jump_mid, (int(self.jump_mid.get_width() * scale), int(self.jump_mid.get_height() * scale))) + self.jump_end = pygame.transform.scale(self.jump_end, (int(self.jump_end.get_width() * scale), int(self.jump_end.get_height() * scale))) self.surface = self.stand self.rect = self.surface.get_rect(midbottom=(self.x, self.y)) @@ -121,7 +138,18 @@ class Player: def update_animation(self): if self.jumping: - self.surface = self.jump_img + # choose jump stage by vertical velocity: + # - strong negative: start (ascending) + # - near zero: mid (apex) + # - positive: end (descending) + up_thresh = -self.jump_power * 0.4 + down_thresh = self.jump_power * 0.4 + if self.y_velocity < up_thresh: + self.surface = self.jump_start + elif self.y_velocity > down_thresh: + self.surface = self.jump_end + else: + self.surface = self.jump_mid elif self.moving: self.anim_counter += 1 frame = (self.anim_counter // self.ANIM_SPEED) % 2 @@ -160,10 +188,14 @@ goblin = Player( knight = Player( 500, GROUND_Y, { - "stand": "images/sprites/knight.png", - "walk_left": "images/sprites/knight.png", - "walk_right": "images/sprites/knight.png", - "jump": "images/sprites/knight.png" + "stand": "images/knight-named/stand.png", + "walk_left": "images/knight-named/walkleft.png", + "walk_right": "images/knight-named/walkright.png", + "jump": [ + "images/knight-named/roll1.png", + "images/knight-named/roll2.png", + "images/knight-named/roll3.png" + ] }, 3, {