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 626d9a481f52d78c9c15e3063780a180586da632..9ea2addde61575a1e7bb1f1a2e3877466b05bc19 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
@@ -30,16 +30,20 @@ object GeneradorDeEventos {
 
     fun generarEventos() {
         val eventosGenerados = ArrayList<Evento>()
+        historialTipos = mutableListOf()
 
         while (eventosGenerados.size < CANTIDAD) {
             val tipoSeleccionado = seleccionarTipoEvento()
+
+            if (historialTipos.isNotEmpty() && tipoSeleccionado == historialTipos.last()) {
+                continue
+            }
+
             val nuevoEvento = EventoFactorySelector.obtenerFactory(tipoSeleccionado).generarEvento()
 
-            if (historialTipos.lastOrNull() != tipoSeleccionado || eventosGenerados.isEmpty()) {
-                if (!eventosGenerados.contains(nuevoEvento)) {
-                    eventosGenerados.add(nuevoEvento)
-                    historialTipos.add(tipoSeleccionado)
-                }
+            if (!eventosGenerados.contains(nuevoEvento)) {
+                eventosGenerados.add(nuevoEvento)
+                historialTipos.add(tipoSeleccionado)
             }
         }
 
@@ -78,11 +82,6 @@ object GeneradorDeEventos {
         val random = Random.nextDouble()
         val tipoSeleccionado = acumulado.first { random <= it.first }.second
 
-        val ultimosDos = historialTipos.takeLast(2)
-        if (tipoSeleccionado in ultimosDos) {
-            return seleccionarTipoEvento()
-        }
-
         return tipoSeleccionado
     }
 
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..69984783516e636f0122d01877f9fde0ccbdc496 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()
@@ -104,36 +124,46 @@ 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/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..91a89b69ac9170228a844bb050279b7347288843 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,25 @@ 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
+
+data class CombateInfo(
+    val imagenIdle: Int,
+    val imagenAtaque: Int,
+    val opciones: List<Opcion>,
+    val habilidades: List<Efecto>
+)
 
 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 +35,7 @@ class CombateFactory : EventoFactory {
                 Opcion(
                     descripcion = "Investigar",
                     atributoRequerida = Atributo.Investigacion,
-                    EfectoInvestigarEnemigo(100)
+                    efecto = EfectoInvestigarEnemigo(100)
                 ),
                 Opcion(
                     descripcion = "Habilidades",
@@ -38,6 +47,10 @@ 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())
             )
         ),
     )
@@ -48,30 +61,28 @@ 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()
         )
     }
 
     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 487678254af22f7ec75633b7b5c8e4f5d4c3eb77..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
@@ -33,7 +33,6 @@ class DescansoFactory : EventoFactory {
 
     override fun generarEvento(): EventoDescanso {
         return EventoDescanso(
-            id = (0..Int.MAX_VALUE).random(),
             descripcion = generarDescripcion(),
             dificultad = 0,
             opciones = generarOpciones(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/EventoDescanso.kt b/app/src/main/java/com/example/ellegadodepintia/exploradoresDePintia/model/eventoFactory/EventoDescanso.kt
index dc510df6cea179cd7a3e1a081cd015cfcc41d665..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,15 +1,17 @@
 package com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory
 
 import com.example.ellegadodepintia.exploradoresDePintia.model.Opcion
+import java.util.UUID
 
 class EventoDescanso(
-    val id: Int,
     override val descripcion: String,
     override val dificultad: Int,
     override val opciones: MutableList<Opcion>,
     override val imagen: Int, resistenciaMax: Int,
     override var finalizado: Boolean,
 ) : 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
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>