Skip to content

Commit af96906

Browse files
authored
update 0.1.2.2
1 parent 484380a commit af96906

File tree

13 files changed

+672
-175
lines changed

13 files changed

+672
-175
lines changed

core/additions/utils.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ def is_negative(num: int):
1313
return True if num % -1 else False
1414

1515
def get_angle(target_pos, object_pos):
16-
pos1 = pg.math.Vector2(target_pos)
17-
pos2 = pg.math.Vector2(object_pos)
18-
return math.degrees(math.atan2(target_pos.y - object_pos.y, target_pos.x - object_pos.x))
16+
return math.degrees(math.atan2(target_pos[1] - object_pos[1], target_pos[0] - object_pos[0]))
1917

2018
# don't even try to understand this func (it's useless)
2119
def speed_compensation(direction: list, speed: float):

core/game/colliders/colliders.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def colliderect(self, rect):
2525
return False
2626

2727
def collidecircle(self, circle):
28-
if dist(self.position, circle.position) <= self.radius + circle.radius - 1:
28+
if dist(self.position, circle.position) < (self.radius + circle.radius) - 1:
2929
return True
3030
else:
3131
return False

core/game/dialogue.py

Lines changed: 226 additions & 5 deletions
Large diffs are not rendered by default.

core/game/enemy.py

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def fromdict(cls, asset, game=None): # method for loading an enemy object from a
6565
return cls(asset["game"] or game,asset["pos"], asset["time"], behavioregistry.rglist.get(asset["behavior"]), asset["behavior_args"])
6666

6767
def check_despawn(self): # despawn when outside of the fight area (you can change the values for more outside room of despawn)
68-
if self.pos[0] < -20 or self.pos[0] > 400 or self.pos[1] < -20 or self.pos[1] > 498:
68+
if self.pos[0] < -80 or self.pos[0] > 400 or self.pos[1] < -80 or self.pos[1] > 498:
6969
self.kill = True
7070

7171
def check_bullet(self): # check for player projectiles
@@ -76,6 +76,12 @@ def check_bullet(self): # check for player projectiles
7676
self.game.score += 10
7777
bul.kill = True
7878

79+
def shoot(self):
80+
self.game.proj_list.append(Projectile(self.game, (self.pos[0], self.pos[1] + 25), team="en", direction=(0, 1), speed=0.4))
81+
82+
def draw(self): # draw function
83+
pg.draw.rect(self.game.fight_area, (200, 0, 0), pg.Rect(self.pos, self.size))
84+
7985
def drop(self):
8086
drop = random.randint(1, 100)
8187
if drop >= 60 and drop <= 84:
@@ -85,13 +91,10 @@ def drop(self):
8591
elif drop >= 100:
8692
self.game.pickup_list.append(Big_Power_pickup(self.game, pos=self.pos))
8793

88-
def draw(self): # draw function
89-
pg.draw.rect(self.game.fight_area, (200, 0, 0), pg.Rect(self.pos, self.size))
90-
9194
def update(self): # update the enemy
9295
if self.game.frametime >= self.time:
9396
if self.cooldown <= 0:
94-
self.game.proj_list.append(Projectile(self.game, (self.pos[0], self.pos[1] + 25), team="en", direction=(0, 1), speed=0.4))
97+
self.shoot()
9598
self.cooldown = self.shot_cooldown
9699
self.cooldown -= 0.01
97100
if self.bh_enabled:
@@ -105,12 +108,12 @@ def update(self): # update the enemy
105108
self.check_despawn()
106109
self.draw()
107110

108-
class Boss(Enemy): # fork of the enemy class to make a boss (if you want to make a boss fork this class)
111+
class Testboss(Enemy): # fork of the enemy class to make a boss (if you want to make a boss fork this class)
109112
# commenting this shit another time
110113
def __init__(self, game, pos=(190, 400), time=0, behavior=None, behavior_args=[]):
111114
super().__init__(game, pos, time, behavior, behavior_args)
112115
self.game = game
113-
self.type = "Boss"
116+
self.type = "testboss"
114117
self.col_dmg = False
115118
self.dmg_resist = 1
116119
self.behavior = behavior
@@ -166,11 +169,11 @@ def update(self):
166169
self.game.musicregistry.rglist[self.theme_id].play(self.game.musicvolume)
167170
self.music_done = True
168171
self.game.soundregistry.rglist["damage00"].reload()
172+
if self.attorder[self.active_attack] != None:
173+
self.game.active_spell = self.attorder[self.active_attack].in_game_display_name
174+
else:
175+
self.game.active_spell = None
169176
try:
170-
if self.attorder[self.active_attack] != None:
171-
self.game.active_spell = self.attorder[self.active_attack].in_game_display_name
172-
else:
173-
self.game.active_spell = None
174177
if self.active_attack <= len(self.attorder):
175178
self.attorder[self.active_attack].update()
176179
else:
@@ -188,13 +191,7 @@ def update(self):
188191
proj.destroy()
189192
self.kill = True
190193
self.game.active_spell = None
191-
drop = random.randint(1, 100)
192-
if drop >= 60 and drop <= 84:
193-
self.game.pickup_list.append(Point_pickup(self.game, pos=self.pos))
194-
if drop >= 85 and drop <= 99:
195-
self.game.pickup_list.append(Power_pickup(self.game, pos=self.pos))
196-
elif drop >= 100:
197-
self.game.pickup_list.append(Big_Power_pickup(self.game, pos=self.pos))
194+
self.drop()
198195
self.center = (self.pos[0] + (self.size[0] // 2), self.pos[1] + (self.size[1] // 2))
199196
self.hitbox.update(self.center)
200197
self.check_bullet()

core/game/menusystem.py

Lines changed: 80 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import pygame as pg
22
import numpy as np
3+
from math import radians
34
import sys
45
from core.visuals.ui import *
56

@@ -22,12 +23,14 @@ def change_menu_ui_selected_down(self):
2223
if len(self.menus[self.current_menu_item].selectable_elements) != 0:
2324
if self.menu_ui_selected != len(self.menus[self.current_menu_item].selectable_elements):
2425
self.previous_menu_ui_select = self.menu_ui_selected
26+
self.menus[self.current_menu_item].selectable_elements[self.previous_menu_ui_select].is_selected = False
2527
self.menu_ui_selected += 1
2628

2729
def change_menu_ui_selected_up(self):
2830
if len(self.menus[self.current_menu_item].selectable_elements) != 0:
2931
if self.menu_ui_selected != 0:
3032
self.previous_menu_ui_select = self.menu_ui_selected
33+
self.menus[self.current_menu_item].selectable_elements[self.previous_menu_ui_select].is_selected = False
3134
self.menu_ui_selected -= 1
3235

3336

@@ -66,11 +69,71 @@ def update(self):
6669
for elem in self.elements:
6770
elem.update()
6871

69-
if len(self.selectable_elements) != 0:
70-
for elem in self.selectable_elements:
71-
elem.update()
72-
self.selectable_elements[self.menumanager.previous_menu_ui_select].is_selected = False
73-
self.selectable_elements[self.menumanager.menu_ui_selected].is_selected = True
72+
for elem in self.selectable_elements:
73+
elem.update()
74+
#self.selectable_elements[self.menumanager.previous_menu_ui_select].is_selected = False
75+
self.selectable_elements[self.menumanager.menu_ui_selected].is_selected = True
76+
77+
class ShotTypeSelectMenu(Menu):
78+
def __init__(self, game, menumanager):
79+
super().__init__(game, menumanager)
80+
self.ssc_angle = 0
81+
self.selected_shottype_circle = MenuLabel(self.game, (480, 320), "assets\\img\\sprites\\ui\\test.png", sprite_size=[300, 300])
82+
self.elements = [MenuText(self.game, [50, 50], size=40), MenuText(self.game, [50, 90], size=25), MenuText(self.game, [50, 120], size=25)]
83+
self.elements[0].text = JapaneseFontText(self.game, self.elements[0].pos, self.elements[0].size, text="博麗 霊夢")
84+
self.elements[1].text = JapaneseFontText(self.game, self.elements[1].pos, self.elements[1].size, text="広範囲をカバーショットタイプ")
85+
self.elements[2].text = JapaneseFontText(self.game, self.elements[2].pos, self.elements[2].size, text="速度: 中")
86+
self.selectable_elements = [
87+
MenuSelectableText(self.game, execute=self.game.new_game_reimu),
88+
MenuSelectableText(self.game, execute=self.game.new_game_marisa),
89+
MenuSelectableText(self.game, execute=self.game.new_game_alice),
90+
MenuSelectableText(self.game, execute=self.menumanager.change_current_menu, args=["mainmenu"]),
91+
]
92+
93+
def rotate_clockwise(self):
94+
self.ssc_angle -= 3
95+
def rotate_counterclockwise(self):
96+
self.ssc_angle += 3
97+
98+
def _update(self):
99+
self.selected_shottype_circle.draw_with_rot(self.ssc_angle)
100+
if self.menumanager.menu_ui_selected == 0 and self.ssc_angle != 0:
101+
self.elements[0].text_str = "博麗 霊夢"
102+
self.elements[1].text_str = "広範囲をカバーショットタイプ"
103+
self.elements[2].text_str = "速度: 中"
104+
if self.ssc_angle >= 0:
105+
self.rotate_clockwise()
106+
else:
107+
self.rotate_counterclockwise()
108+
if self.menumanager.menu_ui_selected == 1 and self.ssc_angle != 90:
109+
self.elements[0].text_str = "霧雨 魔理沙"
110+
self.elements[1].text_str = "前方中心のショットタイプ"
111+
self.elements[2].text_str = "速度: 速い"
112+
if self.ssc_angle >= 90:
113+
self.rotate_clockwise()
114+
else:
115+
self.rotate_counterclockwise()
116+
if self.menumanager.menu_ui_selected == 2 and self.ssc_angle != 180:
117+
self.elements[0].text_str = "上海アリス幻樂団"
118+
self.elements[1].text_str = "ハイブリッドショットタイプ"
119+
self.elements[2].text_str = "速度: 中"
120+
if self.ssc_angle >= 180:
121+
self.rotate_clockwise()
122+
else:
123+
self.rotate_counterclockwise()
124+
if self.menumanager.menu_ui_selected == 3 and self.ssc_angle != 270:
125+
self.elements[0].text_str = "EXIT"
126+
self.elements[1].text_str = ""
127+
self.elements[2].text_str = ""
128+
if self.ssc_angle >= 270:
129+
self.rotate_clockwise()
130+
else:
131+
self.rotate_counterclockwise()
132+
133+
134+
def update(self):
135+
self._update()
136+
return super().update()
74137

75138
class MenuBar:
76139
def __init__(self, game, pos:list = [0, 0], text = None, textcolor = None, barcolor = None, textsize = None, size = None):
@@ -164,7 +227,7 @@ def on_use(self):
164227
else:
165228
self.text.on_use(*self.args)
166229
except Exception:
167-
self.game.soundregistry.rglist["cancel"].play()
230+
self.game.soundregistry.rglist["cancel"].play(self.game.soundvolume)
168231
self.game.soundregistry.rglist["cancel"].reload()
169232

170233
def update_status(self):
@@ -184,16 +247,20 @@ def update(self):
184247

185248

186249
class MenuLabel:
187-
def __init__(self, game, pos: list = [0, 0], img_path: pg.Surface = None):
250+
def __init__(self, game, pos: list = [0, 0], img_path: str = "", sprite_size=[]):
188251
self.game = game
189252
self.pos = pos
190253
try:
191-
if img_path is not str or img_path is not None:
192-
self.img = pg.image.load(img_path).convert_alpha()
254+
if img_path:
255+
self.img = pg.image.load(img_path)#.convert_alpha()
193256
else:
194257
self.img = pg.image.load("assets/img/guesswhatismissing.png")
195258
except FileNotFoundError:
196259
self.img = pg.image.load("assets/img/guesswhatismissing.png")
260+
if sprite_size == []:
261+
self.sprite_size = list(self.img.get_size())
262+
else:
263+
self.sprite_size = sprite_size
197264

198265
def no(self): ... # reserved
199266
def no(self): ... # reserved
@@ -204,8 +271,6 @@ def no(self): ... # reserved
204271
def no(self): ... # reserved
205272
def no(self): ... # reserved
206273
def no(self): ... # reserved
207-
def update(self):
208-
self.game.screen.blit(self.img, self.pos)
209274
def change_img(self, img_path):
210275
try:
211276
if img_path is not str or img_path is not None:
@@ -220,7 +285,10 @@ def update(self):
220285
self.draw()
221286

222287
def draw(self):
223-
self.game.screen.blit(self.img, self.pos)
288+
self.game.screen.blit(pg.transform.scale(self.img, self.sprite_size), self.pos)
289+
290+
def draw_with_rot(self, angle):
291+
self.game.screen.blit(pg.transform.rotate(pg.transform.scale(self.img, self.sprite_size), angle), self.pos)
224292

225293
class MenuRect:
226294
'''optional args: \n

core/game/nonspells.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,15 @@ def __init__(self, game, inflictor=None, difficulty=None):
1919
self.cooldown = 0
2020
self.difficulty = difficulty
2121
self.inflictor = inflictor
22-
22+
23+
def shoot(self, name="ball_white", pos=(0, 0), angle=0, speed=10):
24+
self.game.projregistry.shoot(name, pos, angle, speed)
25+
26+
def shoottest(self, name="ball_white", pos=(0, 0), angle=0, speed=[10, 10]):
27+
self.game.projregistry.shoottest(name, pos, angle, speed)
28+
2329
def do(self):
24-
self.game.projregistry.shoot("ball_red", self.inflictor.hitbox.position, get_angle(self.game.player.hitbox.position ,self.inflictor.hitbox.position), 3)
30+
pass
2531

2632
def update(self):
2733
if not self.active:

core/game/pickups.py

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import pygame as pg
22
from core.game.colliders import CircleCollider
3+
from math import cos, sin, radians
4+
from core.additions.utils import get_angle
35

46

57
class Power_pickup:
@@ -20,16 +22,35 @@ def __init__(self, game, pos=(10, 300), vel=-0.2):
2022
self.vel = vel
2123

2224
self.kill = False
25+
self.follow = False
2326

24-
self.hitbox = CircleCollider(15, self.center)
27+
self.hitbox = CircleCollider(5, self.center)
28+
29+
self.angle = radians(get_angle(self.game.player.graze_hitbox.position, self.pos))
30+
self.launch()
31+
32+
def start_follow(self):
33+
self.follow = True
34+
35+
def launch(self):
36+
self.dx, self.dy = cos(self.angle) * 5, sin(self.angle) * 5
2537

2638
def draw(self):
2739
pg.draw.rect(self.game.fight_area, (255, 255, 255), pg.Rect(self.pos[0] - 2, self.pos[1] - 2, self.size[0] + 4, self.size[1] + 4))
2840
pg.draw.rect(self.game.fight_area, (255, 0, 0), pg.Rect(self.pos[0], self.pos[1], self.size[0], self.size[1]))
2941

3042
def update(self):
31-
self.pos[1] += self.vel
32-
self.vel += 0.0062
43+
if self.follow:
44+
self.angle = radians(get_angle(self.game.player.graze_hitbox.position, self.pos))
45+
self.launch()
46+
self.pos[0] += self.dx
47+
self.pos[1] += self.dy
48+
else:
49+
self.pos[1] += self.vel
50+
self.vel += 0.0062
51+
if self.pos[0] >= 800:
52+
self.kill = True
53+
self.center = (self.pos[0] + (self.size[0] // 2), self.pos[1] + (self.size[1] // 2))
3354
self.hitbox.update(self.center)
3455
self.draw()
3556

@@ -52,7 +73,7 @@ def __init__(self, game, pos=(10, 300), vel=-0.2):
5273

5374
self.kill = False
5475

55-
self.hitbox = CircleCollider(15, self.center)
76+
self.hitbox = CircleCollider(5, self.center)
5677

5778
def draw(self):
5879
pg.draw.rect(self.game.fight_area, (255, 255, 255), pg.Rect(self.pos[0] - 2, self.pos[1] - 2, self.size[0] + 4, self.size[1] + 4))
@@ -61,6 +82,8 @@ def draw(self):
6182
def update(self):
6283
self.pos[1] += self.vel
6384
self.vel += 0.0062
85+
if self.pos[0] >= 800:
86+
self.kill = True
6487
self.center = (self.pos[0] + (self.size[0] // 2), self.pos[1] + (self.size[1] // 2))
6588
self.hitbox.update(self.center)
6689
self.draw()
@@ -79,33 +102,50 @@ def __init__(self, game, pos=(10, 300), vel=-0.2):
79102

80103
class Point_pickup(Power_pickup):
81104
def __init__(self, game, pos=(10, 300), vel=-0.2):
105+
super().__init__(game, pos, vel)
82106
self.game = game
83107
self.size = [20, 20]
84108
self.pos = list(pos)
85109
self.center = (self.pos[0] + (self.size[0] // 2), self.pos[1] + (self.size[1] // 2))
86110

87111
self.type = "col"
88112

89-
self.points = 56550
113+
self.points = 50000
90114
self.power = 1
91115

92116
self.vel = vel
93117

94118
self.kill = False
95119

96-
self.hitbox = CircleCollider(15, self.center)
120+
self.hitbox = CircleCollider(5, self.center)
97121

98122
def draw(self):
99123
pg.draw.rect(self.game.fight_area, (255, 255, 255), pg.Rect(self.pos[0] - 2, self.pos[1] - 2, self.size[0] + 4, self.size[1] + 4))
100124
pg.draw.rect(self.game.fight_area, (0, 0, 255), pg.Rect(self.pos[0], self.pos[1], self.size[0], self.size[1]))
125+
126+
class Score_Pickup(Point_pickup):
127+
def __init__(self, game, pos=(10, 300), vel=-0.2):
128+
super().__init__(game, pos, vel)
129+
self.size = [10, 10]
130+
self.points = 100
131+
132+
def draw(self):
133+
pg.draw.rect(self.game.fight_area, (255, 255, 255), pg.Rect(self.pos[0] - 2, self.pos[1] - 2, self.size[0] + 4, self.size[1] + 4))
134+
pg.draw.rect(self.game.fight_area, (0, 150, 0), pg.Rect(self.pos[0], self.pos[1], self.size[0], self.size[1]))
101135

102136
def update(self):
103-
if self.pos[1] >= 1000:
137+
self.follow = True
138+
if self.pos[1] >= 800:
104139
self.kill = True
105-
self.pos[1] += self.vel
106-
self.vel += 0.0062
140+
if self.follow:
141+
self.launch()
142+
self.pos[0] += self.dx
143+
self.pos[1] += self.dy
144+
else:
145+
self.pos[1] += self.vel
146+
self.vel += 0.0062
107147
self.center = (self.pos[0] + (self.size[0] // 2), self.pos[1] + (self.size[1] // 2))
108-
self.hitbox.update()
148+
self.hitbox.update(self.center)
109149
self.draw()
110150

111151
class Life_pickup(Power_pickup):

0 commit comments

Comments
 (0)