def __init__(self, pos, sprite, item_type, effect): '''Item that can be picked up by the player\npos -> tile pos | sprite -> texture path | item_type -> health, armor, *ammo*, gun\neffect -> relative''' self.pos = (pos[0] * SETTINGS.tile_size, pos[1] * SETTINGS.tile_size) self.map_pos = pos self.item_type = item_type self.rect = pygame.Rect(self.pos[0], self.pos[1], int(SETTINGS.tile_size / 2), int(SETTINGS.tile_size / 2)) self.rect.center = (self.pos[0] + SETTINGS.tile_size / 2, self.pos[1] + SETTINGS.tile_size / 2) self.sprite = SPRITES.Sprite(pygame.image.load(sprite), hash(item_type), self.rect.center, 'sprite') self.effect = effect
def __init__(self, ID, pos, map_pos): self.ID = ID #position in pixels self.pos = pos self.type = SETTINGS.texture_type[self.ID] #position in tiles self.map_pos = map_pos self.distance = None self.solid = SETTINGS.tile_solid[self.ID] #For doors opening self.state = None self.timer = 0 if self.type == 'sprite': current_number = len(SETTINGS.all_sprites) #Need some weird coordinates to make it centered. self.texture = SPRITES.Sprite( SETTINGS.tile_texture[self.ID], self.ID, (self.pos[0] + SETTINGS.tile_size / 3, self.pos[1] + SETTINGS.tile_size / 3), 'sprite') self.rect = pygame.Rect(pos[0], pos[1], SETTINGS.tile_size, SETTINGS.tile_size) else: self.texture = SETTINGS.tile_texture[self.ID].texture self.texture = pygame.transform.scale( self.texture, (SETTINGS.tile_size, SETTINGS.tile_size)).convert() self.rect = self.texture.get_rect() self.rect.x = pos[0] self.rect.y = pos[1] if self.type == 'vdoor' or self.type == 'hdoor': self.open = 0 self.state = 'closed' #states: closed, opening, open, closing SETTINGS.all_doors.append(self)
def __init__(self, stats, sounds, texture): #Technical settings self.stats = stats #Used for creating new NPCs self.sounds = sounds self.ID = stats['id'] self.map_pos = stats['pos'] self.pos = [self.map_pos[0]*SETTINGS.tile_size, self.map_pos[1]*SETTINGS.tile_size] self.face = stats['face'] self.frame_interval = stats['spf'] #Visual and rect settings self.rect = pygame.Rect((self.pos[0], self.pos[1]), (SETTINGS.tile_size/3, SETTINGS.tile_size/3)) self.rect.center = (self.pos[0] + SETTINGS.tile_size/2, self.pos[1] + SETTINGS.tile_size/2) self.real_x = self.rect.x self.real_y = self.rect.y #Initialise boring variables self.timer = 0 self.idle_timer = 0 self.die_animation = False self.running_animation = None self.add = 0 self.dist = None self.collide_list = SETTINGS.all_solid_tiles + SETTINGS.npc_list self.solid = True self.side = None self.in_canvas = False self.path = [] self.path_progress = 0 self.attack_move = False self.atckchance = 5 self.movechance = 10 self.knockback = 0 self.postheta = 0 self.mein_leben = False self.type = 'npc' #NPC Characteristics self.health = stats['health'] self.speed = stats['speed'] self.OG_speed = self.speed self.mind = stats['mind'] self.state = stats['state'] self.OG_state = self.state self.atcktype = stats['atcktype'] self.name = stats['name'] if stats['dmg'] != 3.1415: self.dmg = stats['dmg'] else: self.dmg = random.choice([0,0,1]) self.atckrate = stats['atckrate'] self.range = 5 #Npc actions self.dead = False self.moving = False self.attacking = False self.hurting = False self.player_in_view = False #Textures and animations self.texture_path = texture # Used for creating new NPCS self.texture = pygame.image.load(texture).convert_alpha() self.texturerect = self.texture.get_rect() self.stand_texture = [self.texture.subsurface(0,0,64,128).convert_alpha(), self.texture.subsurface(64,0,64,128).convert_alpha(), self.texture.subsurface(128,0,64,128).convert_alpha(), self.texture.subsurface(192,0,64,128).convert_alpha(), self.texture.subsurface(256,0,64,128).convert_alpha(), self.texture.subsurface(320,0,64,128).convert_alpha(), self.texture.subsurface(384,0,64,128).convert_alpha(), self.texture.subsurface(448,0,64,128).convert_alpha()] self.front_texture = [self.texture.subsurface(0,128,64,128).convert_alpha(), self.texture.subsurface(64,128,64,128).convert_alpha(), self.texture.subsurface(128,128,64,128).convert_alpha(), self.texture.subsurface(192,128,64,128).convert_alpha(), self.texture.subsurface(256,128,64,128).convert_alpha(), self.texture.subsurface(320,128,64,128).convert_alpha(), self.texture.subsurface(384,128,64,128).convert_alpha(), self.texture.subsurface(448,128,64,128).convert_alpha(), self.texture.subsurface(512,128,64,128).convert_alpha(), self.texture.subsurface(576,128,64,128).convert_alpha()] self.frontright_texture = [self.texture.subsurface(0,256,64,128).convert_alpha(), self.texture.subsurface(64,256,64,128).convert_alpha(), self.texture.subsurface(128,256,64,128).convert_alpha(), self.texture.subsurface(192,256,64,128).convert_alpha(), self.texture.subsurface(256,256,64,128).convert_alpha(), self.texture.subsurface(320,256,64,128).convert_alpha(), self.texture.subsurface(384,256,64,128).convert_alpha(), self.texture.subsurface(448,256,64,128).convert_alpha(), self.texture.subsurface(512,256,64,128).convert_alpha(), self.texture.subsurface(576,256,64,128).convert_alpha()] self.right_texture = [self.texture.subsurface(0,384,64,128).convert_alpha(), self.texture.subsurface(64,384,64,128).convert_alpha(), self.texture.subsurface(128,384,64,128).convert_alpha(), self.texture.subsurface(192,384,64,128).convert_alpha(), self.texture.subsurface(256,384,64,128).convert_alpha(), self.texture.subsurface(320,384,64,128).convert_alpha(), self.texture.subsurface(384,384,64,128).convert_alpha(), self.texture.subsurface(448,384,64,128).convert_alpha(), self.texture.subsurface(512,384,64,128).convert_alpha(), self.texture.subsurface(576,384,64,128).convert_alpha()] self.backright_texture = [self.texture.subsurface(0,512,64,128).convert_alpha(), self.texture.subsurface(64,512,64,128).convert_alpha(), self.texture.subsurface(128,512,64,128).convert_alpha(), self.texture.subsurface(192,512,64,128).convert_alpha(), self.texture.subsurface(256,512,64,128).convert_alpha(), self.texture.subsurface(320,512,64,128).convert_alpha(), self.texture.subsurface(384,512,64,128).convert_alpha(), self.texture.subsurface(448,512,64,128).convert_alpha(), self.texture.subsurface(512,512,64,128).convert_alpha(), self.texture.subsurface(576,512,64,128).convert_alpha()] self.back_texture = [self.texture.subsurface(0,640,64,128).convert_alpha(), self.texture.subsurface(64,640,64,128).convert_alpha(), self.texture.subsurface(128,640,64,128).convert_alpha(), self.texture.subsurface(192,640,64,128).convert_alpha(), self.texture.subsurface(256,640,64,128).convert_alpha(), self.texture.subsurface(320,640,64,128).convert_alpha(), self.texture.subsurface(384,640,64,128).convert_alpha(), self.texture.subsurface(448,640,64,128).convert_alpha(), self.texture.subsurface(512,640,64,128).convert_alpha(), self.texture.subsurface(576,640,64,128).convert_alpha()] self.backleft_texture = [] self.left_texture = [] self.frontleft_texture = [] for frame in self.backright_texture: self.backleft_texture.append(pygame.transform.flip(frame, True, False)) for frame in self.right_texture: self.left_texture.append(pygame.transform.flip(frame, True, False)) for frame in self.frontright_texture: self.frontleft_texture.append(pygame.transform.flip(frame, True, False)) self.die_texture = [self.texture.subsurface(0,768,64,128).convert_alpha(), self.texture.subsurface(64,768,64,128).convert_alpha(), self.texture.subsurface(128,768,64,128).convert_alpha(), self.texture.subsurface(192,768,64,128).convert_alpha(), self.texture.subsurface(256,768,64,128).convert_alpha(), self.texture.subsurface(320,768,64,128).convert_alpha(), self.texture.subsurface(384,768,64,128).convert_alpha(), self.texture.subsurface(448,768,64,128).convert_alpha(), self.texture.subsurface(512,768,64,128).convert_alpha(), self.texture.subsurface(576,768,64,128).convert_alpha(), self.texture.subsurface(640,768,64,128).convert_alpha()] self.hit_texture = [self.texture.subsurface(0,896,64,128).convert_alpha(), self.texture.subsurface(64,896,64,128).convert_alpha(), self.texture.subsurface(128,896,64,128).convert_alpha(), self.texture.subsurface(192,896,64,128).convert_alpha(), self.texture.subsurface(256,896,64,128).convert_alpha(), self.texture.subsurface(320,896,64,128).convert_alpha()] self.hurt_texture = [self.die_texture[0]] self.current_frame = 1 self.update_timer = 0 #Creating the sprite rect is awful, I know. Keeps it from entering walls. self.sprite = SPRITES.Sprite(self.front_texture[1], self.ID, [self.rect.centerx - int(SETTINGS.tile_size / 12), self.rect.centery - int(SETTINGS.tile_size / 10)], 'npc', self) #The position in SETTINGS.all_sprites of this NPC self.num = len(SETTINGS.all_sprites)-1
def __init__(self, stats, sounds, texture): #Technical settings self.uid = id(self) self.stats = stats #Used for creating new NPCs self.sounds = sounds self.ID = stats['id'] self.map_pos = stats['pos'] self.OG_map_pos = stats['pos'] self.pos = [self.map_pos[0]*SETTINGS.tile_size, self.map_pos[1]*SETTINGS.tile_size] self.face = stats['face'] self.frame_interval = stats['spf'] #Visual and rect settings self.rect = pygame.Rect((self.pos[0], self.pos[1]), (SETTINGS.tile_size/3, SETTINGS.tile_size/3)) self.rect.center = (self.pos[0] + SETTINGS.tile_size/2, self.pos[1] + SETTINGS.tile_size/2) self.real_x = self.rect.x self.real_y = self.rect.y #Initialise boring variables self.timer = 0 self.idle_timer = 0 self.alive_turn = 0 # make this number of "turns" rather than absolute timer self.die_animation = False self.running_animation = None self.add = 0 self.dist_from_player = None self.dist = None self.collide_list = SETTINGS.all_solid_tiles + SETTINGS.npc_list self.solid = True self.side = None self.in_canvas = False self.path = [] self.path_progress = 0 self.attack_move = False self.atckchance = 5 self.movechance = 10 self.knockback = 0 self.postheta = 0 self.mein_leben = False self.type = 'npc' self.last_seen_player_turn = None self.last_seen_player_position = None # debug maybe later messaging system? self.messages = [] # NPC Characteristics self.health = stats['health'] self.speed = stats['speed'] self.OG_speed = self.speed self.mind = stats['mind'] self.state = stats['state'] self.OG_state = self.state self.atcktype = stats['atcktype'] self.name = stats['name'] self.perception_range = int(SETTINGS.tile_size * random.choice([1, 1, 1, 1, 2, 2, 2, 3, 3, 4])) + SETTINGS.tile_size self.OG_perception_range = self.perception_range self.max_perception_range = int((SETTINGS.render * 0.8) * SETTINGS.tile_size) self.call_for_help_turns = 40 * random.choice(list(range(1, 4))) self.search_turns = (self.call_for_help_turns * random.choice([3, 3, 3, 4, 4, 5])) if stats['dmg'] != 3.1415: self.dmg = stats['dmg'] else: self.dmg = random.choice([1,2,3]) self.atckrate = stats['atckrate'] self.range = 5 #make first level easier if SETTINGS.current_level == 0 and SETTINGS.levels_list == SETTINGS.glevels_list: self.health = int(self.health * 0.8) self.dmg = int(self.dmg * 0.8) #Make late levels harder >:) elif SETTINGS.current_level > 4 and SETTINGS.levels_list == SETTINGS.glevels_list: self.health += int(SETTINGS.current_level / 3) self.dmg += int(SETTINGS.current_level / 5) #Make NPC stronger if player is doing well if SETTINGS.player_health >= 90 or SETTINGS.player_armor >= 90: self.dmg += 2 #Give NPC more health if player has lots of ammo - phew, long line. if SETTINGS.inventory['primary'] and SETTINGS.held_ammo[SETTINGS.inventory['primary'].ammo_type] >= SETTINGS.max_ammo[SETTINGS.inventory['primary'].ammo_type]: self.health = int(self.health * 1.5) #Npc actions self.dead = False self.moving = False self.attacking = False self.hurting = False self.player_in_view = False #Textures and animations self.texture_path = texture # Used for creating new NPCS self.texture = pygame.image.load(texture).convert_alpha() self.texturerect = self.texture.get_rect() self.stand_texture = [self.texture.subsurface(0,0,64,128).convert_alpha(), self.texture.subsurface(64,0,64,128).convert_alpha(), self.texture.subsurface(128,0,64,128).convert_alpha(), self.texture.subsurface(192,0,64,128).convert_alpha(), self.texture.subsurface(256,0,64,128).convert_alpha(), self.texture.subsurface(320,0,64,128).convert_alpha(), self.texture.subsurface(384,0,64,128).convert_alpha(), self.texture.subsurface(448,0,64,128).convert_alpha()] self.front_texture = [self.texture.subsurface(0,128,64,128).convert_alpha(), self.texture.subsurface(64,128,64,128).convert_alpha(), self.texture.subsurface(128,128,64,128).convert_alpha(), self.texture.subsurface(192,128,64,128).convert_alpha(), self.texture.subsurface(256,128,64,128).convert_alpha(), self.texture.subsurface(320,128,64,128).convert_alpha(), self.texture.subsurface(384,128,64,128).convert_alpha(), self.texture.subsurface(448,128,64,128).convert_alpha(), self.texture.subsurface(512,128,64,128).convert_alpha(), self.texture.subsurface(576,128,64,128).convert_alpha()] self.frontright_texture = [self.texture.subsurface(0,256,64,128).convert_alpha(), self.texture.subsurface(64,256,64,128).convert_alpha(), self.texture.subsurface(128,256,64,128).convert_alpha(), self.texture.subsurface(192,256,64,128).convert_alpha(), self.texture.subsurface(256,256,64,128).convert_alpha(), self.texture.subsurface(320,256,64,128).convert_alpha(), self.texture.subsurface(384,256,64,128).convert_alpha(), self.texture.subsurface(448,256,64,128).convert_alpha(), self.texture.subsurface(512,256,64,128).convert_alpha(), self.texture.subsurface(576,256,64,128).convert_alpha()] self.right_texture = [self.texture.subsurface(0,384,64,128).convert_alpha(), self.texture.subsurface(64,384,64,128).convert_alpha(), self.texture.subsurface(128,384,64,128).convert_alpha(), self.texture.subsurface(192,384,64,128).convert_alpha(), self.texture.subsurface(256,384,64,128).convert_alpha(), self.texture.subsurface(320,384,64,128).convert_alpha(), self.texture.subsurface(384,384,64,128).convert_alpha(), self.texture.subsurface(448,384,64,128).convert_alpha(), self.texture.subsurface(512,384,64,128).convert_alpha(), self.texture.subsurface(576,384,64,128).convert_alpha()] self.backright_texture = [self.texture.subsurface(0,512,64,128).convert_alpha(), self.texture.subsurface(64,512,64,128).convert_alpha(), self.texture.subsurface(128,512,64,128).convert_alpha(), self.texture.subsurface(192,512,64,128).convert_alpha(), self.texture.subsurface(256,512,64,128).convert_alpha(), self.texture.subsurface(320,512,64,128).convert_alpha(), self.texture.subsurface(384,512,64,128).convert_alpha(), self.texture.subsurface(448,512,64,128).convert_alpha(), self.texture.subsurface(512,512,64,128).convert_alpha(), self.texture.subsurface(576,512,64,128).convert_alpha()] self.back_texture = [self.texture.subsurface(0,640,64,128).convert_alpha(), self.texture.subsurface(64,640,64,128).convert_alpha(), self.texture.subsurface(128,640,64,128).convert_alpha(), self.texture.subsurface(192,640,64,128).convert_alpha(), self.texture.subsurface(256,640,64,128).convert_alpha(), self.texture.subsurface(320,640,64,128).convert_alpha(), self.texture.subsurface(384,640,64,128).convert_alpha(), self.texture.subsurface(448,640,64,128).convert_alpha(), self.texture.subsurface(512,640,64,128).convert_alpha(), self.texture.subsurface(576,640,64,128).convert_alpha()] self.backleft_texture = [] self.left_texture = [] self.frontleft_texture = [] for frame in self.backright_texture: self.backleft_texture.append(pygame.transform.flip(frame, True, False)) for frame in self.right_texture: self.left_texture.append(pygame.transform.flip(frame, True, False)) for frame in self.frontright_texture: self.frontleft_texture.append(pygame.transform.flip(frame, True, False)) self.die_texture = [self.texture.subsurface(0,768,64,128).convert_alpha(), self.texture.subsurface(64,768,64,128).convert_alpha(), self.texture.subsurface(128,768,64,128).convert_alpha(), self.texture.subsurface(192,768,64,128).convert_alpha(), self.texture.subsurface(256,768,64,128).convert_alpha(), self.texture.subsurface(320,768,64,128).convert_alpha(), self.texture.subsurface(384,768,64,128).convert_alpha(), self.texture.subsurface(448,768,64,128).convert_alpha(), self.texture.subsurface(512,768,64,128).convert_alpha(), self.texture.subsurface(576,768,64,128).convert_alpha(), self.texture.subsurface(640,768,64,128).convert_alpha()] self.hit_texture = [self.texture.subsurface(0,896,64,128).convert_alpha(), self.texture.subsurface(64,896,64,128).convert_alpha(), self.texture.subsurface(128,896,64,128).convert_alpha(), self.texture.subsurface(192,896,64,128).convert_alpha(), self.texture.subsurface(256,896,64,128).convert_alpha(), self.texture.subsurface(320,896,64,128).convert_alpha()] self.hurt_texture = [self.die_texture[0]] self.update_timer = 0 #Creating the sprite rect is awful, I know. Keeps it from entering walls. self.sprite = SPRITES.Sprite(self.front_texture[1], self.ID, [self.rect.centerx - int(SETTINGS.tile_size / 12), self.rect.centery - int(SETTINGS.tile_size / 10)], 'npc', self) #The position in SETTINGS.all_sprites of this NPC self.num = len(SETTINGS.all_sprites)-1