60 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
from .tileset import walkable_tiles, entrance_tiles
 | 
						|
import random
 | 
						|
 | 
						|
 | 
						|
ENEMIES = {
 | 
						|
    "mountains": [
 | 
						|
        (0x0B,),
 | 
						|
        (0x0E,),
 | 
						|
        (0x29,),
 | 
						|
        (0x0E, 0x0E),
 | 
						|
        (0x0E, 0x0E, 0x23),
 | 
						|
        (0x0D,), (0x0D, 0x0D),
 | 
						|
    ],
 | 
						|
    "egg": [],
 | 
						|
    "basic": [
 | 
						|
        (), (), (), (), (), (),
 | 
						|
        (0x09,), (0x09, 0x09),  # octorock
 | 
						|
        (0x9B, 0x9B), (0x9B, 0x9B, 0x1B),  # slimes
 | 
						|
        (0xBB, 0x9B),  # bush crawler + slime
 | 
						|
        (0xB9,),
 | 
						|
        (0x0B, 0x23),  # likelike + moblin
 | 
						|
        (0x14, 0x0B, 0x0B),  # moblins + sword
 | 
						|
        (0x0B, 0x23, 0x23),  # likelike + moblin
 | 
						|
        (0xAE, 0xAE),  # flying octorock
 | 
						|
        (0xBA, ),  # Bomber
 | 
						|
        (0x0D, 0x0D), (0x0D, ),
 | 
						|
    ],
 | 
						|
    "town": [
 | 
						|
        (), (), (0x6C, 0x6E), (0x6E,), (0x6E, 0x6E),
 | 
						|
    ],
 | 
						|
    "forest": [
 | 
						|
        (0x0B,),  # moblins
 | 
						|
        (0x0B, 0x0B),  # moblins
 | 
						|
        (0x14, 0x0B, 0x0B),  # moblins + sword
 | 
						|
    ],
 | 
						|
    "beach": [
 | 
						|
        (0xC6, 0xC6),
 | 
						|
        (0x0E, 0x0E, 0xC6),
 | 
						|
        (0x0E, 0x0E, 0x09),
 | 
						|
    ],
 | 
						|
    "water": [],
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
def generate_enemies(room):
 | 
						|
    options = ENEMIES[room.tileset_id]
 | 
						|
    if not options:
 | 
						|
        return
 | 
						|
    positions = []
 | 
						|
    for y in range(1, 7):
 | 
						|
        for x in range(1, 9):
 | 
						|
            if room.tiles[x + y * 10] in walkable_tiles and room.tiles[x + (y - 1) * 10] not in entrance_tiles:
 | 
						|
                positions.append((x, y))
 | 
						|
    for type_id in random.choice(options):
 | 
						|
        if not positions:
 | 
						|
            return
 | 
						|
        x, y = random.choice(positions)
 | 
						|
        positions.remove((x, y))
 | 
						|
        room.entities.append((x, y, type_id))
 |