Beispiel #1
0
def place_mob_pack(map, x, y, mobToSpawn, packsize):
	""" Places a pack of mobs at the given position. """
	from components import Object,Fighter,MobAI
	from mechanics import mob_death

	for mob in range(1, packsize+1):
		if map.is_blocked(x, y, ai=True):
			(x, y) = map.unblocked_spot_in(4, x, y)
		compAI = MobAI()
		mob = Object(map.owner, map.owner.maps.index(map), x, y, str(mobToSpawn["character"]), color=libtcod.Color(mobToSpawn["color"][0],mobToSpawn["color"][1],mobToSpawn["color"][2]), name=mobToSpawn["name"], blocks=True, exp=mobToSpawn["exp"], ai=compAI)
		compFighter = Fighter(
								hl=mobToSpawn["hl"],
								essence=mobToSpawn["essence"],
								strength=mobToSpawn["strength"],
								dexterity=mobToSpawn["dexterity"],
								skills=mobToSpawn["skills"],
								death_function=mob_death
							)
		mob.fighter = compFighter
		mob.fighter.owner = mob

		map.objects.append(mob)
		mob.send_to_front()
def target_tile(max_range=None, radius=0):
	"""	|  Target a distant tile
		|  For Ranged Attacks, like Archery, Thrown
		|  Also Fireballs or similar projectiles with Radius
	"""
	from components import Object
	from mapcreation import Circle
	from render import render_all

	# Spawn a Target Object that can be moved with arrow Keys
	(x, y) = (gvar.game.player.x, gvar.game.player.y)
	target = Object(x, y, 'X', color=libtcod.red, name='target', blocks=False)
	gvar.game.objects.append(target)

	while True:
		target.send_to_front()
		render_all()

		#Render Splash
		libtcod.console_clear(gvar.overlay)
		if radius > 0:
			target.splash = Circle(target.x, target.y, radius)
			for point in target.splash.circle:
				libtcod.console_set_char_background(gvar.overlay, point[0], point[1], libtcod.yellow)
		libtcod.console_blit(gvar.overlay, 0, 0, gvar.SCREEN_WIDTH, gvar.SCREEN_HEIGHT, 0, 0, 0, 1.0, 0.5)
		libtcod.console_flush()

		#Move the Target around
		key = libtcod.Key()
		mouse = libtcod.Mouse()
		key_pressed = libtcod.sys_wait_for_event(libtcod.EVENT_KEY_PRESS,key,mouse,True)
		if not key_pressed:
			return 'cancelled'

		if key.vk == libtcod.KEY_UP or key.vk == libtcod.KEY_KP8:
			if libtcod.map_is_in_fov(gvar.fov_map, target.x, target.y-1):
				target.y -= 1
		elif key.vk == libtcod.KEY_DOWN or key.vk == libtcod.KEY_KP2:
			if libtcod.map_is_in_fov(gvar.fov_map, target.x, target.y+1):
				target.y += 1
		elif key.vk == libtcod.KEY_LEFT or key.vk == libtcod.KEY_KP4:
			if libtcod.map_is_in_fov(gvar.fov_map, target.x-1, target.y):
				target.x -= 1
		elif key.vk == libtcod.KEY_RIGHT or key.vk == libtcod.KEY_KP6:
			if libtcod.map_is_in_fov(gvar.fov_map, target.x+1, target.y):
				target.x += 1
		elif key.vk == libtcod.KEY_KP7:
			if libtcod.map_is_in_fov(gvar.fov_map, target.x-1, target.y-1):
				target.x -= 1
				target.y -= 1
		elif key.vk == libtcod.KEY_KP9:
			if libtcod.map_is_in_fov(gvar.fov_map, target.x+1, target.y-1):
				target.x += 1
				target.y -= 1
		elif key.vk == libtcod.KEY_KP3:
			if libtcod.map_is_in_fov(gvar.fov_map, target.x+1, target.y+1):
				target.x += 1
				target.y += 1
		elif key.vk == libtcod.KEY_KP1:
			if libtcod.map_is_in_fov(gvar.fov_map, target.x-1, target.y+1):
				target.x -= 1
				target.y += 1
		elif key.vk == libtcod.KEY_ENTER:
			gvar.game.objects.remove(target)
			return target
			break
		elif key.vk == libtcod.KEY_ESCAPE:
			gvar.game.objects.remove(target)
			return 'cancelled'
			break
		elif chr(key.c) == 's':
			# Returns String 'closest' for further evaluation by the calling function, e.g. for targeting the closest mob
			gvar.game.objects.remove(target)
			return 'closest'
			break
def target_tile(max_range=None, radius=0):
    """	|  Target a distant tile
		|  For Ranged Attacks, like Archery, Thrown
		|  Also Fireballs or similar projectiles with Radius
	"""
    from components import Object
    from mapcreation import Circle
    from render import render_all

    # Spawn a Target Object that can be moved with arrow Keys
    (x, y) = (gvar.game.player.x, gvar.game.player.y)
    target = Object(x, y, 'X', color=libtcod.red, name='target', blocks=False)
    gvar.game.objects.append(target)

    while True:
        target.send_to_front()
        render_all()

        #Render Splash
        libtcod.console_clear(gvar.overlay)
        if radius > 0:
            target.splash = Circle(target.x, target.y, radius)
            for point in target.splash.circle:
                libtcod.console_set_char_background(gvar.overlay, point[0],
                                                    point[1], libtcod.yellow)
        libtcod.console_blit(gvar.overlay, 0, 0, gvar.SCREEN_WIDTH,
                             gvar.SCREEN_HEIGHT, 0, 0, 0, 1.0, 0.5)
        libtcod.console_flush()

        #Move the Target around
        key = libtcod.Key()
        mouse = libtcod.Mouse()
        key_pressed = libtcod.sys_wait_for_event(libtcod.EVENT_KEY_PRESS, key,
                                                 mouse, True)
        if not key_pressed:
            return 'cancelled'

        if key.vk == libtcod.KEY_UP or key.vk == libtcod.KEY_KP8:
            if libtcod.map_is_in_fov(gvar.fov_map, target.x, target.y - 1):
                target.y -= 1
        elif key.vk == libtcod.KEY_DOWN or key.vk == libtcod.KEY_KP2:
            if libtcod.map_is_in_fov(gvar.fov_map, target.x, target.y + 1):
                target.y += 1
        elif key.vk == libtcod.KEY_LEFT or key.vk == libtcod.KEY_KP4:
            if libtcod.map_is_in_fov(gvar.fov_map, target.x - 1, target.y):
                target.x -= 1
        elif key.vk == libtcod.KEY_RIGHT or key.vk == libtcod.KEY_KP6:
            if libtcod.map_is_in_fov(gvar.fov_map, target.x + 1, target.y):
                target.x += 1
        elif key.vk == libtcod.KEY_KP7:
            if libtcod.map_is_in_fov(gvar.fov_map, target.x - 1, target.y - 1):
                target.x -= 1
                target.y -= 1
        elif key.vk == libtcod.KEY_KP9:
            if libtcod.map_is_in_fov(gvar.fov_map, target.x + 1, target.y - 1):
                target.x += 1
                target.y -= 1
        elif key.vk == libtcod.KEY_KP3:
            if libtcod.map_is_in_fov(gvar.fov_map, target.x + 1, target.y + 1):
                target.x += 1
                target.y += 1
        elif key.vk == libtcod.KEY_KP1:
            if libtcod.map_is_in_fov(gvar.fov_map, target.x - 1, target.y + 1):
                target.x -= 1
                target.y += 1
        elif key.vk == libtcod.KEY_ENTER:
            gvar.game.objects.remove(target)
            return target
            break
        elif key.vk == libtcod.KEY_ESCAPE:
            gvar.game.objects.remove(target)
            return 'cancelled'
            break
        elif chr(key.c) == 's':
            # Returns String 'closest' for further evaluation by the calling function, e.g. for targeting the closest mob
            gvar.game.objects.remove(target)
            return 'closest'
            break