From 501e84181f1f70fc74767062ca357c06f93bdfd1 Mon Sep 17 00:00:00 2001 From: SpagettiFisch <63868515+SpagettiFisch@users.noreply.github.com> Date: Wed, 6 Mar 2024 14:26:32 +0100 Subject: [PATCH] added a new missile new to character: wind slash attack added projectile lifetime (in frames, maybe change to 5*fps later) Signed-off-by: SpagettiFisch <63868515+SpagettiFisch@users.noreply.github.com> --- art/images/windslash.png | Bin 0 -> 400 bytes main.py | 4 +++ viecher.py | 52 +++++++++++++++++++++++---------------- 3 files changed, 35 insertions(+), 21 deletions(-) create mode 100644 art/images/windslash.png diff --git a/art/images/windslash.png b/art/images/windslash.png new file mode 100644 index 0000000000000000000000000000000000000000..03b463ef9f2c43305477576e904e10cc35e60236 GIT binary patch literal 400 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K$eetEh$hFA!0 z4L0ODCb(UM(LNz@wL;jkjV8GrXAXM2bLvsb zn;2V`pY~jDx03y=)JOc^H@Uo<)ot@FI+U+zL0R7pKIUIvLRJ(cb$^*IT`1#z$Uvv| ze)tg^_xmS!R09fkiW;2`KDo)~k;OEPE)ySL#+eTnCRx2Zbums;b>8#P(^`2d5j?tU zg(vRdOa9^3^h)taNa8blr30q3)=Xu1|KVH|=e@?j-|~#=lbT!eX0R4(nX-CL%Gl45 zVE5p~p4E+xw+=7Qdeb9w@CN5*W5e}{j^7W~oc;6t^pjodln(!Kw%V06@zxtoi{qhf TGy1%`K%wF3>gTe~DWM4fYW|MR literal 0 HcmV?d00001 diff --git a/main.py b/main.py index c016468..c603d3b 100644 --- a/main.py +++ b/main.py @@ -87,6 +87,10 @@ def play(screen, clock, running, background, isblack, WIDTH, HEIGHT): for npc in objects[2]: npc.update(pygame.key.get_pressed(), objects) npc.draw(screen) + + if objects[1] ==[]: + objects[0][0].book.addspell('windslash') + else: objects[0][0].book.hidden = not freeze diff --git a/viecher.py b/viecher.py index 5249b6e..f233ef3 100644 --- a/viecher.py +++ b/viecher.py @@ -202,6 +202,8 @@ class MainCharacter(Fighter): moveto = mouse- vec(self.x, self.y) if self.book.current_sp == 'fireball': weapon = Fireball('fb1', 100, self.x, self.y, moveto, 5) + elif self.book.current_sp == 'windslash': + weapon = Windslash('ws1', 100, self.x, self.y, moveto, 5) else: return obj[3].append(weapon) @@ -313,7 +315,7 @@ class Book(): if spell not in self.sp_list: self.sp_list.append(spell) self.current_sp = spell - self.buttons.append(Button(200, self.buttons_height, 58, 50, f'{spell}.png', 'medieval', 23, attributes=[spell], onclickFunction=self.update_spell)) + self.buttons.append(Button(200, self.buttons_height, 58, 50, f'{spell}_icon.png', 'medieval', 23, attributes=[spell], onclickFunction=self.update_spell)) self.buttons_height += 100 def update_spell(self, spell): @@ -357,10 +359,12 @@ class Skeleton(Mobs): class Weapons(Objects): - def __init__(self, name, ms, sprite, x, y, moveto, damage) -> None: + def __init__(self, name, ms, sprite, x, y, moveto, damage, life_ticks) -> None: super().__init__(name, ms, sprite, x, y) self.moveto = moveto self.damage = damage + self.life_ticks= life_ticks + self.spawn_tick = pg.time.get_ticks() pos = vec(1,0) angle = pos.angle_to(moveto) with open(f'art/images/{sprite}') as i: @@ -372,33 +376,39 @@ class Weapons(Objects): touches.hurt(self.damage, objects) self.hidden = True objects[3].remove(self) + + def move(self, objects): + self.moveto.scale_to_length(self.speed) + self.x += self.moveto[0] / fps + self.y += self.moveto[1] / fps + if pg.time.get_ticks() - self.spawn_tick > self.life_ticks: + self.hidden = True + objects[3].remove(self) class Spells(Weapons): - def __init__(self, name, ms, sprite, x, y, moveto, damage) -> None: - super().__init__(name, ms, sprite, x, y, moveto, damage) + def __init__(self, name, ms, sprite, x, y, moveto, damage, life_ticks) -> None: + super().__init__(name, ms, sprite, x, y, moveto, damage, life_ticks) class Fireball(Spells): - def __init__(self, name, ms, x, y, moveto, damage, sprite = 'fireball.png') -> None: - super().__init__(name, ms, sprite, x, y, moveto, damage) - - def move(self): - self.moveto.scale_to_length(self.speed) - self.x += self.moveto[0] / fps - self.y += self.moveto[1] / fps + def __init__(self, name, ms, x, y, moveto, damage, sprite = 'fireball.png', life_ticks=5000) -> None: + super().__init__(name, ms, sprite, x, y, moveto, damage, life_ticks) def update(self, objects): - self.move() + self.move(objects) self.die(objects, Mobs) - -class Arrow(Weapons): - def __init__(self, name, ms, x, y, moveto, damage, sprite = 'arrow.png') -> None: - super().__init__(name, ms, sprite, x, y, moveto, damage) - def move(self): - self.moveto.scale_to_length(self.speed) - self.x += self.moveto[0] / fps - self.y += self.moveto[1] / fps +class Windslash(Spells): + def __init__(self, name, ms, x, y, moveto, damage, sprite = 'windslash.png', life_ticks=150) -> None: + super().__init__(name, ms, sprite, x, y, moveto, damage, life_ticks) def update(self, objects): - self.move() + self.move(objects) + self.die(objects, Mobs) + +class Arrow(Weapons): + def __init__(self, name, ms, x, y, moveto, damage, sprite = 'arrow.png', life_ticks=5000) -> None: + super().__init__(name, ms, sprite, x, y, moveto, damage, life_ticks) + + def update(self, objects): + self.move(objects) self.die(objects, MainCharacter)