CrashOverrideX
Sealing v8.1 Subjectively Aware Standard for Hugging Face. Clean Model & Knowledge release.
a3e5f70
from settings import *
from os.path import join
from os import walk
from pytmx.util_pygame import load_pygame
# import functions
def import_image(*path, alpha = True, format = 'png'):
full_path = join(*path) + f'.{format}'
surf = pygame.image.load(full_path).convert_alpha() if alpha else pygame.image.load(full_path).convert()
return surf
def import_folder(*path):
frames = []
for folder_path, sub_folders, image_names in walk(join(*path)):
for image_name in sorted(image_names, key = lambda name: int(name.split('.')[0])):
full_path = join(folder_path, image_name)
surf = pygame.image.load(full_path).convert_alpha()
frames.append(surf)
return frames
def import_folder_dict(*path):
frames = {}
for folder_path, sub_folders, image_names in walk(join(*path)):
for image_name in image_names:
full_path = join(folder_path, image_name)
surf = pygame.image.load(full_path).convert_alpha()
frames[image_name.split('.')[0]] = surf
return frames
def import_sub_folders(*path):
frames = {}
for _, sub_folders, __ in walk(join(*path)):
if sub_folders:
for sub_folder in sub_folders:
frames[sub_folder] = import_folder(*path, sub_folder)
return frames
def import_tilemap(cols, rows, *path):
frames = {}
surf = import_image(*path)
cell_width, cell_height = surf.get_width() / cols, surf.get_height() / rows
for col in range(cols):
for row in range(rows):
cutout_rect = pygame.Rect(col * cell_width, row * cell_height,cell_width,cell_height)
cutout_surf = pygame.Surface((cell_width, cell_height))
cutout_surf.fill('green')
cutout_surf.set_colorkey('green')
cutout_surf.blit(surf, (0,0), cutout_rect)
frames[(col, row)] = cutout_surf
return frames
def character_importer(cols, rows, *path):
frame_dict = import_tilemap(cols, rows, *path)
new_dict = {}
for row, direction in enumerate(('down', 'left', 'right', 'up')):
new_dict[direction] = [frame_dict[(col, row)] for col in range(cols)]
new_dict[f'{direction}_idle'] = [frame_dict[(0, row)]]
return new_dict
def all_character_import(*path):
new_dict = {}
for _, __, image_names in walk(join(*path)):
for image in image_names:
image_name = image.split('.')[0]
new_dict[image_name] = character_importer(4,4,*path, image_name)
return new_dict
def coast_importer(cols, rows, *path):
frame_dict = import_tilemap(cols, rows, *path)
new_dict = {}
terrains = ['grass', 'grass_i', 'sand_i', 'sand', 'rock', 'rock_i', 'ice', 'ice_i']
sides = {
'topleft': (0,0), 'top': (1,0), 'topright': (2,0),
'left': (0,1), 'right': (2,1), 'bottomleft': (0,2),
'bottom': (1,2), 'bottomright': (2,2)}
for index, terrain in enumerate(terrains):
new_dict[terrain] = {}
for key, pos in sides.items():
new_dict[terrain][key] = [frame_dict[(pos[0] + index * 3, pos[1] + row)] for row in range(0,rows, 3)]
return new_dict
def tmx_importer(*path):
tmx_dict = {}
for folder_path, sub_folders, file_names in walk(join(*path)):
for file in file_names:
tmx_dict[file.split('.')[0]] = load_pygame(join(folder_path, file))
return tmx_dict
def monster_importer(cols, rows, *path):
monster_dict = {}
for folder_path, sub_folders, image_names in walk(join(*path)):
for image in image_names:
image_name = image.split('.')[0]
monster_dict[image_name] = {}
frame_dict = import_tilemap(cols, rows, *path, image_name)
for row, key in enumerate(('idle', 'attack')):
monster_dict[image_name][key] = [frame_dict[(col,row)] for col in range(cols)]
return monster_dict
def outline_creator(frame_dict, width):
outline_frame_dict = {}
for monster, monster_frames in frame_dict.items():
outline_frame_dict[monster] = {}
for state, frames in monster_frames.items():
outline_frame_dict[monster][state] = []
for frame in frames:
new_surf = pygame.Surface(vector(frame.get_size()) + vector(width * 2), pygame.SRCALPHA)
new_surf.fill((0,0,0,0))
white_frame = pygame.mask.from_surface(frame).to_surface()
white_frame.set_colorkey('black')
new_surf.blit(white_frame, (0,0))
new_surf.blit(white_frame, (width,0))
new_surf.blit(white_frame, (width * 2,0))
new_surf.blit(white_frame, (width * 2,width))
new_surf.blit(white_frame, (width * 2,width * 2))
new_surf.blit(white_frame, (width,width * 2))
new_surf.blit(white_frame, (0,width * 2))
new_surf.blit(white_frame, (0,width))
outline_frame_dict[monster][state].append(new_surf)
return outline_frame_dict
def attack_importer(*path):
attack_dict = {}
for folder_path, _, image_names in walk(join(*path)):
for image in image_names:
image_name = image.split('.')[0]
attack_dict[image_name] = list(import_tilemap(4,1,folder_path, image_name).values())
return attack_dict
def audio_importer(*path):
files = {}
for folder_path, _, file_names in walk(join(*path)):
for file_name in file_names:
full_path = join(folder_path, file_name)
files[file_name.split('.')[0]] = pygame.mixer.Sound(full_path)
return files
# game functions
def draw_bar(surface, rect, value, max_value, color, bg_color, radius = 1):
ratio = rect.width / max_value
bg_rect = rect.copy()
progress = max(0, min(rect.width,value * ratio))
progress_rect = pygame.FRect(rect.topleft, (progress,rect.height))
pygame.draw.rect(surface, bg_color, bg_rect, 0, radius)
pygame.draw.rect(surface, color, progress_rect, 0, radius)
def check_connections(radius, entity, target, tolerance = 30):
relation = vector(target.rect.center) - vector(entity.rect.center)
if relation.length() < radius:
if entity.facing_direction == 'left' and relation.x < 0 and abs(relation.y) < tolerance or\
entity.facing_direction == 'right' and relation.x > 0 and abs(relation.y) < tolerance or\
entity.facing_direction == 'up' and relation.y < 0 and abs(relation.x) < tolerance or\
entity.facing_direction == 'down' and relation.y > 0 and abs(relation.x) < tolerance:
return True