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