diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt
index 5b1557d2841f05a4ff94f303b925332e6cdac879..56d9117457ebd4e700ee6b66cfd8468b4429f2de 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/ExploradoresDePintia.kt
@@ -20,9 +20,11 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.GeneradorDeEvento
 import com.example.ellegadodepintia.exploradoresDePintia.model.LayoutUtils
 import com.example.ellegadodepintia.exploradoresDePintia.model.GestorDeEventos
 import com.example.ellegadodepintia.repositorios.RepositorioObjetos
+import com.example.ellegadodepintia.soundManager.SoundManager
 import java.lang.ref.WeakReference
 
 class ExploradoresDePintia : AppCompatActivity() {
+    private lateinit var soundManager: SoundManager
     private var dificultad = 0
     private lateinit var startForResult: ActivityResultLauncher<Intent>
 
@@ -31,6 +33,8 @@ class ExploradoresDePintia : AppCompatActivity() {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_exploradores_de_pintia)
 
+        soundManager = SoundManager(this)
+        soundManager.playSoundLoop(R.raw.sound_exploradores_idle,100)
         startForResult =
             registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
                 if (result.resultCode == Activity.RESULT_OK) {
@@ -109,5 +113,10 @@ class ExploradoresDePintia : AppCompatActivity() {
 
     }
 
+    override fun onDestroy() {
+        super.onDestroy()
+        soundManager.stopSound()
+    }
+
 
 }
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GeneradorDeEventos.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GeneradorDeEventos.kt
index 62dced39627d4596efec0733a6ad6306982c346b..b5672f5b2a378717cf68b76b998e571b1298926e 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GeneradorDeEventos.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GeneradorDeEventos.kt
@@ -8,29 +8,84 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context
 import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.Evento
 import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.EventoCombate
 import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.EventoFactorySelector
+import kotlin.random.Random
 
 
 object GeneradorDeEventos {
-    private const val CANTIDAD = 8 // Numero de eventos generados
+    private const val CANTIDAD = 10 // Numero de eventos generados
     private var eventos = ArrayList<Evento>()
 
-    private fun crearEvento(): Evento {
-        val factory = EventoFactorySelector.obtenerFactory()
-        return factory.generarEvento()
-    }
+    private val pesosBase = mutableMapOf(
+        TipoEvento.Reliquia to 0.25,
+        TipoEvento.Tienda to 0.1,
+        TipoEvento.Riesgo to 0.2,
+        TipoEvento.Trampa to 0.1,
+        TipoEvento.Combate to 0.25,
+        TipoEvento.Descanso to 0.0,
+        TipoEvento.Ladron to 0.1
+    )
+
+    private var historialTipos = mutableListOf<TipoEvento>()
+
 
     fun generarEventos() {
         val eventosGenerados = ArrayList<Evento>()
+        historialTipos = mutableListOf()
+
+
         while (eventosGenerados.size < CANTIDAD) {
-            val nuevoEvento = crearEvento()
+            val tipoSeleccionado = seleccionarTipoEvento()
+            println(historialTipos)
+            if (historialTipos.isNotEmpty() && tipoSeleccionado == historialTipos.last()) {
+                continue
+            }
+
+            val nuevoEvento = EventoFactorySelector.obtenerFactory(tipoSeleccionado).generarEvento()
 
             if (!eventosGenerados.contains(nuevoEvento)) {
                 eventosGenerados.add(nuevoEvento)
+                historialTipos.add(tipoSeleccionado)
             }
         }
+
         eventos = eventosGenerados
     }
 
+    private fun seleccionarTipoEvento(): TipoEvento {
+        val pesosActuales = pesosBase.toMutableMap()
+
+        // 20% Descanso tras dos riegsos en los últimos 3 eventos
+        val recientes = historialTipos.takeLast(3)
+        if (recientes.count { it == TipoEvento.Riesgo } >= 2) {
+            pesosActuales[TipoEvento.Tienda] = pesosActuales[TipoEvento.Tienda]!! + 0.2
+        // 25% Ladron si 2 reliquias
+        }else if(recientes.count{it == TipoEvento.Reliquia} >= 2){
+            pesosActuales[TipoEvento.Ladron] = 0.25
+        }
+
+        // 35% Prob de descanso tras combate 20% Tienda 10% Combate
+        val ultimoTipo = historialTipos.lastOrNull()
+        if (ultimoTipo == TipoEvento.Combate) {
+            pesosActuales[TipoEvento.Descanso] = 0.35
+            pesosActuales[TipoEvento.Tienda] = 0.2
+            pesosActuales[TipoEvento.Combate] = 0.1
+        }
+
+        val totalPesos = pesosActuales.values.sum()
+        val probabilidadesNormalizadas = pesosActuales.mapValues { it.value / totalPesos }
+
+        val acumulado = probabilidadesNormalizadas.entries.fold(mutableListOf<Pair<Double, TipoEvento>>()) { acc, entry ->
+            val sumaAcumulada = acc.lastOrNull()?.first ?: 0.0
+            acc.add(Pair(sumaAcumulada + entry.value, entry.key))
+            acc
+        }
+
+        val random = Random.nextDouble()
+        val tipoSeleccionado = acumulado.first { random <= it.first }.second
+
+        return tipoSeleccionado
+    }
+
     fun comprobarEventoDisponible() : Boolean{
         return eventos.size  >= 1
     }
@@ -66,7 +121,7 @@ object GeneradorDeEventos {
 
     private fun filtrarEventosPorDificultad(eventos: ArrayList<Evento>, dificultad: Int): Evento {
         val eventosFiltrados = eventos.filter { it.dificultad == dificultad }
-        return eventosFiltrados[eventosFiltrados.indices.random()]
+        return eventosFiltrados[eventosFiltrados.indices.first]
     }
 
 
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GestorCombate.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GestorCombate.kt
index 1d45f960d44c08c169a0b0cca900325774dd56a6..f8f1ae086d47b6b7355bb945c3f28ab3d0d6f5ec 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GestorCombate.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/GestorCombate.kt
@@ -1,6 +1,7 @@
 package com.example.ellegadodepintia.exploradoresDePintia.model
 
 
+import android.animation.ObjectAnimator
 import android.graphics.drawable.AnimationDrawable
 import android.os.Handler
 import android.os.Looper
@@ -10,12 +11,13 @@ import com.example.ellegadodepintia.R
 import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context
 import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.Efecto
 import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoInvestigarEnemigo
+import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoRegeneracionEnemigo
 import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.EventoCombate
 import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad.EfectoHabilidad
 
 object GestorCombate {
 
-    lateinit var evento : EventoCombate
+    lateinit var evento: EventoCombate
     private var turnoJugador = true
 
     fun cargarAnimacionesAtaqueProtagonista() {
@@ -62,6 +64,24 @@ object GestorCombate {
         }, ataqueDuracion.toLong())
     }
 
+    fun cargarAnimacionsRegeneracionEnemigo() {
+        val imagenEvento = context!!.findViewById<ImageView>(R.id.imagenEvento)
+        val imagenEfecto = context!!.findViewById<ImageView>(R.id.imagenEfectoEvento)
+
+        imagenEvento?.let {
+            val salto = ObjectAnimator.ofFloat(it, "translationY", 0f, -40f, 0f)
+            salto.duration = 300
+            salto.start()
+
+            imagenEfecto?.setImageResource(R.drawable.effect_regeneracion_animation)
+            val efectoAnimacion = imagenEfecto?.drawable as? AnimationDrawable
+            efectoAnimacion?.start()
+            Handler(Looper.getMainLooper()).postDelayed({
+                imagenEfecto?.setImageDrawable(null)
+            }, 600)
+        }
+    }
+
     fun calcularAtaque(ataqueBase: Int): Int {
         val ataqueFinal: Int
         val resultadoTirada = (0..100).random()
@@ -81,9 +101,15 @@ object GestorCombate {
         } else {
             evento.actualizarFinalizado(true)
             turnoJugador = true
-            "¡Enhorabuena has acabado con el monstruo!".also {
-                context!!.findViewById<TextView>(R.id.textoResultado).text = it
+            if(evento.resistenciaActual <= 0) {
+                GameState.jugador.conseguirObjeto(evento.recompensa)
+                Handler(Looper.getMainLooper()).postDelayed({
+                    "¡Enhorabuena has acabado con el monstruo!\n Te das cuenta que defendía un/una ${evento.recompensa.nombre}".also {
+                        context!!.findViewById<TextView>(R.id.textoResultado).text = it
+                    }
+                }, 200)
             }
+
         }
     }
 
@@ -104,36 +130,47 @@ object GestorCombate {
 
     fun habilidadProtagonista(nombre: String, efecto: EfectoHabilidad, energia: Int) {
         val textoResultado = context!!.findViewById<TextView>(R.id.textoResultado)
-        if(GameState.jugador.atributos[Atributo.Energia]!! >= energia){
+        if (GameState.jugador.atributos[Atributo.Energia]!! >= energia) {
             turnoJugador = false
             "${textoResultado.text} \n\n Se ha utilizado $nombre".also { textoResultado.text = it }
             restarTurnoBuffos()
             efecto.ejecutar()
             GameState.jugador.actualizarAtributo(Atributo.Energia, -energia)
             comenzarAccionEnemigo()
-        }else{
+        } else {
             "${textoResultado.text} \n\n Energía insuficiente".also { textoResultado.text = it }
         }
     }
 
-    private fun restarTurnoBuffos(){
+    private fun restarTurnoBuffos() {
         for (buffo in GameState.jugador.buffos) {
-                buffo.pasarTurno()
+            buffo.pasarTurno()
         }
     }
 
 
-    private fun accionEnemigo(){
-            val textoResultado = context!!.findViewById<TextView>(R.id.textoResultado)
-            val efectoAtaque = evento.acciones.random().ejecutar()
-            if(GameState.jugador.atributos[Atributo.Vida]!! <= 0){
-                Handler(Looper.getMainLooper()).postDelayed({
-                    turnoJugador = true
-                }, 2000)
-            } else {
+    private fun accionEnemigo() {
+        val textoResultado = context!!.findViewById<TextView>(R.id.textoResultado)
+        val efectoAtaque = seleccionarAccionEnemigo().ejecutar()
+        if (GameState.jugador.atributos[Atributo.Vida]!! <= 0) {
+            Handler(Looper.getMainLooper()).postDelayed({
                 turnoJugador = true
-                "${textoResultado.text} \n\n $efectoAtaque".also { textoResultado.text = it }
-            }
+            }, 2000)
+        } else {
+            turnoJugador = true
+            "${textoResultado.text} \n\n $efectoAtaque".also { textoResultado.text = it }
+        }
+    }
+
+    private fun seleccionarAccionEnemigo(): Efecto {
+        val tieneRecuperacion = evento.acciones.any { it is EfectoRegeneracionEnemigo }
+        val porcentajeVida =
+            GameState.eventoActual.resistenciaActual / GameState.eventoActual.resistenciaMax.toDouble()
+        return if (tieneRecuperacion && porcentajeVida <= 0.3) {
+            evento.acciones.random()
+        } else {
+            evento.acciones.filterNot { it is EfectoRegeneracionEnemigo }.random()
+        }
     }
 
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/TipoEvento.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/TipoEvento.kt
index 6e5dcbe9b768c5f3c492a609df7d78f5a20ed7a0..4966a4d9e691dfa242eb888b3304b6b836e3c473 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/TipoEvento.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/TipoEvento.kt
@@ -10,6 +10,7 @@ enum class TipoEvento {
     Ladron,
     Desenterrar,
     /*Trampa,
+    /*
     Aliado,
     Misterio,
     Magia,
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoAtaqueProtagonista.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoAtaqueProtagonista.kt
index 98ef0631da7edf17005c7b726fd3a2ade4e8da29..50da27b81c9bd3825a8b500adc0e78491fdedb41 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoAtaqueProtagonista.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoAtaqueProtagonista.kt
@@ -15,7 +15,7 @@ class EfectoAtaqueProtagonista(probabilidadExito: Int) : Efecto(probabilidadExit
             GameState.eventoActual.actualizarResistencia(-ataqueReal)
             mensaje = "¡Ataque realizado con éxito has hecho $ataqueReal de daño"
         } else {
-            mensaje = "El enemigo ha aguantado el golpe, recibe 0 de daño"
+            mensaje = "Has fallado el golpe, recibe 0 de daño"
         }
         return mensaje
     }
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRegeneracionEnemigo.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRegeneracionEnemigo.kt
new file mode 100644
index 0000000000000000000000000000000000000000..d3e0ae61f0573538fd48ffc1eda6b85ad9db6fae
--- /dev/null
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/efecto/EfectoRegeneracionEnemigo.kt
@@ -0,0 +1,14 @@
+package com.example.ellegadodepintia.exploradoresDePintia.model.efecto
+
+import com.example.ellegadodepintia.exploradoresDePintia.model.GameState
+import com.example.ellegadodepintia.exploradoresDePintia.model.GestorCombate
+
+class EfectoRegeneracionEnemigo(private val mensajeCuracion: String,private val cantidad: Int) : Efecto(100) {
+    override fun ejecutar(): String {
+        GestorCombate.cargarAnimacionsRegeneracionEnemigo()
+
+        GameState.eventoActual.actualizarResistencia(cantidad)
+
+        return mensajeCuracion
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/CombateFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/CombateFactory.kt
index ba6004a2c96a5ca5b6d10cc0774c26e31f214073..9d2ccef3749a14d325e73395a27d820fc4d54fee 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/CombateFactory.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/CombateFactory.kt
@@ -5,16 +5,28 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.GameState
 import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo
 import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion
 import com.example.ellegadodepintia.exploradoresDePintia.model.OpcionCombate
+import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.Efecto
 import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoAtaqueEnemigo
 import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoAtaqueProtagonista
 import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoHabilidadesProtagonista
 import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoHuirProtagonista
 import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoInvestigarEnemigo
+import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoRegeneracionEnemigo
+import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto
+import com.example.ellegadodepintia.repositorios.RepositorioObjetos
+
+data class CombateInfo(
+    val imagenIdle: Int,
+    val imagenAtaque: Int,
+    val opciones: List<Opcion>,
+    val habilidades: List<Efecto>,
+    val recompensa: Objeto
+)
 
 class CombateFactory : EventoFactory {
 
     private val combatesMap = mapOf(
-        "El Metal Volador es una criatura formada por fragmentos de metal antiguo. Protege los secretos del yacimiento de Pintia." to Triple(
+        "El Metal Volador es una criatura formada por fragmentos de metal antiguo. Protege los secretos del yacimiento de Pintia." to CombateInfo(
             R.drawable.monster_metal_idle_animation,
             R.drawable.monster_metal_attack_animation,
             listOf(
@@ -26,7 +38,7 @@ class CombateFactory : EventoFactory {
                 Opcion(
                     descripcion = "Investigar",
                     atributoRequerida = Atributo.Investigacion,
-                    EfectoInvestigarEnemigo(100)
+                    efecto = EfectoInvestigarEnemigo(100)
                 ),
                 Opcion(
                     descripcion = "Habilidades",
@@ -38,7 +50,12 @@ class CombateFactory : EventoFactory {
                     atributoRequerida = Atributo.Vida,
                     efecto = EfectoHuirProtagonista(GameState.jugador.atributos[Atributo.Vida]!!),
                 ),
-            )
+            ),
+            listOf(
+                EfectoAtaqueEnemigo(80),
+                EfectoRegeneracionEnemigo("El metal reconfigura sus fragmentos recuperando parte de su vida", (1..2).random())
+            ),
+            RepositorioObjetos.obtenerObjetoPorNombre("Moneda de plata Vaccea")!!
         ),
     )
 
@@ -48,30 +65,29 @@ class CombateFactory : EventoFactory {
 
     override fun generarEvento(): EventoCombate {
         val descripcion = generarDescripcion()
+        val combateInfo = combatesMap[descripcion] ?: throw IllegalArgumentException("No se encontró información de combate")
+
         return EventoCombate(
             descripcion = descripcion,
             dificultad = 0,
-            opciones = generarOpciones(descripcion),
-            imagenAtaque = generarImagenAtaque(descripcion),
-            imagen = generarImagen(descripcion),
+            opciones = combateInfo.opciones.toMutableList(),
+            imagenAtaque = combateInfo.imagenAtaque,
+            imagen = combateInfo.imagenIdle,
             resistenciaMax = (5..10).random(),
             ataque = (1..2).random(),
             finalizado = false,
-            acciones = mutableListOf(EfectoAtaqueEnemigo(70))
+            acciones = combateInfo.habilidades.toMutableList(),
+            recompensa = combateInfo.recompensa
         )
     }
 
     override fun generarOpciones(descripcion: String): MutableList<Opcion> {
-        return combatesMap[descripcion]?.third?.take(4)?.toMutableList()
-            ?: mutableListOf()
+        val combateInfo = combatesMap[descripcion] ?: return mutableListOf()
+        return combateInfo.opciones.take(4).toMutableList()
     }
 
     override fun generarImagen(descripcion: String): Int {
-        return combatesMap[descripcion]?.first!!
-    }
-
-    private fun generarImagenAtaque(descripcion: String): Int {
-        return combatesMap[descripcion]?.second!!
+        return combatesMap[descripcion]!!.imagenIdle
     }
 
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/DescansoFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/DescansoFactory.kt
index 20f6e438be2a7feaa632d5f94736289f3e302e54..1e4b78b21012c8f90b9b7057b0a2d42b1b0b2421 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/DescansoFactory.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/DescansoFactory.kt
@@ -7,40 +7,33 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoIgno
 import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoNubeVaccea
 
 class DescansoFactory : EventoFactory {
-    private val descansosMap = mapOf(
-        "Llegaste a un campamento vacceo, con un gran fuego en el centro y chozas hechas de madera y barro. Aquí puedes descansar, recuperar energía y estar listo para nuevas aventuras." to Pair(
-            R.drawable.asi_exploradores_campamento, listOf(
-                Opcion(
-                    descripcion = "Descansar",
-                    atributoRequerida = Atributo.Energia,
-                    EfectoNubeVaccea()
-
-                ), Opcion(
-                    descripcion = "Continuar",
-                    atributoRequerida = Atributo.Nula,
-                    EfectoIgnorar(100)
-                )
-            )
-        )
-    )
+    val descripcion = "Llegaste a un campamento vacceo, con un gran fuego en el centro y chozas hechas de madera y barro. Aquí puedes descansar, recuperar energía y estar listo para nuevas aventuras."
 
     override fun generarDescripcion(): String {
-        return descansosMap.keys.random()
+        return descripcion
     }
 
     override fun generarOpciones(descripcion: String): MutableList<Opcion> {
-        return descansosMap[descripcion]?.second?.toMutableList()
-            ?: mutableListOf()
+        return mutableListOf(
+            Opcion(
+                descripcion = "Descansar",
+                atributoRequerida = Atributo.Energia,
+                EfectoNubeVaccea()
+
+            ), Opcion(
+                descripcion = "Continuar",
+                atributoRequerida = Atributo.Nula,
+                EfectoIgnorar(100)
+            ))
     }
 
     override fun generarImagen(descripcion: String): Int {
-        return descansosMap[descripcion]?.first!!
+        return R.drawable.asi_exploradores_campamento
     }
 
     override fun generarEvento(): EventoDescanso {
-        val descripcion = generarDescripcion()
         return EventoDescanso(
-            descripcion = descripcion,
+            descripcion = generarDescripcion(),
             dificultad = 0,
             opciones = generarOpciones(descripcion),
             imagen = generarImagen(descripcion),
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/Evento.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/Evento.kt
index 7eba605a117f5f82d69aa2c3f858d405c717148f..702fac9fa696005116810e05be687308d9059faf 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/Evento.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/Evento.kt
@@ -25,6 +25,9 @@ abstract class Evento(
 
     fun actualizarResistencia(valor : Int){
         resistenciaActual += valor
+        if(resistenciaActual >= resistenciaMax){
+            resistenciaActual = resistenciaMax
+        }
         notifyObservers()
     }
 
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoCombate.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoCombate.kt
index 5c42d31a6f20b47634a8f94683424fff423ffac3..5545d623ce49ed4e23366fecc626722905ad1697 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoCombate.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoCombate.kt
@@ -2,8 +2,11 @@ package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory
 
 import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion
 import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.Efecto
+import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto
+import java.util.UUID
 
 class EventoCombate(
+
     override val descripcion: String,
     override val dificultad: Int,
     override val opciones: MutableList<Opcion>,
@@ -12,4 +15,18 @@ class EventoCombate(
     var ataque: Int,
     val imagenAtaque : Int,
     val acciones: MutableList<Efecto>,
-) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado)
\ No newline at end of file
+    val recompensa : Objeto
+) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado){
+    val id: String = UUID.randomUUID().toString()
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other == null || javaClass != other.javaClass) return false
+        other as EventoCombate
+
+        return id == other.id
+    }
+
+    override fun hashCode(): Int {
+        return 31 * id.hashCode()
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoDescanso.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoDescanso.kt
index d30a839cc13c4ebba9023266ef6ccd4bbd4b473c..04c021b30607aee604b09d896623945f6a89ccec 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoDescanso.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoDescanso.kt
@@ -1,6 +1,7 @@
 package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory
 
 import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion
+import java.util.UUID
 
 class EventoDescanso(
     override val descripcion: String,
@@ -8,4 +9,18 @@ class EventoDescanso(
     override val opciones: MutableList<Opcion>,
     override val imagen: Int, resistenciaMax: Int,
     override var finalizado: Boolean,
-) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado)
\ No newline at end of file
+) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado) {
+    val id: String = UUID.randomUUID().toString()
+
+    override fun equals(other: Any?): Boolean {
+        if (this === other) return true
+        if (other == null || javaClass != other.javaClass) return false
+        other as EventoDescanso
+
+        return id == other.id
+    }
+
+    override fun hashCode(): Int {
+        return 31 * id.hashCode()
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactorySelector.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactorySelector.kt
index 9cb68052b600087f8ea52de84343234763b87ce7..3a1beff845c1866979e24dc021165e2d53d96b0b 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactorySelector.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoFactorySelector.kt
@@ -4,9 +4,7 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.TipoEvento
 
 object EventoFactorySelector {
 
-    fun obtenerFactory(): EventoFactory {
-        val tipo = seleccionarTipoEventoConProbabilidades()
-
+    fun obtenerFactory(tipo: TipoEvento): EventoFactory {
         return when (tipo) {
             TipoEvento.Reliquia -> ReliquiaFactory()
             TipoEvento.Combate -> CombateFactory()
@@ -18,26 +16,4 @@ object EventoFactorySelector {
             TipoEvento.Desenterrar -> DesenterrarFactory()
         }
     }
-
-    private fun seleccionarTipoEventoConProbabilidades(): TipoEvento {
-        val probabilidades = mapOf(
-            TipoEvento.Reliquia to 0.2,
-            TipoEvento.Tienda to 0.1,
-            TipoEvento.Riesgo to 0.1,
-            TipoEvento.Trampa to 0.1,
-            TipoEvento.Combate to 0.2,
-            TipoEvento.Descanso to 0.1,
-            TipoEvento.Ladron to 0.1,
-            TipoEvento.Desenterrar to 0.1
-        )
-
-        val acumulado = probabilidades.entries.fold(mutableListOf<Pair<Double, TipoEvento>>()) { acc, entry ->
-            val sumaAcumulada = acc.lastOrNull()?.first ?: 0.0
-            acc.add(Pair(sumaAcumulada + entry.value, entry.key))
-            acc
-        }
-
-        val random = Math.random()
-        return acumulado.first { random <= it.first }.second
-    }
 }
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/RiesgoFactory.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/RiesgoFactory.kt
index 26c410bbd07a0e35a38269ac675fdb2beec73942..e205b26cf3163982beb433062d994addd96ddd2a 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/RiesgoFactory.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/RiesgoFactory.kt
@@ -76,7 +76,7 @@ class RiesgoFactory : EventoFactory {
 
         val evento = EventoRiesgo(
             id = id,
-            descripcion = descripcionComun,
+            descripcion = generarDescripcion(),
             dificultad = 0,
             opciones = eventoData.opciones.toMutableList(),
             imagen = eventoData.imagen,
diff --git a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoDeValor.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoDeValor.kt
index 176b7f0e11fcd36d6dc111ba2f59e87e24340580..c434380705674280cdd816e23dada73ec6e4acf8 100644
--- a/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoDeValor.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/objeto/ObjetoDeValor.kt
@@ -2,7 +2,7 @@ package com.example.ellegadodepintia.exploradoresDePintia.model.objeto
 
 import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoVender
 
-class ObjetoDeValor(
+open class ObjetoDeValor(
     nombre: String,
     descripcion: String,
     imagen: Int,
diff --git a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt
index dc314b5604e581e2d5ffe8fda2afff2075f4e187..f1072323c00dcff1d94eb40a4d4af222642bc44f 100644
--- a/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/repositorios/RepositorioObjetos.kt
@@ -83,6 +83,12 @@ object RepositorioObjetos {
                 nombre = "Pala Vaccea",
                 descripcion = "Una antigua pala con marcas de uso, forjada con madera resistente y un metal desgastado por el tiempo. Parece estar llena de historia.",
                 imagen = R.drawable.asi_objeto_pala
+            ),
+            ObjetoDeValor(
+                nombre= "Moneda de plata Vaccea",
+                descripcion = "Pequeño denario con símbolos celtíberos, utilizadas para el comercio. Su circulación refleja una economía organizada en torno a la élite guerrera",
+                imagen = R.drawable.asi_objeto_moneda,
+                coste = 15
             )
         ).associateBy { it.nombre }
     }
diff --git a/app/src/main/res/drawable-nodpi/asi_objeto_moneda.JPG b/app/src/main/res/drawable-nodpi/asi_objeto_moneda.JPG
new file mode 100644
index 0000000000000000000000000000000000000000..00d4e625af26a461291d568eeebbab83c70b3f6b
Binary files /dev/null and b/app/src/main/res/drawable-nodpi/asi_objeto_moneda.JPG differ
diff --git a/app/src/main/res/drawable/asi_objeto_tesoro.jpg b/app/src/main/res/drawable/asi_objeto_tesoro.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..830886700eac2926108f9e2b89c3b824edff0df7
Binary files /dev/null and b/app/src/main/res/drawable/asi_objeto_tesoro.jpg differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_00.png b/app/src/main/res/drawable/effect_regeneracion_00.png
new file mode 100644
index 0000000000000000000000000000000000000000..4fb349e7880e17e77d3202fc3dd5f3835d76db9e
Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_00.png differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_01.png b/app/src/main/res/drawable/effect_regeneracion_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..0fc4d55d75de910665fdb09ea550ec2c532c0b95
Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_01.png differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_010.png b/app/src/main/res/drawable/effect_regeneracion_010.png
new file mode 100644
index 0000000000000000000000000000000000000000..560e8c8fbd67f9becdf18419d8c16dd18df905a2
Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_010.png differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_011.png b/app/src/main/res/drawable/effect_regeneracion_011.png
new file mode 100644
index 0000000000000000000000000000000000000000..167b8b410c6f39279474ab98fa05146bf1d48221
Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_011.png differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_012.png b/app/src/main/res/drawable/effect_regeneracion_012.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b92a8410ab5563a0a510d0488ab94adc25bb8b7
Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_012.png differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_02.png b/app/src/main/res/drawable/effect_regeneracion_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..a0faad3bb6bae8939fbe8de17a49211423c6080c
Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_02.png differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_03.png b/app/src/main/res/drawable/effect_regeneracion_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a509fab616c0e1c813f5c1b4400bd8b001df479
Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_03.png differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_04.png b/app/src/main/res/drawable/effect_regeneracion_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef5fc55768b9c59ce4be339f5cd60c2d7306c22f
Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_04.png differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_05.png b/app/src/main/res/drawable/effect_regeneracion_05.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ac51a595d3450c1ddb19df34ce826dd9ec2e9e6
Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_05.png differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_06.png b/app/src/main/res/drawable/effect_regeneracion_06.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ef2e1281858a29e1c50f7cd23ba54760d91845e
Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_06.png differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_07.png b/app/src/main/res/drawable/effect_regeneracion_07.png
new file mode 100644
index 0000000000000000000000000000000000000000..c3c3e128f3a2850901ab5cb0b7677690aeca321e
Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_07.png differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_08.png b/app/src/main/res/drawable/effect_regeneracion_08.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8efd3c2802e593150dd27ead530eabe5de921ca
Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_08.png differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_09.png b/app/src/main/res/drawable/effect_regeneracion_09.png
new file mode 100644
index 0000000000000000000000000000000000000000..d0c14e75f53098b0fdb281d52992a70bccc717b2
Binary files /dev/null and b/app/src/main/res/drawable/effect_regeneracion_09.png differ
diff --git a/app/src/main/res/drawable/effect_regeneracion_animation.xml b/app/src/main/res/drawable/effect_regeneracion_animation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d46358515a123a9101eea610576250817757d0e3
--- /dev/null
+++ b/app/src/main/res/drawable/effect_regeneracion_animation.xml
@@ -0,0 +1,17 @@
+<!-- res/drawable/idle_animation.xml -->
+<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
+    android:oneshot="false">
+    <item android:drawable="@drawable/effect_regeneracion_00" android:duration="50" />
+    <item android:drawable="@drawable/effect_regeneracion_01" android:duration="50" />
+    <item android:drawable="@drawable/effect_regeneracion_02" android:duration="50" />
+    <item android:drawable="@drawable/effect_regeneracion_03" android:duration="50" />
+    <item android:drawable="@drawable/effect_regeneracion_04" android:duration="50" />
+    <item android:drawable="@drawable/effect_regeneracion_05" android:duration="50" />
+    <item android:drawable="@drawable/effect_regeneracion_06" android:duration="50" />
+    <item android:drawable="@drawable/effect_regeneracion_07" android:duration="50" />
+    <item android:drawable="@drawable/effect_regeneracion_08" android:duration="50" />
+    <item android:drawable="@drawable/effect_regeneracion_09" android:duration="50" />
+    <item android:drawable="@drawable/effect_regeneracion_010" android:duration="50" />
+    <item android:drawable="@drawable/effect_regeneracion_011" android:duration="50" />
+    <item android:drawable="@drawable/effect_regeneracion_012" android:duration="50" />
+</animation-list>
diff --git a/app/src/main/res/raw/sound_battle.mp3 b/app/src/main/res/raw/sound_battle.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..588f4a2749b70c22dc422170eb5ce329364d3eaa
Binary files /dev/null and b/app/src/main/res/raw/sound_battle.mp3 differ
diff --git a/app/src/main/res/raw/sound_exploradores_idle.mp3 b/app/src/main/res/raw/sound_exploradores_idle.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..ee993bc43e6b2909544974f29d827dc14a223443
Binary files /dev/null and b/app/src/main/res/raw/sound_exploradores_idle.mp3 differ