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 |