From 01cfa1ddfce9f7ce6d7d469b83ca214bb43c3481 Mon Sep 17 00:00:00 2001 From: "theo@manjaro" Date: Tue, 23 Nov 2021 18:53:48 +0100 Subject: [PATCH] Can actually die --- gamedata/game.py | 6 +++- gamedata/objects/ingame/player.py | 58 +++++++++++++++++++++--------- gamedata/objects/levels.py | 14 ++------ gamedata/objects/transition.py | 21 +++++++---- gamedata/sounds/sfx/dead.wav | Bin 0 -> 43289 bytes 5 files changed, 64 insertions(+), 35 deletions(-) create mode 100644 gamedata/sounds/sfx/dead.wav diff --git a/gamedata/game.py b/gamedata/game.py index a39fe1c..ef28222 100644 --- a/gamedata/game.py +++ b/gamedata/game.py @@ -303,4 +303,8 @@ class Game(): result = [] for i in chars: result.append(self.getchar(i)) - return result + surface = pygame.Surface((len(result)*9,9),flags=pygame.SRCALPHA) + for i in range(len(result)): + if result[i]: + surface.blit(result[i],(i*9,0)) + return surface diff --git a/gamedata/objects/ingame/player.py b/gamedata/objects/ingame/player.py index 91cce88..5131207 100644 --- a/gamedata/objects/ingame/player.py +++ b/gamedata/objects/ingame/player.py @@ -1,4 +1,5 @@ from gamedata.objects.ingame.movable import Movable +from gamedata.objects.transition import Transition class Player(Movable): @@ -22,6 +23,12 @@ class Player(Movable): self.animationspeed = 2.5 self.canmove = True + self.hp = 2 + self.dead = False + self.deathtimer = self.game.lib.Timer(0.5) + self.deadsfx = self.game.sound_lib["sfx/dead.wav"] + self.retrytext = self.game.getchars("Try again !") + self.maxwidth,self.maxheight = self.tileset.layers[0]["surface"].get_size() if abs(self.maxheight-234)<16: self.maxheight = self.game.globals["camerah"] @@ -92,7 +99,7 @@ class Player(Movable): def step(self): - if not self.hitpose: + if not self.dead: if self.water and self.rect.center[1]>self.water.rect.y: # Reverse gravity underwater if self.gravityway == 1: self.gravityway = -1 @@ -209,6 +216,8 @@ class Player(Movable): self.jumpsfx.play() self.jumped = True super().step() # Actually move + if self.rect.center[1]>self.game.globals["cameray"]+self.game.globals["camerah"]: + self.die() # Updated hitrect self.hitrect[0] = self.rect.center[0]-self.hitrect[2]/2 offset = 0 @@ -251,9 +260,8 @@ class Player(Movable): else: self.fastfall = False - else: # If I'm in hitpose - if self.hitposetimer.tick(self.game.dt): - self.hitpose = False + else: + self.deathtimer.tick(self.game.dt) self.game.globals["camerax"] = self.rect.center[0]-self.game.globals["cameraw"]/2 self.game.globals["cameray"] = self.rect.center[1]-self.game.globals["camerah"]/2 @@ -278,17 +286,35 @@ class Player(Movable): self.combotimer = 1 def yeet(self,hor,ver,resetcombo=True): - self.verspd = 0 - self.horkb = hor - self.verkb = ver - self.canfastfall = True - if resetcombo: - self.combo = 0 - self.hurtsfx.play() + if not self.dead: + self.verspd = 0 + self.horkb = hor + self.verkb = ver + self.canfastfall = True + if resetcombo: + self.combo = 0 + self.hurtsfx.play() + self.hp-=1 + if self.hp<=0: + self.die() + + def die(self): + if not self.dead: + self.deadsfx.play() + self.depth = 5 + self.rect[2],self.rect[3] = 0,0 + self.dead = True + + t = Transition(self.game,time=1,holdtime=0.5,level=self.game.globals["levelname"]) + self.game.gameloop.summon(t) def draw(self): - flipy = (self.gravityway<0 and not self.leaptimer<0) - if self.fastfall: - flipy = self.fastfall<0 - sprite = self.game.pygame.transform.flip(self.sprite,self.flipx,flipy) - self.game.window.blit(sprite,[self.rect[0]-self.game.globals["camerax"]-self.spriteoffset,self.rect[1]-self.game.globals["cameray"]]) + if not self.dead: + flipy = (self.gravityway<0 and not self.leaptimer<0) + if self.fastfall: + flipy = self.fastfall<0 + sprite = self.game.pygame.transform.flip(self.sprite,self.flipx,flipy) + self.game.window.blit(sprite,[self.rect[0]-self.game.globals["camerax"]-self.spriteoffset,self.rect[1]-self.game.globals["cameray"]]) + else: + if self.deathtimer.getloops()%2==0: + self.game.window.blit(self.retrytext,[self.game.globals["cameraw"]/2-self.retrytext.get_width()/2,self.game.globals["camerah"]/2-self.retrytext.get_height()/2]) diff --git a/gamedata/objects/levels.py b/gamedata/objects/levels.py index 180cd7d..e8866db 100644 --- a/gamedata/objects/levels.py +++ b/gamedata/objects/levels.py @@ -30,21 +30,13 @@ class Levels(BaseObject): self.flagsindex.append(self.game.lib.randint(1,3)) # Get sprites for "Level N" - sprites = self.game.getchars("Level "+str(i+1)) - text = self.game.pygame.Surface((len(sprites)*9,9),flags=self.game.pygame.SRCALPHA) - for j,s in enumerate(sprites): - if s: - text.blit(s,[j*9,0]) - self.textnumbers.append(text) + sprite = self.game.getchars("Level "+str(i+1)) + self.textnumbers.append(sprite) # Get sprites for the level's name if str(i) in customvalues.keys(): sprites = self.game.getchars(customvalues[str(i)]) - text = self.game.pygame.Surface((len(sprites)*9,9),flags=self.game.pygame.SRCALPHA) - for i,v in enumerate(sprites): - if v: - text.blit(v,[i*9,0]) - self.names.append(text) + self.names.append(sprites) else: self.names.append(None) diff --git a/gamedata/objects/transition.py b/gamedata/objects/transition.py index 81ddc60..ba6c577 100644 --- a/gamedata/objects/transition.py +++ b/gamedata/objects/transition.py @@ -2,7 +2,7 @@ from gamedata.objects.base import BaseObject class Transition(BaseObject): - def __init__(self,game,time=0.7,level=None): + def __init__(self,game,time=0.7,holdtime=0,level=None): super().__init__(0,0,game) @@ -12,18 +12,25 @@ class Transition(BaseObject): self.level = level self.timer = game.lib.Timer(time) + self.holdtimer = game.lib.Timer(holdtime) + self.hold = False self.alpha = 0 self.depth = 4 def step(self): - self.alpha = (1-self.timer.getratio())*255 - if self.timer.tick(self.game.dt): - if self.level: - self.game.scenes.ingame(self.game,level = self.level) - else: - self.game.scenes.overworld(self.game) + if not self.hold: + self.alpha = (1-self.timer.getratio())*255 + if self.timer.tick(self.game.dt): + self.hold = True + self.alpha = 255 + else: + if self.holdtimer.tick(self.game.dt): + if self.level: + self.game.scenes.ingame(self.game,level = self.level) + else: + self.game.scenes.overworld(self.game) def draw(self): self.surface.set_alpha(self.alpha) diff --git a/gamedata/sounds/sfx/dead.wav b/gamedata/sounds/sfx/dead.wav new file mode 100644 index 0000000000000000000000000000000000000000..93f27a0ddccf82fec71d4bc99167f46e2bf6016e GIT binary patch literal 43289 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 Zbvys)|CuCy@;~KvLi}g{ncE5e{{tmTA8h~t literal 0 HcmV?d00001