def createNPC():
    
    bar = mapMenuItems.scrollBar(910, 10, 610, 10)
    
    texts = py.sprite.Group()
    
    ni = mapMenuItems.textInput((350, 200), 30, 16, 1, button=None, default=[], type="str")
    texts.add(mapMenuItems.textLabel("NPC Name:", (150, 210), (0, 0, 0), "../Resources/Fonts/RPGSystem.ttf", 40, variable=False, centred=False))
    
    fi = mapMenuItems.textInput((450, 260), 30, 2, 2, button=None, default=[], type="int")
    texts.add(mapMenuItems.textLabel("Base Friendliness:", (150, 270), (0, 0, 0), "../Resources/Fonts/RPGSystem.ttf", 40, variable=False, centred=False))
    
    arb = mapMenuItems.radioButtons(350, 330, ["Good", "Evil"])
    texts.add(mapMenuItems.textLabel("Alignment:", (150, 330), (0, 0, 0), "../Resources/Fonts/RPGSystem.ttf", 40, variable=False, centred=False))
    
    drb = mapMenuItems.radioButtons(350, 390, ["Up", "Down", "Left", "Right"])
    texts.add(mapMenuItems.textLabel("Direction:", (150, 390), (0, 0, 0), "../Resources/Fonts/RPGSystem.ttf", 40, variable=False, centred=False))
    
    buttons = py.sprite.Group()
    buttons.add(mapMenuItems.button("Done", (800, 550), 60, (200, 0, 200), (255, 50, 255), "../Resources/Fonts/RPGSystem.ttf", "done"))
    buttons.add(mapMenuItems.button("Add Conversation", (460, 500), 60, (200, 200, 100), (100, 200, 200), "../Resources/Fonts/RPGSystem.ttf", "convo", centred=True))
    
    imageButton = npcImageButton(drb)
    faceButton = npcFaceButton()
    while True:
        v.screen.fill((220, 220, 220))
        v.events = []
        v.events = py.event.get()
        imageButton.update()
        faceButton.update()
        bar.update()
        texts.update()
        arb.update()
        drb.update()
        ni.update()
        fi.update()
        buttons.update()
        for event in v.events:
            if event.type == py.MOUSEBUTTONDOWN:
                for button in buttons:
                    if button.pressed():
                        if button.ID == "done":
                            v.selectedNPC = {"Image": imageButton.selected, "Name": ni.outText, "Alignment": arb.outText, "Base Like": fi.outText, "Direction": drb.outText}
                            print(v.selectedNPC)
                            return  
                        if button.ID == "convo":
                            chatEdit()
        
        py.display.flip()
def mapEditor():
    v.map = py.Surface((600, 550))
    v.pallet = py.Surface((400, 630))
    v.options = py.Surface((1000, 80))
    
    v.scrollX = 0
    v.scrollY = 0
    v.scale = 2
    v.selected = 0
    v.selectedEnemy = {"Image":None, "Name":None, "Health":None, "Attack":None, "Speed":None}
    v.editHitable = False
    v.eLayer = "base"
    v.overPlayer = False
    v.hoverPos = None
    v.hoverData = None
    v.makeTeleport = False
    v.makeEnemy = False
    
    v.palletImages = py.sprite.Group()
    v.tileImages = tileEdit.getGrid()
    for i in range(0, len(v.tileImages)):
        v.palletImages.add(tileEdit.image(i))
    
    v.enemyImages = py.sprite.Group()
    num = 0
    for i in listdir("..\Resources\Images\EnemySkins"):
        v.enemyImages.add(npcEdit.enemyImage(num, "Resources/Images/EnemySkins/" + i))
        num += 1
        
    v.clock = py.time.Clock()
    
    py.time.set_timer(py.USEREVENT, 1000) #1 sec delay
    
    buttons = py.sprite.Group()
    buttons.add(mapMenuItems.toggleButton("layer", 0))
    buttons.add(mapMenuItems.toggleButton("hitbox", 1))
    buttons.add(mapMenuItems.toggleButton("over", 2))
    buttons.add(mapMenuItems.toggleButton("teleport", 3))
    buttons.add(mapMenuItems.toggleButton("enemy", 4))
    buttons.add(mapMenuItems.toggleButton("npc", 5))
    
    tileScroll = mapMenuItems.scrollBar(900, 0, 630, max([i.posy for i in v.palletImages])) #63680 #TODO: Fix spritesheet cutoff
    
    while True:
        py.event.pump()
        v.hoverPos = None
        v.events = []
        v.events = py.event.get()
        v.clock.tick(30)
        v.screen.fill((255, 255, 255))
        v.map.fill((0, 255, 255))
        v.pallet.fill((255, 255, 255))
        v.options.fill((0, 0, 255))
        v.baseTiles.update()
        v.topTiles.update()
        if not v.makeEnemy:
            v.palletImages.update()
        if v.makeEnemy:
            v.enemyImages.update()
        buttons.update()
        
        if not v.pauseEdit:
            keysPressed = py.key.get_pressed()
            speed = 20
            if keysPressed[py.K_d]:
                v.scrollX += speed
            if keysPressed[py.K_a]:
                v.scrollX -= speed
            if keysPressed[py.K_w]:
                v.scrollY += speed
            if keysPressed[py.K_s]:
                v.scrollY -= speed
        
        for event in v.events:
            if event.type == py.MOUSEBUTTONUP:
                if v.map.get_rect().collidepoint(py.mouse.get_pos()):
                    if event.button == 4:
                        v.scale += 0.1
                    if event.button == 5:
                        v.scale -= 0.1
                    v.scale = round(v.scale, 1)
                    if v.scale <= 0.1:
                        v.scale = 0.1
                if py.mouse.get_pos()[0] > 600:
                    if event.button == 4:
                        v.tileScroll += 50
                    if event.button == 5:
                        v.tileScroll -= 50
                    v.scale = round(v.scale, 1)
                    if v.scale <= 0.1:
                        v.scale = 0.1
            if event.type == py.KEYDOWN:
                if event.key == py.K_RETURN:
                    outMap = save()
            if event.type == py.KEYDOWN:
                if event.key == py.K_SPACE:
                    v.palletImages = py.sprite.Group()
                    v.tileImages = tileEdit.getGrid()
                    for i in range(0, len(v.tileImages)):
                        v.palletImages.add(tileEdit.image(i))
            if event.type == py.QUIT:
                save()
                sys.exit()
        
        
        v.screen.blit(v.map, (0, 0))
        v.screen.blit(v.options, (0, 550))
        v.screen.blit(v.pallet, (600, 0))
        if not v.editTeleport == None:
            v.editTeleport.update()
            v.pauseEdit = True
        else:
            v.pauseEdit = False
        mapMenuItems.toolTip()
        tileScroll.scroll = v.tileScroll
        tileScroll.update()
        v.tileScroll = tileScroll.scroll
        py.display.flip()
def chatEdit():
    v.chunks = py.sprite.Group()
    v.chunkIDs['0'] = []
    v.chunkIDs['1'] = []
    v.chunkIDs['2'] = []
    
    v.chatEdit = editChunk()
    buttons = py.sprite.Group()
    buttons.add(mapMenuItems.button("ADD", (720, 50), 100, (150, 150, 150), (200, 200, 200), None, "add", bsize=(150, 150), centretext=True))
    buttons.add(mapMenuItems.button("Save & Exit", (10, 10), 30, (150, 150, 150), (200, 200, 200), None, "exit"))
    
    texts = py.sprite.Group()
    texts.add(mapMenuItems.textLabel("ID:", (5, 250), (0, 0, 0), None, 40))

    boxes = py.sprite.Group()
    for i in range(0, 10):
        boxes.add(box(i))
    
    barX = mapMenuItems.scrollBar(0, 620, 910, 2200, verticle=False)
    barY = mapMenuItems.scrollBar(910, 0, 620, 200, verticle=True)
         
    
    while True:
        v.screen.fill((250, 250, 250))
        v.events = []
        v.events = py.event.get()
        
        v.chunks.update()
        py.draw.rect(v.screen, (255, 255, 255), (0, 0, 920, 290))
        
        for ch in v.chunks:
            if ch.hovered:
                ch.update()
        v.chatEdit.update()
        buttons.update()
        #texts.update()
        mapMenuItems.textLabel("ID:", (5 - v.npcScrollX, 250), (0, 0, 0), None, 40).update()
        boxes.update()
        
        py.draw.line(v.screen, (0, 0, 0), (0, 290), (920, 290), 2)
        
        for i in range(10):
            py.draw.line(v.screen, (0, 0, 0), ((300 * i) - 30 - v.npcScrollX, 290), ((300 * i) - 30 - v.npcScrollX, 630), 2)
            #py.draw.line(v.screen, (0, 0, 0), (570 - v.npcScrollX, 290), (570 - v.npcScrollX, 630), 2)
        
        py.draw.rect(v.screen, (255, 255, 255), (0, 600, 920, 30))
        
        barX.update()
        barY.update()
        
        v.npcScrollX = barX.scroll
        v.npcScrollY = barY.scroll
        
        for event in v.events:
            if event.type == py.MOUSEBUTTONDOWN:
                for button in buttons:
                    if button.pressed():
                        if button.ID == "add":
                            if v.chatEdit.created == True:
                                v.chatEdit.save()
                                v.chunks.add(chatChunk(v.chatEdit.c_message, v.chatEdit.c_id, v.chatEdit.c_goto, v.chatEdit.c_charisma, v.chatEdit.c_buttons, v.chatEdit.c_changelike, v.chatEdit.c_end))
                                v.chatEdit = editChunk()
                                
                        if button.ID == "exit":
                            out = []
                            for but in v.chunks:
                                out.append(but.save())
                            print(out)
                            return out
        py.display.flip()