From 32666d4e2d49a9888f000a53e1b46494a357498b Mon Sep 17 00:00:00 2001 From: GreenXenith <24834740+GreenXenith@users.noreply.github.com> Date: Sat, 2 May 2020 14:33:32 -0700 Subject: [PATCH] Cleanup --- map.json | 49 ------------------------------------------------- src/dungeon.py | 6 +++--- src/fade.py | 3 ++- src/game.py | 8 +++++--- src/hud.py | 1 + src/level.py | 4 ++-- src/map.py | 4 ---- src/player.py | 4 ++-- src/register.py | 2 +- src/slime.py | 4 +++- src/sprite.py | 2 +- src/tiles.py | 4 +++- src/vector.py | 4 ++-- 13 files changed, 25 insertions(+), 70 deletions(-) delete mode 100644 map.json diff --git a/map.json b/map.json deleted file mode 100644 index fd4c1ae..0000000 --- a/map.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "tiles": [ - "floor_cobble.png", - "wall_cobble_down.png", - "wall_cobble_right.png", - "wall_cobble_up.png", - "wall_cobble_left.png", - "wall_cobble_corner_nw_inner.png", - "wall_cobble_corner_ne_inner.png", - "wall_cobble_corner_se_inner.png", - "wall_cobble_corner_sw_inner.png", - "wall_cobble_corner_nw_outer.png", - "wall_cobble_corner_ne_outer.png", - "wall_cobble_corner_se_outer.png", - "wall_cobble_corner_sw_outer.png" - ], - "renderLayers": [ - [ - [0, 0, 0, 0, 0, 0, 0, 0], - [0, 1, 1, 1, 1, 1, 1, 0], - [0, 1, 1, 1, 1, 1, 1, 0], - [0, 1, 1, 1, 1, 1, 1, 0], - [0, 1, 1, 1, 1, 0, 0, 0], - [0, 1, 1, 1, 0, 0, 0, 0], - [0, 1, 1, 1, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0, 0, 0] - ], - [ - [6, 2, 2, 2, 2, 2, 2, 7], - [3, 0, 0, 0, 0, 0, 0, 5], - [3, 0, 0, 0, 0, 0, 0, 5], - [3, 0, 0, 0, 0, 0, 0, 5], - [3, 0, 0, 0, 10, 4, 4, 8], - [3, 0, 0, 0, 5, 0, 0, 0], - [3, 0, 0, 0, 5, 0, 0, 0], - [9, 4, 4, 4, 8, 0, 0, 0] - ] - ], - "boundaries": [ - [1, 1, 1, 1, 1, 1, 1, 1], - [1, 0, 0, 0, 0, 0, 0, 1], - [1, 0, 0, 0, 0, 0, 0, 1], - [1, 0, 0, 0, 0, 0, 0, 1], - [1, 0, 0, 0, 1, 1, 1, 1], - [1, 0, 0, 0, 1, 0, 0, 0], - [1, 0, 0, 0, 1, 0, 0, 0], - [1, 1, 1, 1, 1, 0, 0, 0] - ] -} diff --git a/src/dungeon.py b/src/dungeon.py index 4f29f43..0ff7bb4 100644 --- a/src/dungeon.py +++ b/src/dungeon.py @@ -26,7 +26,7 @@ class Room(): def intersects(self, other): return self.left <= other.right and self.right >= other.left and self.top <= other.bottom and self.bottom >= other.top -# Generator as class in case its used multiple times +# Generator as class (for multiple levels) class Generator(): def __init__(self, width, height = None): self.rooms = [] # Stores room objects @@ -79,6 +79,7 @@ class Generator(): room1 = self.rooms[i] room2 = self.rooms[i + 1] + # Horizontal/vertical connections if rand(0, 2) == 0: if room1.cx <= room2.cx: self.horiz_corridor(room1.cx, room2.cx, room1.cy) @@ -107,7 +108,7 @@ class Generator(): for row in range(y1, y2 + 3): for col in range(x - 1, x + 3): self.board[row][col] = 1 - + def value_at(self, x, y): try: return self.board[y][x] @@ -133,7 +134,6 @@ class Generator(): arot = 0 # Last adjacent key for key in range(len(asides)): off = asides[key] - # if self.board[y + off[1]][x + off[0]] == 0: if self.value_at(x + off[0], y + off[1]) == 0: adj += 1 arot = key diff --git a/src/fade.py b/src/fade.py index 1b991df..45d61b7 100644 --- a/src/fade.py +++ b/src/fade.py @@ -6,7 +6,7 @@ class Fade(): self.image = pygame.Surface(rect.size, flags=pygame.SRCALPHA) self.alpha = start self.rate = rate - self.text = "" + self.text = "" # Used for death message def update(self, surface, dtime): self.alpha = max(0, min(self.alpha + int(self.rate * dtime), 255)) @@ -16,6 +16,7 @@ class Fade(): self.image.fill((0, 0, 0, self.alpha)) surface.blit(self.image, (0, 0)) + # Alpha surface blitting for translucent text text = pygame.font.SysFont("Times New Roman", round(rect.width / 16)).render(self.text, True, (255, 255, 255)) alphasurf = pygame.Surface(text.get_size(), pygame.SRCALPHA) alphasurf.fill((255, 255, 255, self.alpha)) diff --git a/src/game.py b/src/game.py index ade31ba..88c2722 100644 --- a/src/game.py +++ b/src/game.py @@ -27,7 +27,6 @@ from .player import Player # Map map = Map(METER) -# map.load("map.json") map.generate(0) # Player @@ -40,6 +39,7 @@ player.set_pos(mroom.cx, mroom.cy) CENTER = [winsize[0] / 2, winsize[1] / 2] BGCOLOR = pygame.Color("#2d1003") +# Fade from/to black player.fade = fade.Fade(255, -96) def get_screenpos(x, y): @@ -55,7 +55,7 @@ while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() - elif event.type == pygame.VIDEORESIZE: + elif event.type == pygame.VIDEORESIZE: # This is currently broken on Linux (SDL2) winsize = event.size SCALE = 2 * (winsize[0] / 800) CENTER = [winsize[0] / 2, winsize[1] / 2] @@ -72,6 +72,7 @@ while 1: player_rendered = False + # Render loops for z in range(player.z - 1, player.z + 1): if z < len(map.map): for y in range(len(map.map[z])): @@ -106,9 +107,11 @@ while 1: if z < len(map.sprites): for sprite in map.sprites[z]: if y == math.ceil(sprite.pos.y): + # Do on_step within 10 meter radius if vector.distance(sprite.pos, player.pos) <= 10: sprite.on_step(dtime, map, player) + # Only render if on-screen scaledsize = [round(SCALE * sprite.texture.width), round(SCALE * sprite.texture.height)] pos = get_screenpos(sprite.pos.x, sprite.pos.y) if pos[0] + scaledsize[0] >= 0 and pos[0] <= winsize[0] and \ @@ -116,7 +119,6 @@ while 1: screen.blit(pygame.transform.rotate(pygame.transform.scale(sprite.texture.frame, scaledsize), sprite.rot), pos) player.hud.render(screen, SCALE) - player.fade.update(screen, dtime) pygame.display.update() diff --git a/src/hud.py b/src/hud.py index 749f32f..cf60cbf 100644 --- a/src/hud.py +++ b/src/hud.py @@ -2,6 +2,7 @@ import pygame import math from . import assets +# Returns a surface that can be blitted def make_element(defn, scale): element = None diff --git a/src/level.py b/src/level.py index d377b34..39fc670 100644 --- a/src/level.py +++ b/src/level.py @@ -4,7 +4,7 @@ import math def populate(map, generator, z): # Place stairways mroom = generator.rooms[int(math.ceil(len(generator.rooms) / 2))] # Middle room - if z != 0: + if z != 0: # Don't put a stair up on the first level enterx = mroom.x + rand(2, mroom.width - 2) entery = mroom.y + rand(2, mroom.height - 3) map.set_tile(enterx, entery, z + 1, "map:stair_up") @@ -37,7 +37,7 @@ def populate(map, generator, z): map.set_tile(room.x + x, room.y + y, z + 1, l[0]) placed = True - # Place enemy spawners + # Place enemy spawners (level-based) for room in generator.rooms: if room == froom or room == lroom or (room != mroom and rand(0, 1) == 0): # 1 in 2 chance of enemies max_count = rand(3, (z * 2) + 3) diff --git a/src/map.py b/src/map.py index afcfb0b..ad325d4 100644 --- a/src/map.py +++ b/src/map.py @@ -13,10 +13,6 @@ class Map: def __init__(self, meter): self.METER = meter # Pixels per 1 meter - # def load(self, filename): - # with open(filename) as file: - # self.map = json.load(file) - def generate(self, z): generator = dungeon.Generator(40 + 4 * math.floor(z / 2)) # +4m^2 per level generator.generate(self, z) diff --git a/src/player.py b/src/player.py index dc3e10c..36c908e 100644 --- a/src/player.py +++ b/src/player.py @@ -133,7 +133,7 @@ class Player: self.texture.set_animation(self.dir * 4, (self.dir * 4) + 3, self.speed * 2) else: self.texture.set_animation(self.dir * 4, self.dir * 4, 0) - + # Do attacking if controller.is_down("attack"): if not self.attacking and time.time() - self.last_attack >= 0.7: @@ -157,7 +157,7 @@ class Player: if sprite.name[:6] == "enemy:": if vector.distance(slash.pos, sprite.pos) <= 1: sprite.hp -= 3 + (self.xp // 15) - sprite.vel = (sprite.vel * -2) + self.vel + (self.look * 2) + sprite.vel = (sprite.vel * -2) + self.vel + (self.look * 2) # Knockback if sprite.hp <= 0: setat = round(sprite.pos) map.set_tile(int(setat.x), int(setat.y), int(sprite.z), sprite.name + "_dead") diff --git a/src/register.py b/src/register.py index 35924cf..30e0c31 100644 --- a/src/register.py +++ b/src/register.py @@ -84,7 +84,7 @@ def next_level(self, _, map, player): if math.hypot(player.pos.x - self.pos[0], player.pos.y + 1 - self.pos[1]) <= 1 \ and controller.is_down("shift") and time.time() - player.last_level_change > 0.5: player.z += 2 - if not player.z - 1 in map.generators: + if not player.z - 1 in map.generators: # Generate level if new map.generate(player.z - 1) generator = map.generators[player.z - 1] diff --git a/src/slime.py b/src/slime.py index aba896a..8dd59e9 100644 --- a/src/slime.py +++ b/src/slime.py @@ -6,6 +6,7 @@ from .vector import Vector def slime_logic(self, dtime, map, player): self.timer += dtime if self.timer >= 0.3: # Let's not do raycasting every frame + # Look for a target if vector.distance(self.pos, player.pos) <= 6 \ and len(map.raycast(self.pos, player.pos, self.z)) == 0: self.target_pos = player.pos @@ -19,7 +20,8 @@ def slime_logic(self, dtime, map, player): if vector.distance(self.pos, player.pos) <= 1: if rand(0, 15) == 0: player.set_hp(player.hp - 2) - + + # Look for a new destination if self.target_pos == self.pos: if rand(0, 2) == 0: dest = self.pos + Vector(rand(-5, 5), rand(-5, 5)) diff --git a/src/sprite.py b/src/sprite.py index 08053c4..662db78 100644 --- a/src/sprite.py +++ b/src/sprite.py @@ -31,7 +31,7 @@ class Sprite: def set_rect(self, x, y, w, h): self.rect = pygame.Rect(x, y, w, h) - + def get_rect(self): return self.rect diff --git a/src/tiles.py b/src/tiles.py index b00f75f..9a62ef7 100644 --- a/src/tiles.py +++ b/src/tiles.py @@ -3,6 +3,8 @@ import pygame global registered_tiles registered_tiles = {} +# Content IDs are currently unused +# They would be used for map-saving content_ids = [] content_id_map = {} @@ -50,7 +52,7 @@ class Tile: def is_solid(self): return self.get("solid") == True - + def on_step(self, dtime, map, player): if "on_step" in registered_tiles[self.name]: registered_tiles[self.name]["on_step"](self, dtime, map, player) diff --git a/src/vector.py b/src/vector.py index ad4d9e8..ae1730e 100644 --- a/src/vector.py +++ b/src/vector.py @@ -19,7 +19,7 @@ class Vector: def __eq__(self, b): vec = vec_or_num(b) return self.x == vec.x and self.y == vec.y - + def __ne__(self, b): vec = vec_or_num(b) return self.x != vec.x or self.y != vec.y @@ -48,7 +48,7 @@ class Vector: def __ceil__(self): return Vector(math.ceil(self.x), math.ceil(self.y)) - + def flip(self): return Vector(self.y, self.x)