#!/bin/bash
declare -a itemList
declare -a eventList
declare -a shadowEvent
declare -a AchList
let level=0
#definir aquí el max de logros
let achMax=6
if [ "$1" = "" ];then
	echo "Error al cargar: Archivo no especificado"
	exit
fi
if [ $1 -gt 5 -o $1 -le 0 ];then
	echo "Error al cargar: Archivo no existente"
	exit
fi
let SaveFile=$1
loadData(){
	if [ -f SaveData${SaveFile}.txt ];then
		source SaveData${SaveFile}.txt
		#if [[ "${itemList[@]}" = "" ]];then
		#itemList=()
		#fi
		#if [[ "${eventList[@]}" = "" ]];then
		#eventList=()
		#fi
		#if [[ "${shawodEvents[@]}" = "" ]];then
		#shawodEvents=()
		#fi
	else
		#New Game
		roomID=0
		itemList=()
		eventList=()
		shadowEvent=()
		AchList[4]=("")
	fi
}
#Función save
save(){
	echo "roomID=$roomID" > SaveData${SaveFile}.txt
	echo "level=$level" >> SaveData${SaveFile}.txt
	if [ "$pass01" != "" ];then
		echo "pass01=$pass01" >> SaveData${SaveFile}.txt
	fi
	if [ "$pass02" != "" ];then
		echo "pass02=$pass02" >> SaveData${SaveFile}.txt
	fi
	if [ "$pass03" != "" ];then
		echo "pass03=$pass03" >> SaveData${SaveFile}.txt
	fi
	#Inicio Save itemList
	echo -n "itemList=(" >> SaveData${SaveFile}.txt
	if [ ${#itemList[@]} -gt 0 ];then
		for ((i=0; i<${#itemList[@]}; i++));do
			echo -n "\"${itemList[$i]}\" " >> SaveData${SaveFile}.txt
		done
	fi
	echo ")" >> SaveData${SaveFile}.txt
	#Fin Save itemList
	#Inicio Save eventList
	echo -n "eventList=(" >> SaveData${SaveFile}.txt
	if [ ${#eventList[@]} -gt 0 ];then
		for ((i=0; i<${#eventList[@]}; i++));do
			echo -n "\"${eventList[$i]}\" " >> SaveData${SaveFile}.txt
		done
	fi
	echo ")" >> SaveData${SaveFile}.txt
	#Fin Save eventList
	#Inicio Save shadowEvent
	echo -n "shadowEvent=(" >> SaveData${SaveFile}.txt
	if [ ${#shadowEvent[@]} -gt 0 ];then
		for ((i=0; i<${#shadowEvent[@]}; i++));do
			echo -n "\"${shadowEvent[$i]}\" " >> SaveData${SaveFile}.txt
		done
	fi 
	echo ")" >> SaveData${SaveFile}.txt
	#Fin Save ShadowEvent
	#Inicio Save Logros
	echo -n "AchList=(" >> SaveData${SaveFile}.txt
	if [ ${#AchList[@]} -gt 0 ];then
		for ((i=0; i<$achMax; i++));do
			echo -n "\"${AchList[$i]}\" " >> SaveData${SaveFile}.txt
		done
	fi 
	echo ")" >> SaveData${SaveFile}.txt
	#Fin Save ALL
	#itemList, eventList, stats, etc.
}
relocate(){
	let roomID=$1
	let menuselect=0
}
declare -a opts
printmenu3(){
	#Custom Version Without:
	#let menuselect=0
	if [ "$menuselect" = "" ];then
	let menuselect=0
	fi
	maxmenu=${#opts[@]}
	#bucle principal
	while true;do
		#fijar un límite del menu
		if [ $menuselect -ge $maxmenu ];then
			let menuselect=0
		elif [ $menuselect -lt 0 ]; then
			let menuselect=$maxmenu-1
		fi
		#printmenu3
		clear
		if [ "$title" != "" ];then
			echo "$title"
		fi
		if [ "$title0" != "" ];then
			echo "$title0"
		fi
		if [ "$title1" != "" ];then
			echo "$title1"
		fi
		#añadir más title${x} si hace falta
		for (( menuprint=0; menuprint<$maxmenu; menuprint++ ));do
			if [ $menuprint = $menuselect ]; then
				echo -n " --> "
				if [ "$padding" != "" -a "$padding" != "0" ];then
					for ((i=$padding; i>0; i--));do
						echo -n ' '
					done
				fi
			else
				echo -n "     "
			fi
			echo "${opts[$menuprint]}"
		done
		read -n 3 -p "Usa las flechas para moverte por el menú " menuMovement
		case $menuMovement in
			*A)
				((menuselect--))
				;;
			*B)
				((menuselect++))
				;;
			"")
				break
				;;
			*)
				;;
		esac
	done
}
maze(){
	while true; do
		#imprimir laberinto
		clear
		if [ "$mazename" != "" ];then
			echo "$mazename"
		fi
		for ((i=0;i < $maxY; i++));do
			for ((j=0; j < $maxX; j++));do
				if [[ "${j},${i}" = "${posx},${posy}" ]];then
					#imprimir personaje
					echo -n "X"
				elif [[ " ${wals[@]} " =~ " ${j},${i} " ]];then
					#imprimir pared
					echo -n "#"
				elif [[ " ${salidas[@]} " =~ " ${j},${i} " ]];then
					#Imprimir salida
					echo -n "E"
				elif [[ " ${interes[@]} " =~ " ${j},${i} " ]];then
					#imprimir punto de interes
					echo -n "!"
				else
					#imprimir espacio en blanco
					echo -n "."
				fi
			done
			echo "" #NextLine Print
		done
		#Para saber lo que pisas
		echo -n "Estas sobre: ["
		if [[ " ${salidas[@]} " =~ " ${posx},${posy} " ]];then
			#Imprimir salida
			echo -n "Salida"
		elif [[ " ${interes[@]} " =~ " ${posx},${posy} " ]];then
			#imprimir punto de interes
			echo -n "Punto de Interes"
		else
			#imprimir espacio en blanco
			echo -n "Suelo"
		fi
		echo ']'
		#Movimiento
		read -n 3 -p "Flechas --> mover/INTRO --> Interactuar " mazeMovement
		case $mazeMovement in
			??A)
				let destiny=$posy-1
				if [[ $destiny -ge 0 && ! " ${wals[@]} " =~ " ${posx},${destiny} " ]];then
					let posy=$destiny
				fi
				;;
			??B)
				let destiny=$posy+1
				if [[ $destiny -lt $maxY && ! " ${wals[@]} " =~ " ${posx},${destiny} " ]];then
					let posy=$destiny
				fi
				;;
			??C)
				let destiny=$posx+1
				if [[ $destiny -lt $maxX && ! " ${wals[@]} " =~ " ${destiny},${posy} " ]];then
					let posx=$destiny
				fi
				;;
			??D)
				let destiny=$posx-1
				if [[ $destiny -ge 0 && ! " ${wals[@]} " =~ " ${destiny},${posy} " ]];then
					let posx=$destiny
				fi
				;;
			"")
			#Interact
				if [[ " ${interes[@]} " =~ " ${posx},${posy} " ]];then
					for ((i=0; i<${#interes[@]}; i++));do
						if [[ " ${interes[$i]} " = " ${posx},${posy} " ]];then
							let mazeselect=$i
							let mazetype=0 #Tipo 0 --> Interes
							break
						fi
					done
					break
				fi
				if [[ " ${salidas[@]} " =~ " ${posx},${posy} " ]];then
					for ((i=0; i<${#salidas[@]}; i++));do
						if [[ " ${salidas[$i]} " = " ${posx},${posy} " ]];then
							let mazeselect=$i
							let mazetype=1 # Tipo 1 --> Salida
							break
						fi
					done
					break
				fi
		esac
	done
}
AchShow(){
	i=0
	menuselect=0
	opts=()
	let achCompl=0
	while [ $i -lt $achMax ];do
		if [[ "${AchList[$i]}" = "" ]];then
			opts+=("Bloqueado")
		else
			opts+=("${AchList[$i]}")
			((achCompl++))
		fi
		let i=$i+1
	done
	let achPercent=(${achCompl}*100/${achMax})
	opts+=("Volver")
	while true; do
		title0="Completado: ${achPercent}%"
		printmenu3
		title0=""
		case $menuselect in
			0)
				text="no hacía falta hacerlo 5 veces..."
				showtext
				read
				;;
			1)
				text="métete al armario y no salgas"
				showtext
				read
				;;
			2)
				text="Cómete un chuletón"
				showtext
				read
				;;
			3)
				text="Echate una siestecita en la cama del señor"
				showtext
				read
				;;
			4)
				text="duerme el doble de horas al dormir en dos camas"
				showtext
				read
				;;
			5)
				text="Siente el poder de la electricidad!"
				showtext
				read
				;;
			6)
				break
		esac
	done
}
AchGet(){
	if [[ "${AchList[$1]}" = "" ]];then
		text="Has conseguido un Logro: "
		showtextR
		echo -ne "\e[32m"
		case $1 in
			0)
			text="Cabezota"
			;;
			1)
			text="Encierro de por vida"
			;;
			2)
			text="Antojito de media noche"
			;;
			3)
			text="Dormilón de alta clase"
			;;
			4)
			text="Dormilón Eficiente"
			;;
			5)
			text="Electrones!"
		esac
		showtext
		echo -ne "\e[39m"
		read
		AchList[$1]="$text"
	fi
}
#Función Inventario
inventory(){
	let saveYPos=$menuselect
	let menuselect=0
	while true;do
		title="Inventario:"
		opts=("${itemList[@]}")
		if [ ${#eventList[@]} -gt 0 ];then
			opts+=("Eventos")
		fi
		if [ ${#AchList[@]} -gt 0 ];then
			opts+=("Logros")
		fi
		opts+=("Volver")
		printmenu3
		case ${opts[$menuselect]} in
			"Eventos")
				clear
				echo "Eventos:"
				i=0
				while [ $i -lt ${#eventList[@]} ];do
				echo "${eventList[$i]}"
				let i=$i+1
				done
				read -p "Pulsa INTRO para volver "
				;;
			"Volver")
				break
				;;
			"Logros")
				let saveYPos=$menuselect
				AchShow
				let menuselect=$saveYPos
				;;
			"Llave del Pasillo (PB)")
				text="Una llave para la puerta que da al pasillo de la planta baja"
				showtext
				read
				;;
			"Llave de la Cocina")
				text="La llave de la [Cocina]. ¿Por qué cerrarías con llave la cocina?"
				showtext
				read
				;;
			"Llave del Sótano")
				text="La llave de la gran puerta de hierro del [Pasillo (PB)]."
				showtext
				read
				text="Me pregunto qué habrá en el sótano..."
				showtext
				read
				;;
			"Carta de Leonard")
				text="Una carta que encontré en el [Comedor]. La leeré en una mesa "
				showtextR
				echo -ne "\e[31m"
				text="despejada"
				showtextR
				echo -e "\e[39m."
				read
				;;
			"Bombona de butano")
				text="Una bombona de butano que encontré bajo una almohada"
				showtext
				text="¿Qué cosas no?"
				showtext
				text="La verdad es que pesa bastante..."
				showtext
				read
				;;
			"Mechero")
				text="Un mechero de los antiguos. Me será muy util, siempre y cuando tenga combustible a mano."
				showtext
				read
				;;
			"Bote de combustible para mecheros")
				text="Un bote con gasolina especial para mecheros. Me hará falta cuando necesite usar el mechero"
				showtext
				read
				;;
			"Llave del Pozo")
				text="Una llave que parece de un candado. Creo que es el candado del pozo."
				showtext
				read
				;;
			"Chuletón (Crudo)")
				text="Un buen chuletón de ternera. Si lo cocino me lo como de una."
				showtext
				read
				;;
			*)
			#No Description
				text="El nombre lo dice todo"
				showtext
				read
		esac
	done
	let menuselect=$saveYPos
}
removeItem(){
	declare -a new_array
	for ((iteration=0; iteration<${#itemList[@]}; iteration++ ));do
		if [[ "${itemList[$iteration]}" != "$1" ]]; then
			new_array+=("${itemList[$iteration]}")
		fi
	done
	if [[ "${new_array[@]}" != "" ]]; then
		itemList=("${new_array[@]}")
	else
		itemList=()
	fi
}
removeEvent(){
	declare -a new_array
	for ((iteration=0; iteration<${#eventList[@]}; iteration++ ));do
		if [[ "${eventList[$iteration]}" != "$1" ]]; then
			new_array+=("${eventList[$iteration]}")
		fi
	done
	if [[ "${new_array[@]}" != "" ]]; then
		eventList=("${new_array[@]}")
	else
		eventList=()
	fi
}
removeShadow(){
	declare -a new_array
	for ((iteration=0; iteration<${#shawodEvents[@]}; iteration++ ));do
		if [[ "${shawodEvents[$iteration]}" != "$1" ]]; then
			new_array+=("${shawodEvents[$iteration]}")
		fi
	done
	if [[ "${new_array[@]}" != "" ]]; then
	shawodEvents=("${new_array[@]}")
	else
		shawodEvents=()
	fi
}
#Función Texto
showtext(){
	let x=0
	if [ -f ShTxt.conf ]; then
		textdelay="$(cat ShTxt.conf)"
	fi
	if [ "$textdelay" = "" ];then
		textdelay="0.02"
	fi
	textLenght=${#text}
	while [ $x -le $textLenght ];do
		echo -n "${text:$x:1}"
		let x=$x+1
		sleep $textdelay
	done
	echo
}
showtextR(){
let x=0
if [ -f ShTxt.conf ]; then
textdelay="$(cat ShTxt.conf)"
fi
if [ "$textdelay" = "" ];then
textdelay="0.02"
fi
textLenght=${#text}
while [ $x -le $textLenght ];do
echo -n "${text:$x:1}"
let x=$x+1
sleep $textdelay
done
}
#Inicio del juego
loadData
clear
if [ ! -f SaveData${SaveFile}.txt ];then
	text="Pon aquí tu Lore"
	showtext
	read
fi
#"Mapa" de la mansión. Función Movimiento
while true;do #Bucle Principal
	case $roomID in
		0) 
		#(0) Hall Principal. Inicio del juego
			title="Recepción"
			opts=("Puerta Central" "Subir las escaleras" "Salir de la mansión" "Ascensor viejo" "Revisar Inventario")
			printmenu3
			case $menuselect in
				0)
					if [[ ! "${eventList[@]}" =~ "Puerta [Pasillo (PB)] abierta" ]];then
					if [[ ! "${itemList[@]}" =~ "Llave del Pasillo (PB)" ]];then
						text="La puerta está cerrada"
						showtext
						read
					else
						text="He abierto la puerta del [Pasillo (PB)]"
						showtext
						read
						eventList+=("Puerta [Pasillo (PB)] abierta")
						removeItem "Llave del Pasillo (PB)"
					fi
					else
					text="Entro por la puerta y llego al [Pasillo (PB)]"
					showtext
					read
					relocate 1
					fi
					;;
				1)
					text="Subo las escaleras hasta llegar Delante de la puerta del Pasillo (P1)."
					showtext
					read
					relocate 2
					;;
				2)
					text="Salgo de la mansión"
					showtext
					sleep 0.5
					echo "Guardando..."
					sleep 0.5
					save
					break
					;;
				3)
				#Ascensor viejo
					#Ascensor en construcción
					if [ ${level} = 0 ];then
						text="Es solo un viejo ascensor. No parece funcionar."
						showtext
						read
					#else
					fi
					;;
				4)
					inventory
					;;
			esac
			;; #Fin Room 0
		1) #Primer Pasillo de la Planta Baja (PB)
			title="Pasillo (PB)"
			opts=("Volver a la Recepción" "Sala de Reuniones" "Salón" "Comedor" "Sótano" "Baño" "Puerta del fondo" "Revisar Inventario")
			printmenu3
			case $menuselect in
				0)
					text="Vuelvo a la Recepción."
					showtext
					read
					relocate 0
					;;
				1)
					text="Entro a una [Sala de Reuniones]"
					showtext
					read
					relocate 4
					;;
				2)
					text="Entro al [Salón]"
					showtext
					read
					relocate 5
					;;
				3)
					text="Entro al [Comedor]"
					showtext
					read
					relocate 6
					;;
				4)
				#Puerta del Sótano
					if [[ ! "${eventList[@]}" =~ "Puerta del Sótano abierta" ]];then
						#Puerta cerrada
						if [[ ! "${itemList[@]}" =~ "Llave del Sótano" ]];then
							#Sin llave
							text="La gran "
							showtextR
							echo -ne "\e[31m"
							text="puerta de hierro "
							showtextR
							echo -ne "\e[39m"
							text="no se abre. Parece llevar al sótano. De momento no tengo que ir."
							showtext
							read
						else
							#Con llave
							text="Abro la puerta del [Sótano]"
							showtext
							read
							removeItem "Llave del Sótano"
							eventList+=("Puerta del Sótano abierta")
						fi
					else
						#Puerta abierta
						text="Entro al [Sótano]"
						showtext
						read
						relocate 7
					fi
					;;
				5)
					text="Entro al Baño"
					showtext
					read
					relocate 8
					;;
				6)
					text="Entro a una gran [Biblioteca]"
					showtext
					read
					relocate 9
					;;
				7)
					inventory
					;;
			esac
			;; #Fin R1
		2)
		#(2) Escaleras arriba, Recepción.
			title="Delante de la puerta del Pasillo (P1)"
			if [[ ! "${eventList[@]}" =~ "Puerta [Pasillo (PB)] abierta" && ! "${itemList[@]}" =~ "Llave del Pasillo (PB)" ]];then
				title0="Hay algo extraño..."
			fi
			opts=("Bajar a la Recepción" "Puerta del Pasillo")
			if [[ ! "${eventList[@]}" =~ "Puerta [Pasillo (PB)] abierta" && ! "${itemList[@]}" =~ "Llave del Pasillo (PB)" ]];then
				opts+=("Examinar")
			fi
			opts+=("Revisar Inventario")
			printmenu3
			title0=""
			case ${opts[$menuselect]} in
				"Bajar a la Recepción")
					text="Vuelvo a la Recepción."
					showtext
					read
					relocate 0
					;;
				"Puerta del Pasillo")
					if [[ "${eventList[@]}" =~ "Botón de la [Cocina] Pulsado" ]]; then
					removeEvent "Botón de la [Cocina] Pulsado"
					eventList+=("Puerta [Pasillo (P1)] abierta")
					text="La puerta del pasillo está abierta..."
					showtext
					read
					fi
					if [[ ! "${eventList[@]}" =~ "Puerta [Pasillo (P1)] abierta" ]];then
					text="La puerta está cerrada, pero no tiene cerradura. ¡Qué raro!"
					showtext
					read
					else
					text="Entro al Pasillo (P1)"
					showtext
					read
					relocate 3
					fi
					;;
				"Examinar")
					text="Al mirar el suelo, encuentro la "
					showtextR
					echo -ne "\e[31m"
					text="Llave del Pasillo (PB)"
					showtext
					echo -ne "\e[39m"
					I01="1"
					itemList+=("Llave del Pasillo (PB)")
					read
					;;
				"Revisar Inventario")
					inventory
			esac
			;; #Fin R2
		8) 
		#(8) Baño de la planta baja
			title="Baño (Pasillo Planta Baja)"
			opts=("Volver al Pasillo" "Refrescarse la cara" "Revisar Inventario")
			printmenu3
			case $menuselect in
				0)
					text="Salgo al [Pasillo (PB)]"
					showtext
					read
					relocate 1
					;;
				1)
					text="Me lavo la cara en el Lavabo"
					showtext
					read
					save
					let saveYPos=$menuselect
					let menuselect=0
					title="Partida Guardada"
					title0="¿Continuar?"
					opts=("Sí" "No")
					printmenu3
					title0=""
					if [ $menuselect = 1 ];then
						break
					fi
					let menuselect=$saveYPos
					;;
				2)
					inventory
					;;
			esac
			;; #Fin R8
		4) 
		#(4) Sala de Reuniones. Mesa para leer. Proyector sin Energía.
			title="Sala de Reuniones"
			opts=("Volver al Pasillo" "Examinar la Mesa" "Examinar el Proyector" "Revisar Inventario")
			printmenu3
			case $menuselect in
				0)
					text="Vuelvo al Pasillo"
					showtext
					read
					relocate 1
					;;
				1)
				#Examinar Mesa
					if [[ "${itemList[@]}" =~ "Carta de Leonard" ]];then
					text="Aquí sí que puedo leer la carta."
					showtext
					read
					let saveYPos=$menuselect
					let menuselect=0
					title="¿Leer la [Carta de Leonard]?"
					opts=("Sí" "No")
					printmenu3
					case $menuselect in
						0) 
						#Leer la carta
							clear
							text="Vamos a ver..."
							showtext
							read
							text="Querido hijo, espero que estés bien. Bla bla bla... tu madre y yo..."
							showtext
							text="bla bla bla... ¡Oh! esto es más interesante."
							showtext
							read
							text="por si se te olvida el código secreto, recuerda que la"
							showtext
							if [ "$pass01" = "" ];then
								let pass01=$RANDOM%100
								if [ $pass01 -lt 10 ]; then
									pass01="0${pass01}"
								fi
								itemList+=("Clave numérica 1: ${pass01}XXXX")
							fi
							text="clave empieza por \"${pass01}XXXX\". El resto ya sabes dónde encontrarlo"
							showtext
							read
							text="Vaya, voy a tener que buscar el resto del código. De momento, apuntaré la"
							showtext
							text="primera parte del código en mi libreta, así lo puedo revisar cuando quiera"
							showtext
							text="desde el "
							showtextR
							echo -ne "\e[31m"
							text="Inventario"
							showtext
							echo -ne "\e[39m"
							read
							;;
						1)
						#Mucho Texto
							text="Paso. Mucho texto"
							showtext
							read
							;;
					esac
					let menuselect=$saveYPos
					else
					text="En la mesa no hay nada"
					showtext
					read
					fi
					;;
				2)
				#proyector
					if [[ ! "${eventList[@]}" =~ "Energía Restaurada" ]];then
					#no hay luz
					text="El proyector no funcionará a no ser que restablezca el "
					showtextR
					echo -ne "\e[31m"
					text="Suministro eléctrico"
					showtext
					echo -ne "\e[39m"
					read
					else
					#hay luz
					text="el proyector proyecta un código en la pared, pero parece que la lente está sucia."
					showtext
					if [ "$pass02" = "" ];then
					let pass02=$(expr $RANDOM % 100)
					if [ $pass02 -lt 10 ];then
					pass02="0${pass02}"
					fi
					itemList+=("Clave numérica 2: XX${pass02}XX")
					fi
					text="Se alcanza a leer \"XX${pass02}XX\" en la imágen proyectada"
					showtext
					text="Será mejor que lo apunte..."
					showtext
					read
					fi
					;;
				3)
					inventory
					;;
			esac
			;; #Fin R4
		5) 
		#(5) Salón de la planta baja. #Revisar Funcionamiento
			title="Salón"
			opts=("Volver al Pasillo")
			if [[ "${eventList[@]}" =~ "Puerta Secreta descubierta en [Salón]" ]];then
			opts+=("Entrar a la habitación secreta")
			else
			opts+=("Examinar la Televisión")
			fi
			opts+=("Revisar Inventario")
			printmenu3
			case $menuselect in
				0)
					text="Vuelvo al [Pasillo (PB)]"
					showtext
					read
					relocate 1
					;;
				1)
					if [[ "${eventList[@]}" =~ "Botón del [Cobertizo] Pulsado" ]];then
						removeEvent "Botón del [Cobertizo] Pulsado"
						eventList+=("Puerta Secreta descubierta en [Salón]")
						text="¡Ha aparecido una "
						showtextR
						echo -ne "\e[31m"
						text="puerta oculta "
						showtextR
						echo -ne "\e[39m"
						text="detrás del mueble del televisor!"
						showtext
						read -p "Pulsa INTRO para entrar en la habitación secreta "
					else
						if [[ ! "${eventList[@]}" =~ "Puerta Secreta descubierta en [Salón]" ]];then
							text="Es una televisión antigua. Aparte de eso, no tiene nada de especial."
							showtext
							read
						fi
					fi
					if [[ "${eventList[@]}" =~ "Puerta Secreta descubierta en [Salón]" ]];then
					text="Entro en la [habitación secreta]"
					showtext
					read
					relocate 10
					fi
					;;
				2)
					inventory
					;;
			esac
			;;
		6) 
		#(6) Comedor
			title="Comedor"
			if [[ ! "${itemList[@]}" =~ "Carta de Leonard" ]];then
			title0="Hay una carta sobre la mesa..."
			fi
			opts=("Volver al Pasillo" "Examinar la mesa" "Puerta de la Cocina" "Revisar Inventario")
			printmenu3
			title0=""
			case $menuselect in
				0)
					text="Vuelvo al [Pasillo (PB)]"
					showtext
					read
					relocate 1
					;;
				1)
					if [[ ! "${itemList[@]}" =~ "Carta de Leonard" ]];then	
						text="Hay una "
						showtextR
						echo -ne "\e[31m"
						text="carta "
						showtextR
						echo -ne "\e[39m"
						text="sobre la mesa."
						showtext
						read
						text="Cogeré la carta por si acaso, pero me da pereza leerla de pie, y la mesa del comedor está llena de cosas."
						showtext
						read
						itemList+=("Carta de Leonard")
						else
						text="La mesa del comedor está llena de cosas, pero nada interesante."
						showtext
						read
					fi
					;;
				2)
				#Puerta de la cocina
					if [[ "${eventList[@]}" =~ "Puerta de la [Cocina] abierta" ]];then
						text="Entro a la [Cocina]"
						showtext
						read
						relocate 12
					else
						if [[ "${itemList[@]}" =~ "Llave de la Cocina" ]];then
							text="Abro la puerta"
							showtext
							read
							removeItem "Llave de la Cocina"
							eventList+=("Puerta de la [Cocina] abierta")
						else
							text="La puerta está cerrada."
							showtext
							read
							text="¿Por qué siquiera cerrarías con llave la puerta de la cocina?"
							showtext
							read
						fi
					fi
					;;
						
				3)
					inventory
					;;
				esac
			;;
		12)
		#(12) Cocina
			title="Cocina"
			opts=("Volver al comedor" "Examinar la Mesa" "Examinar los Fogones" "Revisar Inventario")
			printmenu3
			case $menuselect in
				0)
					text="Vuelvo al [Comedor]"
					showtext
					read
					relocate 6
					;;
				1)
					if [[ "${eventList[@]}" =~ "Botón de la [Cocina] Pulsado" ]];then
						text="Debería revisar el ruido proveniente del "
						showtextR
						echo -ne "\e[31m"
						text="Primer Piso"
						showtextR
						echo -ne "\e[39m"
						text="."
						showtext
					else
						if [[ "${eventList[@]}" =~ "Puerta [Pasillo (P1)] abierta" ]];then
							text="Aquí ya no hay nada que hacer..."
							showtext
							read
						else
							text="La mesa está llena de utensilios de cocina, y manchas de comida por todos lados."
							showtext
							read
							text="Al examinarla más de cerca, noto un "
							showtextR
							echo -ne "\e[31m"
							text="Botón Escondido "
							showtextR
							echo -ne "\e[39m"
							text="en la parte de abajo de la mesa."
							showtext
							read
							clear
							text="Al pulsar el botón se escucha un ruido en el "
							showtextR
							echo -ne "\e[31m"
							text="Primer Piso"
							showtextR
							echo -ne "\e[39m"
							text="."
							showtext
							read
							eventList+=("Botón de la [Cocina] Pulsado")
						fi
					fi
					;;
				2)
				#Fogones
					if [[ "${itemList[@]}" =~ "Bombona de butano" ]];then
						text="Pongo la bombona conectada a los fogones."
						showtext
						read
						removeItem "Bombona de butano"
						eventList+=("Fogones con Butano")
					else
						if [[ "${eventList[@]}" =~ "Fogones con Butano" ]];then
							if [[ "${itemList[@]}" =~ "Chuletón Crudo" ]];then
								text="Ahora puedo cocinar el "
								showtextR
								echo -ne "\e[31m"
								text="Chuletón"
								showtextR
								echo -ne "\e[39m"
								text="."
								showtext
								read
								text="Disfruto de un buen Chuletón asado."
								AchGet 2
								eventList+=("Te has comido un Chuletón")
								removeItem "Chuletón Crudo"
								text="Despues de este pequeño descanso, me pongo a explorar de nuevo"
								showtext
								read
							else
								text="Ahora hay butano, pero no lo necesito para nada..."
								showtext
								read
							fi
						else
							text="Los fogones no funcionan, están sin butano. Esperable de una mansión abandonada."
							showtext
							read
						fi
					fi
					;;
				3)
				#inventario
					inventory
					;;
			esac
			;;
		7)
		#(7) Sótano
			title="Sótano"
			opts=("Volver arriba" "Cuadro eléctrico")
			if [[ "${eventList[@]}" =~ "Energía Restaurada" ]];then
				opts+=("Examinar la pared")
				title0=""
			else
				opts+=("#########")
				title0="no veo nada..."
			fi
			opts+=("Revisar Inventario")
			printmenu3
			case ${opts[$menuselect]} in
				"Volver arriba")
					text="Vuelvo al [Pasillo (PB)]"
					showtext
					read
					relocate 1
					;;
				"Cuadro eléctrico")
					wals=("1,0" "1,1" "1,2" "0,4" "1,4" "2,4" "3,4" "4,4" "4,5" "6,5" "6,3" "4,2" "3,2" "3,1" "3,0" "6,2" "5,2" "7,3" "7,5" "8,5" "9,5" "8,3" "10,3" "11,3" "12,3" "12,5" "11,5" "10,5" "8,2" "8,1" "8,0" "10,2" "10,1" "12,1" "12,0" "14,0" "14,1" "14,2" "14,3" "13,3" "13,5" "14,5" "15,5" "16,5" "16,4" "16,3" "16,2" "16,1" "17,1" "18,1" "19,1" "20,1" "22,1" "22,0" "22,2" "22,4" "22,5" "19,5" "18,5" "17,5" "20,5" "21,5" )
					interes=("2,0" "13,0" "5,5" )
					salidas=("23,5" "23,0" "0,0")
					maxX=24
					maxY=6
					posx=0
					posy=0
					mazename="Cuadro eléctrico (minijuego)"
					while true;do
						maze
						if [ $mazetype = 0 ];then
						#0 --> Punto de interes	
							case $mazeselect in
								0)
									text="Esto es un "
									showtextR
									echo -ne "\e[31m"
									text="punto de interés"
									showtextR
									text="."
									echo -ne "\e[39m"
									showtext
									read
									text="Pueden ser muy útiles, algunos dan pistas, otros objetos, eventos, etc"
									showtext
									read
									text="Siempre que veas uno, interactua con él!"
									showtext
									read
									;;
								2)
									text='Hay un [!] interesante arriba en el laberinto...'
									showtext
									read
									;;
								1)
									text='Las salidas [E] pueden ser engañosas. Te recomiendo la de arriba.'
									showtext
									read
									;;
							esac
							#Fin P. Interes
						else
						#1 --> Salida
							case $mazeselect in
								0)
									text="Al toquetear el cuadro electrico me llevo una "
									showtextR
									echo -ne "\e[31m"
									text="descarga eléctrica"
									showtextR
									echo -ne "\e[39m"
									text="."
									showtext
									read
									AchGet 5
									save
									textdelay="0.06"
									text="Fin de la partida..."
									echo -ne "\e[31m"
									showtext
									echo -ne "\e[39m"
									muerte=1
									break
									;;
								1)
									if [[ "${eventList[@]}" =~ "Energía Restaurada" ]];then
										text="La energía ya está restaurada."
										showtext
										read
										break
									else
										eventList+=("Energía Restaurada")
										text='Toqueteando el cuadro eléctrico logro '
										showtextR
										echo -ne "\e[31m"
										text="restaurar la electricidad"
										showtextR
										echo -ne "\e[39m"
										text='.'
										showtext
										read
										break
									fi
									;;
								2)
									text="Me rindo, ni idea de electricidad."
									showtext
									read
									;;
							esac
						fi
					done
					if [ "$muerte" = "1" ];then
						muerte=0
						break
					fi
					mazename=""
					;;
				"Examinar la pared")
					text="En la pared hay "
					showtextR
					echo -ne "\e[31m"
					text="un cuadro"
					showtextR
					echo -ne "\e[39m"
					text=" del jardín trasero. Hay un pozo y un cobertizo."
					showtext
					text="El pozo tiene una "
					showtextR
					echo -ne "\e[31m"
					text="escalera"
					showtextR
					echo -ne "\e[39m"
					text="."
					showtext
					read
					;;
				"#########")
					text="Hay algo en la pared, pero no veo nada..."
					showtext
					read
					;;
				"Revisar Inventario")
					inventory
					;;
			esac
			;;
		9) 
		#(9) Biblioteca
			title="Biblioteca"
			opts=("Volver al Pasillo" "Estantería 1")
			if [[ ${eventList[@]} =~ "Puerta oculta abierta [Biblioteca]" ]];then
				opts+=("Puerta Oculta de la estantería")
			else
				opts+=("Estantería 2")
			fi
			opts+=("Estantería 3" "Revisar Inventario")
			printmenu3
			case ${opts[$menuselect]} in
				"Volver al Pasillo")
					text="Vuelvo al [Pasillo (PB)]"
					showtext
					read
					relocate 1
					;;
				"Estantería 1")
					if [[ "${itemList[@]}" =~ "Llave de la Cocina" || "${eventList[@]}" =~ "Puerta de la [Cocina] abierta" ]];then
						#O tienes llave o está abierta la puerta
						text="Es solo una estantería llena de libros."
						showtext
						read
					else
						#ni tienes llave ni está abierta la puerta
						text="Aquí hay una llave..."
						showtext
						read
						text="Has obtenido: Llave de la Cocina"
						showtext
						read
						itemList+=("Llave de la Cocina")
					fi
					;;
				"Estantería 2")
					text="Es solo una estantería llena de libros."
					showtext
					read
					;;
				"Estantería 3")
					text="Es solo una estantería llena de libros."
					showtext
					read
					if [[ ! "${eventList[@]}" =~ "Puerta oculta abierta [Biblioteca]" ]];then
						text="Al lado parece haber un panel numérico..."
						showtext
						read -p "Introduce la contraseña: " input
						if [[ "$pass01" != "" && "$pass02" != "" && "$pass03" != "" ]];then
							if [ "$input" = "${pass01}${pass02}${pass03}" ];then
								text="La estantería 2 se mueve y revela una "
								showtextR
								echo -ne "\e[31m"
								text="Puerta Oculta "
								showtextR
								echo -ne "\e[39m"
								text="detrás de la estantería."
								showtext
								read
								eventList+=("Puerta oculta abierta [Biblioteca]")
							else
								text="No ha pasado nada..."
								showtext
								read
								text="Debería revisar el código en mi libreta."
								showtext
								read
							fi
						else
							text="No ha pasado nada..."
							showtext
							read
							text="Quizá me falte una parte del código..."
							showtext
							read
						fi
					fi
					;;
				"Puerta Oculta de la estantería")
					text="Al atravesar la puerta llego al [Jardín Trasero]"
					showtext
					read
					relocate 11
					posx=0
					posy=5
					;;
				"Revisar Inventario")
					inventory
					;;
			esac
			;;
		3)
		#(3) Pasillo (P1)
			title="Pasillo (P1)"
			opts=("Volver" "Agujero en la pared" "Cómoda" "Armario empotrado" "Espejo" "Despacho" "Dormitorio del señor" "Dormitorio de los mellizos" "Revisar Inventario")
			printmenu3
			case $menuselect in
				8)
					inventory
					;;
				0)
					text="Vuelvo a [Delante de la puerta del Pasillo (P1)]"
					showtext
					read
					relocate 2
					;;
				1)
				#boquete
					if [ "$pass03" = "" ];then
						let pass03=$(expr $RANDOM % 100)
						if [ $pass03 -lt 10 ];then
							pass03="0${pass03}"
						fi
						itemList+=("Clave numérica 3: XXXX${pass03}")
					fi
					text="Hay un agujero en la pared. A través de él se puede leer \"XXXX${pass03}\""
					showtext
					read
					text="Será mejor que lo apunte..."
					showtext
					read
					;;
				2)
				#Cómoda
					if [[ "${itemList[@]}" =~ "Mechero" ]];then
						text="Aquí ya no hay nada..."
						showtext
						read
					else
						text="En uno de los cajones de la cómoda hay un "
						showtextR
						echo -ne "\e[31m"
						text="Mechero "
						showtextR
						echo -ne "\e[39m"
						text="y un "
						showtextR
						echo -ne "\e[31m"
						text="Bote de Combustible"
						showtextR
						echo -ne "\e[39m"
						text="."
						showtext
						read
						itemList+=("Mechero" "Bote de combustible para mecheros")
					fi
					;;
				3)
				#Armario empotrado
					title="El armario empotrado está vacío"
					opts=("Entrar" "Cerrar el armario" "Despejar la mente")
					let saveYPos=$menuselect
					printmenu3
					case $menuselect in
						0)
							text="Entro en el armario. "
							showtextR
							text="Tal cual cierro la puerta me doy cuenta de que ya no puedo salir del armario. "
							showtext
							read
							AchGet 1
							textdelay=0.06
							text="Fin de la Partida"
							showtext
							read
							save
							break
							;;
						1)
							text="Cierro el armario"
							showtext
							read
							;;
						2)
						#Mindfullness
							text="Le pego un "
							showtextR
							echo -ne "\e[31m"
							text="Cabezazo"
							showtextR
							echo -ne "\e[39m"
							text=" al armario empotrado."
							showtext
							read
							let ostiaTerrible=$ostiaTerrible+1
							case $ostiaTerrible in
								1)
									text="¿Por qué hice eso?"
									showtext
									read
									;;
								2)
									text="¿Hay siquiera algún sentido en esto?"
									showtext
									read
									;;
								3)
									text="Me está empezando a doler la cabeza"
									showtext
									read
									;;
								4)
									text="La censura me está matando. ¡¿Por qué mi sangre es blanca?!"
									showtext
									read
									text="Has obtenido +15 Social Credit"
									showtext
									read
									;;
								5)
									text="Lo último que recuerdo es mi cabeza sangrando..."
									showtext
									read
									AchGet 0
									save
									textdelay=0.06
									text="Fin de la Partida"
									showtext
									read
									break
									;;
							esac
							;; #Fin Armario
					esac #Fin (3)
					let menuselect=$saveYPos
					;;
				4)
				#(4) Espejo
					text="Me miro en el espejo y admiro lo guapo que soy."
					showtext
					read
					save
					let saveYPos=$menuselect
					menuselect=0
					title="Partida Guardada"
					title0="¿Continuar?"
					opts=("Sí" "No")
					printmenu3
					title0=""
					if [ $menuselect = 1 ];then
						break
					fi
					let menuselect=$saveYPos
					;;
				5)
				#(5) Despacho
					text="Entro al [Despacho]"
					showtext
					read
					relocate 13
					;;
				6)
				#(6) Dormitorio del Señor
					text="Entro al [Dormitorio del Señor]"
					showtext
					read
					relocate 14
					;;
				7)
				#(7) Dormitorio de los mellizos
					text="Entro al [Dormitorio de los mellizos]"
					showtext
					read
					relocate 15
					;;
			esac #Fin R3
			;;
		10)
		#(10) Hab. Secreta
			title="Habitación Secreta"
			opts=("Volver al Salón" "Examinar el Panel" "Revisar Inventario")
			printmenu3
			case $menuselect in
				0)
					text="Vuelvo al [Salón]"
					showtext
					read
					relocate 5
					;;
				1)
					if [[ "${itemList[@]}" =~ "Llave del Pozo" || "${eventList[@]}" =~ "Pozo Abierto" ]];then
						text="Aquí no hay nada"
						showtext
						read
					else
						text="Sobre la mesa hay una "
						showtextR
						echo -ne "\e[31m"
						text="llave"
						showtextR
						echo -ne "\e[39m"
						text=" que parece de un candado."
						showtext
						read
						text="Obtuve la "
						showtextR
						echo -ne "\e[31m"
						text="Llave del Pozo"
						showtextR
						echo -ne "\e[39m"
						text="."
						showtext
						read
						itemList+=("Llave del Pozo")
					fi
					;;
				2)
					inventory
					;;
				esac
				;; #fin R10
		11)
		#(11) Jardín trasero (gráfico)
			if [ "$posx" = "" ];then
				posx=0
			fi
			if [ "$posy" = "" ];then
				posy=1
			fi
			while true;do
				wals=("5,6" "5,4" "6,4" "7,4" "8,4" "9,4" "5,5" )
				if [[ "${eventList[@]}" =~ "Pozo Abierto" ]];then
					interes=("0,1")
					salidas=("0,5" "4,5" "6,1")
				else
					interes=("0,1" "6,1")
					salidas=("0,5" "4,5")
				fi
				maxX=10
				maxY=7
				mazename="Jardín trasero"
				maze			
				if [ $mazetype = 0 ];then
					#Interes
					case $mazeselect in
					1)
						if [[ "${itemList[@]}" =~ "Llave del Pozo" ]];then
							text="Abro el candado y destapo el pozo."
							showtext
							read
							removeItem "Llave del Pozo"
							eventList+=("Pozo Abierto")
						else
							text="El pozo está tapado. La tapa está sujeta por un candado."
							showtext
							read
						fi
						;;
					0)
						save
						title="Se ha guardado la partida."
						opts=("Continuar" "Salir")
						printmenu3
						if [ $menuselect = 1 ];then
							endGame=1
							break
						fi
						;;
					esac
				else
					#salidas
					case $mazeselect in
						0)
							#Volver
							text="Vuelvo a la [Biblioteca]"
							showtext
							read
							relocate 9
							break
							;;
						2)
							#Pozo
							text="Bajo por la "
							showtextR
							echo -en "\e[31m"
							text="escalera"
							showtextR
							echo -en "\e[39m"
							text=" del pozo."
							showtext
							read
							relocate 17
							break
							;;
						1)
							#Cobertizo
							text="Entro al [Cobertizo]"
							showtext
							read
							relocate 16
							break
							;;
					esac
				fi
			done
			if [ $endGame = 1 ];then
				endGame=0
				break
			fi
			mazename=""
			;; #Fin R11
		14)
		#(14) Dormitorio del señor
			title="Dormitorio del señor"
			opts=("Volver al Pasillo" "Cama lujosa" "Revisar inventario")
			printmenu3
			case $menuselect in
				0)
					text="Vuelvo al [Pasillo (P1)]"
					showtext
					read
					relocate 3
					;;
				1)
					text="Me recuesto en la cama y me echo una siesta..."
					showtext
					read
					AchGet 3
					text="Después de descansar un poco, me levanto de la cama."
					showtext
					read
					;;
				2)
					inventory
					;;
			esac
			;; #Fin R14
		15)
		#(15) Dormitorio de los mellizos
			title="Dormitorio de los mellizos"
			opts=("Volver al Pasillo" "Examinar la cama de la izquierda" "Examinar la cama de la derecha" "Acostarse en las dos camas" "Revisar inventario")
			printmenu3
			case $menuselect in
				0)
					text="Vuelvo al [Pasillo (P1)]"
					showtext
					read
					relocate 3
					;;
				1)
					#Cama Izq
					let saveYPos=$menuselect
					let menuselect=0
					title="Cama de la izquierda"
					opts=("Acostarse" "Revisar bajo la almohada" "Mirar bajo la cama")
					printmenu3
					case $menuselect in
						0)
							text="Me acuesto en la cama..."
							showtext
							read
							save
							title="Se ha guardado la partida"
							opts=("Continuar" "Salir")
							printmenu3
							if [ $menuselect = 1 ];then
								break
							fi
							;;
						1)
							if [[ "${itemList[@]}" =~ "Bombona de butano" || "${eventList}" =~ "Fogones con Butano" ]];then
								text="Aquí no hay nada"
							else
								text="Noto la almohada un poco dura..."
								showtext
								read
								text="¡¿Desde cuando el Ratoncito Pérez es butanero?!"
								showtext
								read
								text="Has obtenido: Bombona de butano"
								itemList+=("Bombona de butano")
								showtext
								read
							fi
							;;
						2)
							text="Bajo la cama solo hay polvo"
							showtext
							read
							;;
					esac
					menuselect=$saveYPos
					;;
				2)
					#Cama Der
					let saveYPos=$menuselect
					let menuselect=0
					title="Cama de la derecha"
					opts=("Acostarse" "Revisar bajo la almohada" "Mirar bajo la cama")
					printmenu3
					case $menuselect in
						0)
							text="Me acuesto en la cama..."
							showtext
							read
							text="¿No huele un poco raro aquí?"
							showtext
							read
							;;
						1)
							if [[ "${itemList[@]}" =~ "Chuletón Crudo" || "${eventList}" =~ "Te has comido un Chuletón" ]];then
								text="Aquí no hay nada"
							else
								text="Noto algo bajo la almohada"
								showtext
								read
								text="¿Y esto? ¡Un Chuletón!"
								showtext
								read
								text="Has obtenido: Chuletón Crudo"
								itemList+=("Chuletón Crudo")
								showtext
								read
							fi
							;;
						2)
							text="Bajo la cama solo hay polvo"
							showtext
							read
							;;
					esac
					menuselect=$saveYPos
					;;
				3)
					text="Dicen que para dormir 8 horas en 4 horas hay que dormir en 2 camas..."
					showtext
					read
					AchGet 4
					text="Después de descansar un rato, me levanto de las camas."
					showtext
					read
					;;
				4)
					inventory
					;;
				esac
				;; #Fin R15
		13)
		#(13) Despacho
			title="Despacho"
			opts=("Volver al Pasillo" "Examinar la pared" "Examinar el escritorio" "Revisar Inventario")
			printmenu3
			case $menuselect in
				0)
					text="Vuelvo al [Pasillo (P1)]"
					showtext
					read
					relocate 3
					;;
				1)
					text="En la pared hay fotos de lo que parece ser la familia que antes vivía en la mansión"
					showtext
					read
					;;
				2)
					let saveYPos=$menuselect
					menuselect=0
					opts=("Volver" "Examinar la mesa" "Examinar los cajones")
					title="Escritorio del Despacho"
					printmenu3
					case $menuselect in
						1)
							text="Sobre la mesa hay documentos; facturas, recibos, informes; cosas de todo tipo"
							showtext
							read
							text="En lo que parece un plano de la mansión, se menciona una especie de "
							showtextR
							echo -ne "\e[31m"
							text="Acceso a las Catacumbas"
							showtextR
							echo -ne "\e[39m"
							text=" desde el pozo. Debería investigarlo..."
							showtext
							read
							;;
						2)
							if [[ "${itemList[@]}" =~ "Llave del Sótano" || "${eventList[@]}" =~ "Puerta del Sótano abierta"  ]];then
								text="Solo hay papelería y material de oficina."
								showtext
								read
							else
								text="Al examinar los cajones, encuentro la "
								showtextR
								text="Llave del Sótano"
								echo -ne "\e[31m"
								showtextR
								echo -ne "\e[39m"
								text="."
								showtext
								read
								itemList+=("Llave del Sótano")
							fi
							;;
					esac
					menuselect=$saveYPos
					;;
				3)
					inventory
					;;
				esac
			;; #Fin R13
		16)
		#(16) Cobertizo
			title="Cobertizo"
			opts=("Volver al Jardín" "Panel de Herramientas" "Revisar Inventario")
			printmenu3
			case $menuselect in
				0)
					text="Vuelvo al [Jardín Trasero]"
					showtext
					read
					relocate 11
					posx=4
					posy=5
					;;
				2)
					inventory
					;;
				1)
					text="Hay un banco de trabajo y un panel de herramientas"
					showtext
					read
					title="Mesa de trabajo"
					opts=("Volver" "botón" "Pico de diamante" "Caña de pescar" "Torniquete" "Cañón de protones")
					let menuselect=0
					while true; do
						printmenu3
						case $menuselect in
							1)
								if [[ "${eventList[@]}" =~ "Botón del [Cobertizo] Pulsado" || "${eventList[@]}" =~ "Puerta Secreta descubierta en [Salón]" ]];then
									text="Al pulsar el botón no ocurre nada."
									showtext
									read
								else
									text="Al pulsar el botón se escucha algo dentro de la casa."
									showtext
									read
									text='hay una etiqueta que dice "Salón"'
									showtext
									read
									eventList+=("Botón del [Cobertizo] Pulsado")
								fi
								;;
							2|3|4|5)
								text="No creo que eso me sirva de algo..."
								showtext
								read
								;;
							0)
								break
								;;
						esac
					done
					let menuselect=1
					;;
			esac
			;; #Fin R16
		17)
		#(17) Interior del Pozo
			text="Fin de la demo"
			showtext
			read
			relocate 11
			;;
		*) 
		#(*) Resolución de Errores
			echo 'Hubo un error en la localicación ($roomID).'
			sleep 0.2
			echo 'La habitación a la que intentas entrar no está disponible'
			sleep 0.2
			echo 'Se cargarán los últimos datos de guardado.'
			sleep 0.3
			echo 'Si el error persiste, reportalo y espera una actualización o Hotfix'
			read -p "Pulsa INTRO para Cargar. "
			loadData
			;;
	esac
done