I want to create a very basic and simple dialogue box in Godot. Similar to this Ren'py VN style, with no complex or fancy stuff to it, I'm a beginner after all. The reason for no plugins is because I do not want to rely on them, it's best I learn how to create my own. Thanks for any advice or tips you can give me on the matter.

I am using Godot 4.1.1 on my Linux PC.

you could create a kind of mega script with all the texts to be used (it must be singleton).
You should also create in it a function to process text and reproduce text.
example of my word processing function:

example of my text replay function:

variable containing the text:

(sorry for any error in the syntax of this message I am using translator )

    el_malo Thank for that example. Though it is pretty small for me to read and it's in spanish.

    translated and further explained version:
    nodes of the text interface:

    as seen by the player:

    text interface script:

    extends CanvasLayer
    
    ###----NPS_IMAGE----------
    var el_peluca = load("res://beta en godot/NPC/SAPEE/sape.png")
    var general = load("res://beta en godot/NPC/general/icon.png")
    var miliatr = load("res://beta en godot/NPC/militar/icono.png")
    var info = load("res://beta en godot/jugador/texto/basico_enigma.png")
    var imagen_1 = load("res://beta.png")
    ###----NPS_IMAGE----------
    
    func _ready():
    	set_physics_process(true)
    func _physics_process(delta):
    	_grafico()
    func _on_Button_pressed():
    	Textos._procesar_texto()
    func _grafico():
    	if !Textos.primer_npc == null:
    		$TextureRect.texture = el_peluca
    	if !Textos.general_charla == null:
    		$TextureRect.texture = general
    	if !Textos.beta_ == null:
    		$TextureRect.texture = info
    	if !Textos.militar_loco == null:
    		$TextureRect.texture = miliatr
    	if !Textos.militar_loco_2 == null:
    		$TextureRect.texture = miliatr
    	if !Textos.militar_loco_3 == null:
    		$TextureRect.texture = miliatr
    	if !Textos.anim_primer_1_npc == null:
    		$TextureRect.texture = el_peluca
    	if !Textos.anim_primer_2_npc == null:
    		$TextureRect.texture = el_peluca
    	if Textos.retreo_separacion_2 == true:
    		$TextureRect.texture = info
    	if Textos.retrero_separacion == true:
    		$TextureRect.texture = info
    	if Textos.senal_puntas == true:
    		$TextureRect.texture = info

    text script(singleton):

    extends Node
    
    #######**TEXTO**#######
    
    var texto_actual = 0
    var texto = []
    var nombre = []
    var nombre_actual = 0
    
    #######**TEXTO**#######
    
    #-----NAME_NPC----------
    func _name(num):
    	nombre.clear()
    	match(num):
    		1:#INDICACION DE COMO HABLIR LA CASA#
    			nombre.append("DATO: ")
    		2:#BETA#
    			nombre.append("SATANICO DOCTOR CADILLAC")
    		3:#MILITAR 1#
    			nombre.append("MILITAR")
    		4:#MILITAR 2#
    			nombre.append("MILITAR")
    		5:#MILITAR 3#
    			nombre.append("MILITAR")
    		6:#GENERAL#
    			nombre.append("GENERAL")
    	get_tree().get_nodes_in_group("escrito")[0].get_node("Label").text = nombre[nombre_actual]
    	nombre_actual = 0
    	#-----NAME_NPC----------
    	
    	#------REPRODUCE_TEXT-------
    func _reproducir_textos(num):
    	texto.clear()
    	get_tree().get_nodes_in_group("escrito")[0].visible = true
    	get_tree().get_nodes_in_group("player")[0].move = true
    	match(num):
    		1:#INDICACION DE COMO HABLIR LA CASA#
    			texto.append("La puerta se encuentra cerrada...")
    			texto.append("Adelante hay una cueva en la que se puede encontrar la llave...")
    			texto.append("que tenga un buen dia")
    		2:#ANIMACION_1_PARTE_1#
    			texto.append("QUEEEEE..Sigues vivo.. crei que todos ustedes..")
    			texto.append("Maldicion, entonces todos fueron ejecutados sin razon")
    			texto.append("puedes entenderme verdad?")
    			texto.append(".........................")
    			texto.append("por supuesto fuistes programado para eso")
    			texto.append("Quien eres exactemente.. seras C11 o C08")
    			texto.append("Tendrian que avisar a las autoridades de tu existencia.")
    			texto.append("Pero esa gente me busca para ejecutarme..como hicieron con mis companeros")
    			texto.append("....MMMM...")
    			texto.append("Tengo una idea.. sigueme")
    			primer_1 = true
    	#------TEXT_PROCESSING------
    func _procesar_texto():
    	if texto_actual ==texto.size():
    		get_tree().get_nodes_in_group("escrito")[0].visible = false
    		get_tree().get_nodes_in_group("player")[0].move = false
    		leyendo = false
    	else:	
    		get_tree().get_nodes_in_group("escrito")[0].get_node("Label2").text = texto[texto_actual]
    		get_tree().get_nodes_in_group("escrito")[0].get_node("AnimationPlayer").play("leer")
    		tymer.start()
    		texto_actual +=1
    
    
    	#------TEXT_PROCESSING------

    Isn't there like a whole dialogue asset for this?