Example #1
0
def main(argv):
    map_path = argv[1]
    result_path = argv[2]
    t = Teemap(map_path)
    result = {}

    frontlayer = None  # Works thanks to hack in tml
    for group in t.groups:
        if group.name == 'Game':
            for layer in group.layers:
                if type(layer) == TileLayer and layer.name == 'Front':
                    frontlayer = layer
                    break

    add(result, gameTiles, t.gamelayer)
    add(result, frontTiles, frontlayer)

    # These don't seem to be working
    #add(result, switchTiles, switchlayer)
    #add(result, speedupTiles, t.speeduplayer)
    #add(result, teleTiles, t.telelayer)

    with open(result_path, 'wb') as out:
        out.write(msgpack.packb(t.gamelayer.width))
        out.write(msgpack.packb(t.gamelayer.height))
        out.write(msgpack.packb(result))
Example #2
0
 def test_validate(self):
     teemap = Teemap()
     self.assertRaises(MapError, teemap.validate)
     group = items.Group()
     group.layers.append(items.TileLayer(game=True))
     teemap.groups.append(group)
     self.assertTrue(teemap.validate())
     group.layers.append(items.TileLayer(game=True))
     self.assertRaises(MapError, teemap.validate)
Example #3
0
def main(argv):
    map_path = argv[1]
    t = Teemap(map_path)

    frontlayer = None  # Works thanks to hack in tml
    for group in t.groups:
        if group.name == 'Game':
            for layer in group.layers:
                if type(layer) == TileLayer and layer.name == 'Front':
                    frontlayer = layer
                    break

    for tile in t.gamelayer.tiles:
        if not IsValidGameTile(tile.index):
            print(map_path)
            return

    if frontlayer != None:
        for tile in frontlayer.tiles:
            if not IsValidFrontTile(tile.index):
                print(map_path)
                return
Example #4
0
def retrieve_map_details(map_id):
    """
    WARNING!
    This task is CPU/(and highly) RAM expensive.

    Checks for presence of specified tiles, counts some of them
    and at the end takes a beautiful photo of the map.

    Thanks for your help, erdbeere!
    """
    logger = retrieve_map_details.get_logger()
    try:
        map_obj = Map.objects.get(pk=map_id)
    except Map.DoesNotExist:
        logger.error("[M- ] Map not found (pk={0}).".format(map_id))
        return False
    try:
        # I actually can use that! Thanks, erd!
        teemap = Teemap(map_obj.map_file.path)
        logger.info('[M-{0}] Loaded "{1}" map.'.format(map_id, map_obj.name))
    except IndexError:
        logger.error('[M-{0}] Couldn\'t load "{1}" map'.format(map_id, map_obj.name))
        has_unhookables = has_deathtiles = None
        shield_count = heart_count = grenade_count = None
    else:
        has_unhookables = has_deathtiles = has_teleporters = has_speedups = False
        shield_count = heart_count = grenade_count = 0
        logger.info("Counting map items...")
        for tile in teemap.gamelayer.tiles:
            if tile.index == indexes.DEATHTILE:
                has_deathtiles = True
            elif tile.index == indexes.UNHOOKABLE:
                has_unhookables = True
            elif tile.index == indexes.SHIELD:
                shield_count += 1
            elif tile.index == indexes.HEART:
                heart_count += 1
            elif tile.index == indexes.GRENADE:
                grenade_count += 1
        if teemap.telelayer:
            has_teleporters = True
        if teemap.speeduplayer:
            has_speedups = True

            # DISABLED due to huge (counted in GiBs) memory usage
            # logger.info("Rendering map screenshot.")
            # map_image = teemap.render(gamelayer_on_top=True)
            # map_image.save('{0}images/maps/full/{1}.png'.format(settings.MEDIA_ROOT,
            #   map_obj.name))
            # logger.info("Finished rendering map screenshot.")
            # map_obj.has_image = True

    map_obj.has_unhookables = has_unhookables
    map_obj.has_deathtiles = has_deathtiles
    map_obj.has_teleporters = has_teleporters
    map_obj.has_speedups = has_speedups

    map_map_types = map_obj.map_types.filter(slug="fastcap-no-weapons")
    if not map_map_types:
        map_obj.shield_count = shield_count
        map_obj.heart_count = heart_count
        map_obj.grenade_count = grenade_count
    logger.info("Finished counting map items.")

    logger.info("Generating map CRC...")
    map_obj.map_file.open()
    map_obj.crc = "{0:x}".format(crc32(map_obj.map_file.read()) & 0xffffffff)
    map_obj.map_file.close()
    map_obj.save()

    map_map_types = map_obj.map_types.filter(slug="fastcap")
    if map_map_types:
        logger.info("Creating a non-weapon twin...")
        new_map, created = Map.objects.get_or_create(
            name="{0}-no-weapons".format(map_obj.name),
            defaults={
                "author": map_obj.author,
                "added_by": map_obj.added_by,
                "map_file": map_obj.map_file,
                "crc": map_obj.crc,
                "has_unhookables": has_unhookables,
                "has_deathtiles": has_deathtiles,
            },
        )
        if not created:
            logger.info("Oh, it already exists! Updating...")
            new_map.author = map_obj.author
            new_map.added_by = map_obj.added_by
            new_map.map_file = map_obj.map_file
            new_map.crc = map_obj.crc
            new_map.has_unhookables = has_unhookables
            new_map.has_deathtiles = has_deathtiles
            new_map.save()
        else:
            new_map.map_types.add(MapType.objects.get(slug="fastcap-no-weapons"))
            new_map.map_types.add(*map_obj.map_types.exclude(slug="fastcap"))
            new_map.save()
    logger.info('[M-{0}] Finished processing "{1}" map.'.format(map_id, map_obj.name))
Example #5
0
    'super_start': 105,
    'jetpack_start': 106,
    'nph_start': 107,
    # Tele layer
    'tele_in': 26,
    'tele_out': 27,
    'tele_in_evil': 10,
    'tele_in_weapon': 14,
    'tele_in_hook': 15,
    'jump': 7,
}

inTiles = ['tele_in', 'tele_in_evil', 'tele_in_weapon', 'tele_in_hook']

map_path = sys.argv[1]
t = Teemap(map_path)
pickups = {
    'begin': 0,
    'end': 0,
    'npc_end': 0,
    'super_end': 0,
    'jetpack_end': 0,
    'nph_end': 0,
    'npc_start': 0,
    'super_start': 0,
    'jetpack_start': 0,
    'nph_start': 0,
}

telePickups = {
    'tele_in': [],
Example #6
0
def make_map_img(imgfile, mapfile):
  twmap = Teemap("dummy")
  img2map(Image.open(imgfile).convert("RGB"), twmap.gamelayer, twmap.layers[2])
  twmap.save(mapfile)
Example #7
0
def make_map_txt(txtfile, mapfile):
  twmap = Teemap("dummy")
  txt2map(open(txtfile, "r"), twmap.gamelayer, twmap.layers[2])
  twmap.save(mapfile)
Example #8
0
      t.index = rgb2tile(txt2rgb(c))
      tilelayer.set_tile(x, y, t)
      t.index = rgb2game(txt2rgb(c))
      gamelayer.set_tile(x, y, t)
      x += 1
#

def make_map_txt(txtfile, mapfile):
  twmap = Teemap("dummy")
  txt2map(open(txtfile, "r"), twmap.gamelayer, twmap.layers[2])
  twmap.save(mapfile)
#
def make_map_img(imgfile, mapfile):
  twmap = Teemap("dummy")
  img2map(Image.open(imgfile).convert("RGB"), twmap.gamelayer, twmap.layers[2])
  twmap.save(mapfile)
#

if __name__ == "__main__":
  if sys.argv[1][-4:] == ".txt":
    make_map_txt(sys.argv[1], sys.argv[2])
  elif sys.argv[1][-4:] == ".map":
    map2img(Teemap(sys.argv[1]).gamelayer).save(sys.argv[2])
  else:
      make_map_img(sys.argv[1], sys.argv[2])
#twmap2 = Teemap("yoko")
#mm = map2img(twmap2.gamelayer)
#mm.save("outgame.png")
#mm = map2img(twmap2.layers[2])
#mm.save("outtile.png")
Example #9
0
 def setUp(self):
     os.mkdir("test_tmp")
     self.teemap = Teemap("test_maps/vanilla")