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))
							 |