freeslot("sfx_drtalk", "sfx_noel", "sfx_susy", "sfx_rals", "sfx_lafl")

local dialogue = {
	NOL1 = {
		[1] = {
		    sprite = "NOTX01",
			dialoguetext = "Hello!",
			sound = sfx_noel
		},
		[2] = {
			sprite = "NOTX01",
			dialoguetext = "Did you know La-Flower is 21 years old?",
			sound = sfx_noel
		},
		[3] = {
			sprite = "NOTX01",
			dialoguetext = "She also really hates Barry for no reason.",
			sound = sfx_noel
		},
		[4] = {
			sprite = "NOTX02",
			dialoguetext = "Why am I talking about La-Flower?...",
			sound = sfx_noel
		},
		[5] = {
			sprite = "NOTX03",
			dialoguetext = "... I'm not sure...",
			sound = sfx_noel
		},
		[6] = {
			sprite = "NOTX04",
			dialoguetext = "I dont even know why I'm here..? Where am I???",
			sound = sfx_noel
		}
	},
	NOL2 = {
		[1] = {
			sprite = "NOTX01",
			dialoguetext = "Oh hey guys! Nice to see you in my dream again!",
			sound = sfx_noel
		},
		[2] = {
			sprite = "SUTX01",
			dialoguetext = "Uh yeah! We're here toooo...",
			sound = sfx_susy
		},
		[3] = {
			sprite = "SUTX02",
			dialoguetext = "(Uh... what are we here for?)",
			sound = sfx_susy
		},
		[4] = {
			sprite = "RATX01",
			dialoguetext = "We're just checking out this The-Flower world and all its alternate timelines.",
			sound = sfx_rals
		},
		[5] = {
			sprite = "NOTX04",
			dialoguetext = "Oh!... (W-What kind of a name is The-Flower? Oh yeah dream thing I guess...)",
			sound = sfx_noel
		},
		[6] = {
			sprite = "NOTX01",
			dialoguetext = "Well could I come too?",
			sound = sfx_noel
		},
		[7] = {
			sprite = "SUTX01",
			dialoguetext = "Yeah of course! c'mon move those legs!",
			sound = sfx_susy
		},
		[8] = {
			sprite = "NOTX05",
			dialoguetext = "...",
			sound = sfx_noel
		},
		[9] = {
			sprite = "NOTX04",
			dialoguetext = "Soooooo... I dont think I can move?",
			sound = sfx_noel
		},
		[10] = {
			sprite = "SUTX03",
			dialoguetext = "Oh... Are you frozen or something?",
			sound = sfx_susy
		},
		[11] = {
			sprite = "NOTX06",
			dialoguetext = "N-No I just cant move my legs at all for some reason.",
			sound = sfx_noel
		},
		[12] = {
			sprite = "SUTX01",
			dialoguetext = "Hmm... Oh! I could try carrying you!",
			sound = sfx_susy
		},
		[13] = {
			sprite = "NOTX07",
			dialoguetext = "YES PLEASE CARRY ME SUSIE!",
			sound = sfx_noel
		},
		[14] = {
			sprite = "SUTX02",
			dialoguetext = "Huh weird. I cant seem to grab you. My arms cant do that for some reason.",
			sound = sfx_susy
		},
		[15] = {
			sprite = "NOTX08",
			dialoguetext = "(Curse this stupid dream and denying my fantasies!)",
			sound = sfx_noel
		}
	},
	NOL3 = {
		[1] = {
		    sprite = "NOTX01",
			dialoguetext = "Hello!",
			sound = sfx_noel
		},
		[2] = {
			sprite = "NOTX01",
			dialoguetext = "Did you know La-Flower is 21 years old?",
			sound = sfx_noel
		},
		[3] = {
			sprite = "LAFL32",
			dialoguetext = "Oh wow no way! I would have never guessed considering I'm La-Flower and all!",
			sound = sfx_lafl
		},
		[4] = {
			sprite = "NOTX06",
			dialoguetext = "Oh you're La-Flower? Wait what was I saying???",
			sound = sfx_noel
		},
		[5] = {
			sprite = "LAFL33",
			dialoguetext = "You said my name and age?",
			sound = sfx_lafl
		},
		[6] = {
			sprite = "NOTX05",
			dialoguetext = "I DID!? B-But I dont even know you!",
			sound = sfx_noel
		},
		[7] = {
			sprite = "LAFL34",
			dialoguetext = "Oh... Thats weird. Then how did you know all that?",
			sound = sfx_lafl
		},
		[8] = {
			sprite = "NOTX03",
			dialoguetext = "I-I dont know. It's like someone or something was making me say all that...",
			sound = sfx_noel
		},
		[9] = {
			sprite = "NOTX04",
			dialoguetext = "Wait where even am I? Why am I here???",
			sound = sfx_noel
		},
		[10] = {
			sprite = "LAFL35",
			dialoguetext = "Okay! Here's a phone, call whoever you need for help.",
			sound = sfx_lafl
		},
		[11] = {
			sprite = "NOTX06",
			dialoguetext = "Oh uh thank you miss!",
			sound = sfx_noel
		},
		[12] = {
			sprite = "NOTX04",
			dialoguetext = "Uh Mom? I think I'm in the Ice World from Dragon Blazers. Can you come pick me up?",
			sound = sfx_noel
		},
		[13] = {
			sprite = "LAFL33",
			dialoguetext = "The hell is a Dragon Blazers?",
			sound = sfx_lafl
		}
	},
	NOL4 = {
		[1] = {
		    sprite = "LAFL36",
			dialoguetext = "YOU ARE GAY",
		},
		[2] = {
			sprite = "NOTX09",
			dialoguetext = "HOW DID YOU KNOW!?!?",
			sound = sfx_noel
		}
	}
}

local function TriggerDialogue(mo, dialogue)
	mo.dialoguethinker = true
	mo.dialoguecurrent = dialogue
	mo.dialoguenum = 1
	mo.dialoguetimer = 0
	mo.currentline = 1
	mo.linebegin = 1
	mo.spriteless = 0
	mo.textprogress = {
		line1 = nil,
		line2 = nil,
		line3 = nil,
		line4 = nil
	}
	mo.linebreaks = {
		line2 = false,
		line3 = false,
		line4 = false
	}
end



addHook("PlayerThink", function(player)
	if (player.mo and player.mo.valid) and player.mo.dialoguethinker == true 
		player.pflags = $|PF_STASIS|PF_JUMPSTASIS
		local dialogue = player.mo.dialoguecurrent
		local num =  player.mo.dialoguenum
		if dialogue[num].sprite ~= nil
			player.mo.spriteless = 0
		else
			player.mo.spriteless = 1
		end
		if player.mo.dialoguetimer ~= string.len(dialogue[num].dialoguetext) then 
			player.mo.dialoguetimer = $ + 1
			if player.mo.dialoguetimer % 2 == 0 then 
				if dialogue[num].sound ~= nil
					S_StartSound(player.mo, dialogue[num].sound, player) 
				else
					S_StartSound(player.mo, sfx_drtalk, player)
				end
			end
		end
		if player.mo.dialoguetimer == string.len(dialogue[num].dialoguetext)
			if player.cmd.buttons & BT_JUMP and not (player.lastbuttons & BT_JUMP)
				if dialogue[num + 1] == nil
					player.mo.dialoguethinker = false
				else
					player.mo.dialoguenum = $ + 1
					player.mo.dialoguetimer = 0
					player.mo.currentline = 1
					player.mo.linebegin = 0
					player.mo.textprogress = {
						line1 = nil,
						line2 = nil,
						line3 = nil,
						line4 = nil
					}
					player.mo.linebreaks = {
						line2 = false,
						line3 = false,
						line4 = false
					}
				end
			end
		end
		player.mo.textprogress["line"..player.mo.currentline] = string.sub(dialogue[num].dialoguetext, player.mo.linebegin, player.mo.dialoguetimer)
		if string.sub(dialogue[num].dialoguetext, player.mo.dialoguetimer, player.mo.dialoguetimer) == "*"
			local length = player.mo.dialoguetimer - player.mo.linebegin
			if length > 0 then
				player.mo.textprogress["line"..player.mo.currentline] = string.sub(dialogue[num].dialoguetext, player.mo.linebegin, player.mo.dialoguetimer - 1)
			else
				player.mo.textprogress["line"..player.mo.currentline] = ""
			end
			player.mo.currentline = $ + 1
			player.mo.linebreaks["line"..player.mo.currentline] = true
			player.mo.linebegin = player.mo.dialoguetimer + 1
			if string.sub(dialogue[num].dialoguetext, player.mo.linebegin, player.mo.linebegin) == " " then
				player.mo.linebegin = player.mo.linebegin + 1
			end
			return
		end
		if string.len(player.mo.textprogress["line"..player.mo.currentline]) > (26 + player.mo.spriteless*8)
			local linestring = player.mo.textprogress["line"..player.mo.currentline]
			local reverso = string.reverse(linestring)
			local ending = string.len(linestring) - ((string.find(reverso, " ") or 1) - 1)
			player.mo.textprogress["line"..player.mo.currentline] = string.sub(dialogue[num].dialoguetext, player.mo.linebegin, player.mo.linebegin + ending - 1)
			player.mo.currentline = $ + 1
			player.mo.linebegin = $ + ending
			if string.sub(dialogue[num].dialoguetext, player.mo.linebegin, player.mo.linebegin) == " " then
				player.mo.linebegin = player.mo.linebegin + 1
			end
			return
		end
	end
end)

local function DialogueDrawer(v, player)
	if (player.mo and player.mo.valid) and player.mo.dialoguethinker == true 
		local dialogue = player.mo.dialoguecurrent
		local num =  player.mo.dialoguenum
		v.draw(12, 0, v.cachePatch("DIALOBOX"))
		if dialogue[num].sprite ~= nil then v.draw(24, 8, v.cachePatch(dialogue[num].sprite)) end
		v.drawString(84 - (player.mo.spriteless*64), 10, "*")
		for i = 1, 4 do
			local line = player.mo.textprogress["line"..i]
			local broke = player.mo.linebreaks["line"..i]
			if line == nil then return end
			v.drawString(98 - (player.mo.spriteless*64), 10 + (i-1)*15, line)
			if broke == true then v.drawString(84  - (player.mo.spriteless*64), 10 + (i-1)*15, "*") end
		end
	end
end

hud.add(DialogueDrawer, "game")

addHook("LinedefExecute", function(line, mo, sec)
	TriggerDialogue(mo, dialogue[line.stringargs[1]])
end, "DTDIALOG")