Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • diegval/el-legado-de-pintia
1 result
Select Git revision
Show changes
Commits on Source (5)
Showing
with 281 additions and 112 deletions
...@@ -47,7 +47,7 @@ class ModalDetallesEnemigo : DialogFragment() { ...@@ -47,7 +47,7 @@ class ModalDetallesEnemigo : DialogFragment() {
} }
} }
if(GameState.jugador.atributos[Atributo.Investigacion]!! >= GameState.eventoActual.resistenciaMax){ if(GameState.jugador.atributos[Atributo.Investigacion]!! >= GameState.eventoActual.resistenciaActual/2){
view.findViewById<TextView>(R.id.textoVidaMaxima).text = buildString { view.findViewById<TextView>(R.id.textoVidaMaxima).text = buildString {
append("Vida: ") append("Vida: ")
append(GameState.eventoActual.resistenciaActual) append(GameState.eventoActual.resistenciaActual)
......
...@@ -5,5 +5,6 @@ enum class Atributo { ...@@ -5,5 +5,6 @@ enum class Atributo {
Ataque, Ataque,
Investigacion, Investigacion,
Energia, Energia,
Nula Nula,
Critico
} }
\ No newline at end of file
...@@ -37,9 +37,9 @@ object GeneradorDeEventos { ...@@ -37,9 +37,9 @@ object GeneradorDeEventos {
while (eventosGenerados.size < CANTIDAD) { while (eventosGenerados.size < CANTIDAD) {
val tipoSeleccionado = seleccionarTipoEvento() val tipoSeleccionado = seleccionarTipoEvento()
println(historialTipos) println(historialTipos)
if (historialTipos.isNotEmpty() && tipoSeleccionado == historialTipos.last()) { /*if (historialTipos.isNotEmpty() && tipoSeleccionado == historialTipos.last()) {
continue continue
} }*/
val nuevoEvento = EventoFactorySelector.obtenerFactory(tipoSeleccionado).generarEvento() val nuevoEvento = EventoFactorySelector.obtenerFactory(tipoSeleccionado).generarEvento()
...@@ -128,5 +128,11 @@ object GeneradorDeEventos { ...@@ -128,5 +128,11 @@ object GeneradorDeEventos {
return eventosFiltrados[eventosFiltrados.indices.first] return eventosFiltrados[eventosFiltrados.indices.first]
} }
fun insertarCombate() {
val nuevoCombate = EventoFactorySelector.obtenerFactory(TipoEvento.Combate).generarEvento()
eventos.add(0, nuevoCombate)
historialTipos.add(0, TipoEvento.Combate)
}
} }
...@@ -12,6 +12,7 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context ...@@ -12,6 +12,7 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context
import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.Efecto import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.Efecto
import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoInvestigarEnemigo import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoInvestigarEnemigo
import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoRegeneracionEnemigo import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoRegeneracionEnemigo
import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoRevivirEnemigo
import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.EventoCombate import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.EventoCombate
import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad.EfectoHabilidad import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad.EfectoHabilidad
...@@ -82,10 +83,10 @@ object GestorCombate { ...@@ -82,10 +83,10 @@ object GestorCombate {
} }
} }
fun calcularAtaque(ataqueBase: Int): Int { fun calcularAtaque(ataqueBase: Int, probabilidadCritico: Int): Int {
val ataqueFinal: Int val ataqueFinal: Int
val resultadoTirada = (0..100).random() val resultadoTirada = (0..100).random()
ataqueFinal = if (resultadoTirada <= 8) { ataqueFinal = if (resultadoTirada <= probabilidadCritico) {
ataqueBase * 2 ataqueBase * 2
} else { } else {
ataqueBase ataqueBase
...@@ -99,8 +100,9 @@ object GestorCombate { ...@@ -99,8 +100,9 @@ object GestorCombate {
accionEnemigo() accionEnemigo()
}, 800) }, 800)
} else { } else {
evento.actualizarFinalizado(true)
turnoJugador = true turnoJugador = true
if (revivirEnemigo() == "Fallo") {
evento.actualizarFinalizado(true)
if (evento.resistenciaActual <= 0) { if (evento.resistenciaActual <= 0) {
GameState.jugador.conseguirObjeto(evento.recompensa) GameState.jugador.conseguirObjeto(evento.recompensa)
Handler(Looper.getMainLooper()).postDelayed({ Handler(Looper.getMainLooper()).postDelayed({
...@@ -109,8 +111,22 @@ object GestorCombate { ...@@ -109,8 +111,22 @@ object GestorCombate {
} }
}, 200) }, 200)
} }
}
}
}
private fun revivirEnemigo(): String {
var mensaje = "Fallo"
val tieneRevivir = evento.acciones.any { it is EfectoRevivirEnemigo }
if (tieneRevivir) {
mensaje = evento.acciones.filterIsInstance<EfectoRevivirEnemigo>().first().ejecutar()
Handler(Looper.getMainLooper()).postDelayed({
val textoResultado = context!!.findViewById<TextView>(R.id.textoResultado)
"${textoResultado.text} \n\n $mensaje".also { textoResultado.text = it }
}, 200)
} }
return mensaje
} }
fun accionProtagonista(efecto: Efecto): String { fun accionProtagonista(efecto: Efecto): String {
...@@ -167,9 +183,12 @@ object GestorCombate { ...@@ -167,9 +183,12 @@ object GestorCombate {
val porcentajeVida = val porcentajeVida =
GameState.eventoActual.resistenciaActual / GameState.eventoActual.resistenciaMax.toDouble() GameState.eventoActual.resistenciaActual / GameState.eventoActual.resistenciaMax.toDouble()
return if (tieneRecuperacion && porcentajeVida <= 0.3) { return if (tieneRecuperacion && porcentajeVida <= 0.3) {
evento.acciones.random() evento.acciones.filterNot { it is EfectoRevivirEnemigo }.random()
} else { } else {
evento.acciones.filterNot { it is EfectoRegeneracionEnemigo }.random() evento.acciones.filterNot {
it is EfectoRegeneracionEnemigo ||
it is EfectoRevivirEnemigo
}.random()
} }
} }
......
...@@ -126,5 +126,4 @@ object GestorDeEventos{ ...@@ -126,5 +126,4 @@ object GestorDeEventos{
} }
} }
\ No newline at end of file
...@@ -36,6 +36,9 @@ class Jugador { ...@@ -36,6 +36,9 @@ class Jugador {
atributos[Atributo.Ataque] = 1 atributos[Atributo.Ataque] = 1
atributos[Atributo.Investigacion] = 1 atributos[Atributo.Investigacion] = 1
atributos[Atributo.Energia] = 10 atributos[Atributo.Energia] = 10
atributos[Atributo.Critico] = 8
inventario.add(RepositorioObjetos.obtenerObjetoPorNombre("Puñal Vacceo")!!)
habilidades.add( habilidades.add(
Habilidad( Habilidad(
...@@ -54,15 +57,6 @@ class Jugador { ...@@ -54,15 +57,6 @@ class Jugador {
3 3
) )
) )
inventario.add(
ObjetoUtilidad(
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
)
)
/*habilidades.add( /*habilidades.add(
Habilidad( Habilidad(
nombre = "Revitalización Floral", nombre = "Revitalización Floral",
......
...@@ -14,7 +14,7 @@ class EfectoAtaqueEnemigo(probabilidadExito: Int) : Efecto(probabilidadExito) { ...@@ -14,7 +14,7 @@ class EfectoAtaqueEnemigo(probabilidadExito: Int) : Efecto(probabilidadExito) {
GestorCombate.cargarAnimacionesAtaqueEnemigo() GestorCombate.cargarAnimacionesAtaqueEnemigo()
if (probabilidadEnemigo <= probabilidadExito) { if (probabilidadEnemigo <= probabilidadExito) {
val ataqueReal = GestorCombate.calcularAtaque(evento.ataque) val ataqueReal = GestorCombate.calcularAtaque(evento.ataque, evento.probCritico)
GameState.jugador.actualizarAtributo(Atributo.Vida, -ataqueReal) GameState.jugador.actualizarAtributo(Atributo.Vida, -ataqueReal)
......
...@@ -11,7 +11,7 @@ class EfectoAtaqueProtagonista(probabilidadExito: Int) : Efecto(probabilidadExit ...@@ -11,7 +11,7 @@ class EfectoAtaqueProtagonista(probabilidadExito: Int) : Efecto(probabilidadExit
if (probabilidadPersonaje <= probabilidadExito) { if (probabilidadPersonaje <= probabilidadExito) {
GestorCombate.cargarAnimacionesAtaqueProtagonista() GestorCombate.cargarAnimacionesAtaqueProtagonista()
val ataqueReal = GestorCombate.calcularAtaque(GameState.jugador.atributos[Atributo.Ataque]!!) val ataqueReal = GestorCombate.calcularAtaque(GameState.jugador.atributos[Atributo.Ataque]!!, GameState.jugador.atributos[Atributo.Critico]!!)
GameState.eventoActual.actualizarResistencia(-ataqueReal) GameState.eventoActual.actualizarResistencia(-ataqueReal)
mensaje = "¡Ataque realizado con éxito has hecho $ataqueReal de daño" mensaje = "¡Ataque realizado con éxito has hecho $ataqueReal de daño"
} else { } else {
......
...@@ -8,6 +8,7 @@ import com.example.ellegadodepintia.R ...@@ -8,6 +8,7 @@ import com.example.ellegadodepintia.R
import com.example.ellegadodepintia.exploradoresDePintia.model.GameState import com.example.ellegadodepintia.exploradoresDePintia.model.GameState
import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context
import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo
import com.example.ellegadodepintia.exploradoresDePintia.model.GeneradorDeEventos
import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoDeValor import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoDeValor
//TODO() Agregar inventario con restos de la reliquia //TODO() Agregar inventario con restos de la reliquia
...@@ -42,8 +43,14 @@ class EfectoDestruir(probabilidadExito: Int) : Efecto(probabilidadExito) { ...@@ -42,8 +43,14 @@ class EfectoDestruir(probabilidadExito: Int) : Efecto(probabilidadExito) {
coste = 5 coste = 5
) )
) )
val probabilidadCombate = (0..1).random()
if(probabilidadCombate <= 60){
GeneradorDeEventos.insertarCombate()
"¡Qué has hecho, la reliquia se ha roto por completo!. Has conseguido un fragmento de la reliquia. Parece que un enemigo te ha visto, ¡el próximo evento será un combate!"
}else{
"¡Qué has hecho, la reliquia se ha roto por completo!. Has conseguido un fragmento de la reliquia" "¡Qué has hecho, la reliquia se ha roto por completo!. Has conseguido un fragmento de la reliquia"
} }
}
} else { } else {
"La reliquia ha resistido el golpe con éxito." "La reliquia ha resistido el golpe con éxito."
} }
......
...@@ -36,7 +36,7 @@ class EfectoReparar(probabilidadExito: Int, private val stringReparado: String, ...@@ -36,7 +36,7 @@ class EfectoReparar(probabilidadExito: Int, private val stringReparado: String,
} }
return if (probabilidad <= probabilidadExito) { return if (probabilidad <= probabilidadExito) {
GameState.eventoActual.actualizarResistencia(1) GameState.eventoActual.actualizarResistencia(GameState.jugador.atributos[Atributo.Investigacion]!!)
if(GameState.eventoActual.resistenciaActual == GameState.eventoActual.resistenciaMax){ if(GameState.eventoActual.resistenciaActual == GameState.eventoActual.resistenciaMax){
val intent = Intent(context, MinijuegoReparacion::class.java) val intent = Intent(context, MinijuegoReparacion::class.java)
......
package com.example.ellegadodepintia.exploradoresDePintia.model.efecto
import com.example.ellegadodepintia.exploradoresDePintia.model.GameState
import com.example.ellegadodepintia.exploradoresDePintia.model.GestorCombate
class EfectoRevivirEnemigo(
private val mensajeRevivir: String, private val porcentaje: Double,
probabilidadExito: Int
) :
Efecto(probabilidadExito) {
override fun ejecutar(): String {
val probabilidadGenerada = (1..100).random()
if (probabilidadGenerada <= probabilidadExito) {
GestorCombate.cargarAnimacionsRegeneracionEnemigo()
GameState.eventoActual.setResistencia(
(GameState.eventoActual.resistenciaMax * porcentaje).toInt()
)
return mensajeRevivir
} else {
return "Fallo"
}
}
}
\ No newline at end of file
...@@ -12,14 +12,16 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoHabi ...@@ -12,14 +12,16 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoHabi
import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoHuirProtagonista import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoHuirProtagonista
import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoInvestigarEnemigo import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoInvestigarEnemigo
import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoRegeneracionEnemigo import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoRegeneracionEnemigo
import com.example.ellegadodepintia.exploradoresDePintia.model.efecto.EfectoRevivirEnemigo
import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.Objeto
import com.example.ellegadodepintia.repositorios.RepositorioObjetos import com.example.ellegadodepintia.repositorios.RepositorioObjetos
data class CombateInfo( data class CombateInfo(
val imagenIdle: Int, val imagenIdle: Int,
val imagenAtaque: Int, val imagenAtaque: Int,
val opciones: List<Opcion>,
val habilidades: List<Efecto>, val habilidades: List<Efecto>,
val vidaMax: Int,
val ataque: Int,
val recompensa: Objeto val recompensa: Objeto
) )
...@@ -29,34 +31,25 @@ class CombateFactory : EventoFactory { ...@@ -29,34 +31,25 @@ class CombateFactory : EventoFactory {
"El Metal Volador es una criatura formada por fragmentos de metal antiguo. Protege los secretos del yacimiento de Pintia." to CombateInfo( "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_idle_animation,
R.drawable.monster_metal_attack_animation, R.drawable.monster_metal_attack_animation,
listOf(
OpcionCombate(
descripcion = "Atacar",
atributoRequerida = Atributo.Ataque,
efecto = EfectoAtaqueProtagonista(70)
),
Opcion(
descripcion = "Investigar",
atributoRequerida = Atributo.Investigacion,
efecto = EfectoInvestigarEnemigo(100)
),
Opcion(
descripcion = "Habilidades",
atributoRequerida = Atributo.Nula,
efecto = EfectoHabilidadesProtagonista(GameState.jugador.atributos[Atributo.Vida]!!)
),
OpcionCombate(
descripcion = "Huir",
atributoRequerida = Atributo.Vida,
efecto = EfectoHuirProtagonista(GameState.jugador.atributos[Atributo.Vida]!!),
),
),
listOf( listOf(
EfectoAtaqueEnemigo(80), EfectoAtaqueEnemigo(80),
EfectoRegeneracionEnemigo("El metal reconfigura sus fragmentos recuperando parte de su vida", (1..2).random()) EfectoRegeneracionEnemigo(
"El metal reconfigura sus fragmentos recuperando parte de su vida",
(1..2).random()
)
), ),
vidaMax = (5..10).random(),
ataque = (1..2).random(),
RepositorioObjetos.obtenerObjetoPorNombre("Moneda de plata Vaccea")!! RepositorioObjetos.obtenerObjetoPorNombre("Moneda de plata Vaccea")!!
), ),
"Al explorar una tumba de la necrópolis de las ruedas, un esqueleto armado aparece." to CombateInfo(
imagenIdle = R.drawable.monster_skeleton_idle,
imagenAtaque = R.drawable.monster_skeleton_attack,
habilidades = listOf(EfectoAtaqueEnemigo(75), EfectoRevivirEnemigo("El esqueleto se reconstruye reviviendo",0.35, 40)),
vidaMax = (5..8).random(),
ataque = (1..3).random(),
RepositorioObjetos.obtenerObjetoPorNombre("Poción de Veneno II")!!
)
) )
override fun generarDescripcion(): String { override fun generarDescripcion(): String {
...@@ -65,16 +58,17 @@ class CombateFactory : EventoFactory { ...@@ -65,16 +58,17 @@ class CombateFactory : EventoFactory {
override fun generarEvento(): EventoCombate { override fun generarEvento(): EventoCombate {
val descripcion = generarDescripcion() val descripcion = generarDescripcion()
val combateInfo = combatesMap[descripcion] ?: throw IllegalArgumentException("No se encontró información de combate") val combateInfo = combatesMap[descripcion]
?: throw IllegalArgumentException("No se encontró información de combate")
return EventoCombate( return EventoCombate(
descripcion = descripcion, descripcion = descripcion,
dificultad = 0, dificultad = 0,
opciones = combateInfo.opciones.toMutableList(), opciones = generarOpciones(""),
imagenAtaque = combateInfo.imagenAtaque, imagenAtaque = combateInfo.imagenAtaque,
imagen = combateInfo.imagenIdle, imagen = combateInfo.imagenIdle,
resistenciaMax = (5..10).random(), resistenciaMax = combateInfo.vidaMax,
ataque = (1..2).random(), ataque = combateInfo.ataque,
finalizado = false, finalizado = false,
acciones = combateInfo.habilidades.toMutableList(), acciones = combateInfo.habilidades.toMutableList(),
recompensa = combateInfo.recompensa recompensa = combateInfo.recompensa
...@@ -82,8 +76,28 @@ class CombateFactory : EventoFactory { ...@@ -82,8 +76,28 @@ class CombateFactory : EventoFactory {
} }
override fun generarOpciones(descripcion: String): MutableList<Opcion> { override fun generarOpciones(descripcion: String): MutableList<Opcion> {
val combateInfo = combatesMap[descripcion] ?: return mutableListOf() return mutableListOf(
return combateInfo.opciones.take(4).toMutableList() OpcionCombate(
descripcion = "Atacar",
atributoRequerida = Atributo.Ataque,
efecto = EfectoAtaqueProtagonista(70)
),
Opcion(
descripcion = "Investigar",
atributoRequerida = Atributo.Investigacion,
efecto = EfectoInvestigarEnemigo(100)
),
Opcion(
descripcion = "Habilidades",
atributoRequerida = Atributo.Nula,
efecto = EfectoHabilidadesProtagonista(GameState.jugador.atributos[Atributo.Vida]!!)
),
OpcionCombate(
descripcion = "Huir",
atributoRequerida = Atributo.Vida,
efecto = EfectoHuirProtagonista(GameState.jugador.atributos[Atributo.Vida]!!),
)
)
} }
override fun generarImagen(descripcion: String): Int { override fun generarImagen(descripcion: String): Int {
......
...@@ -31,6 +31,11 @@ abstract class Evento( ...@@ -31,6 +31,11 @@ abstract class Evento(
notifyObservers() notifyObservers()
} }
fun setResistencia(valor : Int){
resistenciaActual = valor
notifyObservers()
}
private fun notifyObservers() { private fun notifyObservers() {
observers.forEach { it(this) } observers.forEach { it(this) }
} }
......
...@@ -18,6 +18,7 @@ class EventoCombate( ...@@ -18,6 +18,7 @@ class EventoCombate(
val recompensa : Objeto val recompensa : Objeto
) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado){ ) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado){
val id: String = UUID.randomUUID().toString() val id: String = UUID.randomUUID().toString()
var probCritico = 8
override fun equals(other: Any?): Boolean { override fun equals(other: Any?): Boolean {
if (this === other) return true if (this === other) return true
if (other == null || javaClass != other.javaClass) return false if (other == null || javaClass != other.javaClass) return false
......
...@@ -17,7 +17,7 @@ class ReliquiaFactory : EventoFactory { ...@@ -17,7 +17,7 @@ class ReliquiaFactory : EventoFactory {
descripcion = "Investigar", descripcion = "Investigar",
atributoRequerida = Atributo.Investigacion, atributoRequerida = Atributo.Investigacion,
EfectoInvestigar( EfectoInvestigar(
70, 90,
"Al observar los grabados y la técnica de cocción, descubres que el vaso es una pieza de los vacceos, una cultura prerromana que habitó el valle del Duero.", "Al observar los grabados y la técnica de cocción, descubres que el vaso es una pieza de los vacceos, una cultura prerromana que habitó el valle del Duero.",
1 1
) )
...@@ -25,7 +25,7 @@ class ReliquiaFactory : EventoFactory { ...@@ -25,7 +25,7 @@ class ReliquiaFactory : EventoFactory {
descripcion = "Reparar", descripcion = "Reparar",
atributoRequerida = Atributo.Investigacion, atributoRequerida = Atributo.Investigacion,
EfectoReparar( EfectoReparar(
65, 80,
"Tras aplicar con cuidado una mezcla de resina especial, consigues unir las piezas del vasito, restaurando su forma original. Has preservado una pieza valiosa de la historia vaccea.", "Tras aplicar con cuidado una mezcla de resina especial, consigues unir las piezas del vasito, restaurando su forma original. Has preservado una pieza valiosa de la historia vaccea.",
"Al intentar reparar el vasito, accidentalmente lo rompes aún más. Ahora, no solo está dañado, sino que se ha perdido una pieza esencial que no puede ser reconstruida.", "Al intentar reparar el vasito, accidentalmente lo rompes aún más. Ahora, no solo está dañado, sino que se ha perdido una pieza esencial que no puede ser reconstruida.",
1, 1,
...@@ -50,16 +50,16 @@ class ReliquiaFactory : EventoFactory { ...@@ -50,16 +50,16 @@ class ReliquiaFactory : EventoFactory {
descripcion = "Investigar", descripcion = "Investigar",
atributoRequerida = Atributo.Investigacion, atributoRequerida = Atributo.Investigacion,
EfectoInvestigar( EfectoInvestigar(
60, 80,
"Tras examinar minuciosamente la jabonera, descubres que el símbolo representado es un lobo, figura clave en la mitología vaccea, simbolizando miedo y veneración.", "Tras examinar minuciosamente la jabonera, descubres que el símbolo representado es un lobo, figura clave en la mitología vaccea, simbolizando miedo y veneración.",
1 2
) )
), Opcion( ), Opcion(
descripcion = "Reparar", descripcion = "Reparar",
atributoRequerida = Atributo.Investigacion, atributoRequerida = Atributo.Investigacion,
EfectoReparar( EfectoReparar(
55, 80,
"Con un toque experto, las partes rotas encajan perfectamente. Has dado nueva vida a una jabonera vaccea, permitiéndote estudiar sus detalles con mayor precisión.", "Con un toque experto, las partes rotas encajan perfectamente. Has dado nueva vida a una jabonera vaccea, permitiéndote estudiar sus detalles con mayor precisión.",
"El intento de reparación es un desastre: la jabonera se rompe aún más, y el símbolo se desintegra. Ahora, solo quedan fragmentos de lo que antes fue una obra de arte.", "El intento de reparación es un desastre: la jabonera se rompe aún más, y el símbolo se desintegra. Ahora, solo quedan fragmentos de lo que antes fue una obra de arte.",
1, 1,
...@@ -83,16 +83,16 @@ class ReliquiaFactory : EventoFactory { ...@@ -83,16 +83,16 @@ class ReliquiaFactory : EventoFactory {
descripcion = "Investigar", descripcion = "Investigar",
atributoRequerida = Atributo.Investigacion, atributoRequerida = Atributo.Investigacion,
EfectoInvestigar( EfectoInvestigar(
60, 80,
"Tras examinar minuciosamente la copa, encuentras patrones geométricos que podrían relacionarse con antiguos ritos funerarios o de sacrificio. ", "Tras examinar minuciosamente la copa, encuentras patrones geométricos que podrían relacionarse con antiguos ritos funerarios o de sacrificio. ",
1 2
) )
), Opcion( ), Opcion(
descripcion = "Reparar", descripcion = "Reparar",
atributoRequerida = Atributo.Investigacion, atributoRequerida = Atributo.Investigacion,
EfectoReparar( EfectoReparar(
55, 75,
"Reparas la copa con éxito y descubres un patrón o símbolo oculto bajo las grietas, aportando nueva información sobre su origen o uso.", "Reparas la copa con éxito y descubres un patrón o símbolo oculto bajo las grietas, aportando nueva información sobre su origen o uso.",
"El trabajo improvisado falla, y la copa queda aún más dañada o inutilizable, reduciendo su valor cultural o práctico.", "El trabajo improvisado falla, y la copa queda aún más dañada o inutilizable, reduciendo su valor cultural o práctico.",
1, 1,
...@@ -110,7 +110,7 @@ class ReliquiaFactory : EventoFactory { ...@@ -110,7 +110,7 @@ class ReliquiaFactory : EventoFactory {
) )
) )
), ),
"Encuentra una tapadera de cerámica con una figura zoomorfa tallada en su superficie. Mmuestra el detalle de un animal: un lobo" to Pair( "Encuentras una tapadera de cerámica con una figura zoomorfa tallada en su superficie. Muestra el detalle de un animal: un lobo" to Pair(
R.drawable.asi_minijuego_3_tapadera_zoomorfo, listOf( R.drawable.asi_minijuego_3_tapadera_zoomorfo, listOf(
Opcion( Opcion(
descripcion = "Investigar", descripcion = "Investigar",
...@@ -118,14 +118,14 @@ class ReliquiaFactory : EventoFactory { ...@@ -118,14 +118,14 @@ class ReliquiaFactory : EventoFactory {
EfectoInvestigar( EfectoInvestigar(
60, 60,
"Descubres que la tapadera representa a un animal sagrado en la cultura vaccea, podría estar relacionado con rituales de protección o iniciación. ", "Descubres que la tapadera representa a un animal sagrado en la cultura vaccea, podría estar relacionado con rituales de protección o iniciación. ",
1 3
) )
), Opcion( ), Opcion(
descripcion = "Reparar", descripcion = "Reparar",
atributoRequerida = Atributo.Investigacion, atributoRequerida = Atributo.Investigacion,
EfectoReparar( EfectoReparar(
55, 70,
"Logras repararla cuidadosamente, las marcas en la cerámica se conecten con un ritual funerario o de veneración, lo que incrementa el valor histórico de la pieza.", "Logras repararla cuidadosamente, las marcas en la cerámica se conecten con un ritual funerario o de veneración, lo que incrementa el valor histórico de la pieza.",
"Intentas repararla, pero sin las herramientas adecuadas o la técnica correcta, la tapadera queda más dañada.", "Intentas repararla, pero sin las herramientas adecuadas o la técnica correcta, la tapadera queda más dañada.",
1, 1,
...@@ -143,6 +143,38 @@ class ReliquiaFactory : EventoFactory { ...@@ -143,6 +143,38 @@ class ReliquiaFactory : EventoFactory {
) )
) )
), ),
"Encuentras lo que parece ser un sonajero redondo" to Pair(
R.drawable.asi_minijuego_3_sonajero_redondo, listOf(
Opcion(
descripcion = "Investigar",
atributoRequerida = Atributo.Investigacion,
EfectoInvestigar(
95,
"Descubres que es un modelo perteneciente a los muebles de la tumba 153 de la necrópolis de Las Ruedas",
1
)
), Opcion(
descripcion = "Reparar",
atributoRequerida = Atributo.Investigacion,
EfectoReparar(
90,
"Restauras el sonajero con gran precisión. Su sonido ahora es claro, y encuentras inscripciones que parecen ser representaciones simbólicas de protección o buena fortuna.",
"Intentas repararlo, pero el material es más frágil de lo esperado, y el sonajero se rompe aún más, perdiendo su valor arqueológico.",
1,
RepositorioObjetos.obtenerObjetoPorNombre("Sonajero Redondo")!!
)
), Opcion(
descripcion = "Destruir",
atributoRequerida = Atributo.Ataque,
EfectoDestruir(80)
), Opcion(
descripcion = "Ignorar",
atributoRequerida = Atributo.Nula,
EfectoIgnorar(100)
)
)
),
) )
override fun generarDescripcion(): String { override fun generarDescripcion(): String {
......
...@@ -7,7 +7,7 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.GestorCombate ...@@ -7,7 +7,7 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.GestorCombate
class EfectoGolpeMultiple(private var cantidad: Int): EfectoHabilidad(){ class EfectoGolpeMultiple(private var cantidad: Int): EfectoHabilidad(){
override fun ejecutar() { override fun ejecutar() {
GestorCombate.cargarAnimacionesAtaqueProtagonista() GestorCombate.cargarAnimacionesAtaqueProtagonista()
val ataqueReal = GestorCombate.calcularAtaque(cantidad*GameState.jugador.atributos[Atributo.Ataque]!!) val ataqueReal = GestorCombate.calcularAtaque(cantidad*GameState.jugador.atributos[Atributo.Ataque]!!,GameState.jugador.atributos[Atributo.Critico]!!)
GameState.eventoActual.actualizarResistencia(-ataqueReal) GameState.eventoActual.actualizarResistencia(-ataqueReal)
} }
} }
\ No newline at end of file
package com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto
import com.example.ellegadodepintia.exploradoresDePintia.model.GameState
import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo
import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.Habilidad
class EfectoEquipableHabilidad (private val habilidad: Habilidad) : EfectoObjetoEquipable(){
override fun ejecutar() {
GameState.jugador.habilidades.add(habilidad)
}
override fun desequipar() {
GameState.jugador.habilidades.remove(habilidad)
}
}
\ No newline at end of file
package com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto
import com.example.ellegadodepintia.exploradoresDePintia.model.GameState
class EfectoObjetoAtacar (private val ptosAtaque : Int): EfectoObjeto(){
override fun ejecutar() {
GameState.eventoActual.actualizarResistencia(-ptosAtaque)
}
}
\ No newline at end of file
...@@ -2,43 +2,54 @@ ...@@ -2,43 +2,54 @@
import com.example.ellegadodepintia.R import com.example.ellegadodepintia.R
import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo
import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.Habilidad
import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad.EfectoBuffo
import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.* import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.*
import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoEquipableAumento import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoEquipableAumento
import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoEquipableHabilidad
import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoObjetoAtacar
import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoObjetoCura import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.efectoObjeto.EfectoObjetoCura
object RepositorioObjetos { object RepositorioObjetos {
private val objetos: Map<String, Objeto> by lazy { private val objetos: Map<String, Objeto> by lazy {
listOf( listOf(
ObjetoDeValor( //******************************************
nombre = "Vasito de barro cocido", // E Q U I P A B L E S
descripcion = "Objeto de gran valor. Se convierte en 10 monedas si consigues completar la partida.", //******************************************
coste = 10,
imagen = R.drawable.asi_exploradores_vasito
),
ObjetoDeValor(
nombre = "Jabonera de cerámica",
descripcion = "Objeto de gran valor. Se convierte en 15 monedas si consigues completar la partida.",
coste = 15,
imagen = R.drawable.asi_exploradores_jabonera
),
ObjetoDeValor(
nombre = "Copa negra con inscripciones",
descripcion = "Objeto de gran valor. Se convierte en 15 monedas si consigues completar la partida.",
coste = 15,
imagen = R.drawable.asi_minijuego_3_copa_negra_brunida
),
ObjetoDeValor(
nombre = "Tapadera de cerámica zoomorfa",
descripcion = "Objeto de gran valor. Se convierte en 30 monedas si consigues completar la partida.",
coste = 30,
imagen = R.drawable.asi_minijuego_3_tapadera_zoomorfo
),
ObjetoEquipable( ObjetoEquipable(
nombre = "Espada de Hierro", nombre = "Espada de Hierro",
descripcion = "Una espada de hierro sencilla y confiable perfecta para un aventurero novato. Otorga 1 de daño extra", descripcion = "Una espada de hierro sencilla y confiable perfecta para un aventurero novato. Otorga 1 de daño extra",
efecto = EfectoEquipableAumento(1, Atributo.Ataque), efecto = EfectoEquipableAumento(1, Atributo.Ataque),
imagen = R.drawable.asi_objeto_espadadefault imagen = R.drawable.asi_objeto_espadadefault
), ),
ObjetoEquipable(
nombre = "Casco Ceremonial",
descripcion = "Casco ceremonial de oro de los vacceos decorado con intrincados patrones que simboliza el estatus social. Aumenta tu vida máxima en 3 puntos",
efecto = EfectoEquipableAumento(3, Atributo.Vida),
imagen = R.drawable.asi_objeto_casco
),
ObjetoEquipable(
nombre = "Escudo Caetrae",
descripcion = "La caetrae es un escudo redondo vacceo, forjado para la defensa en combate, que aumenta tu vida máxima en 5 puntos.",
efecto = EfectoEquipableAumento(5, Atributo.Vida),
imagen = R.drawable.asi_objeto_escudo
),
ObjetoEquipable(
nombre = "Puñal Vacceo",
descripcion = "Espada corta, típica de diseño celtibérico. Mientras está equipada añade la habilidad \"Letalidad\" para su uso en combate.",
efecto = EfectoEquipableHabilidad(
Habilidad(
"Letalidad",
"Aumenta la probabilidad de realizar un golpe crítico a un 30% por dos turnos",
EfectoBuffo(Atributo.Critico, 22, 2),
energia = 2
)
),
imagen = R.drawable.asi_objeto_daga
),
//**********************************************
// C O N S U M I B L E S
//**********************************************
ObjetoConsumible( ObjetoConsumible(
nombre = "Elixir Menor de la Necrópolis", nombre = "Elixir Menor de la Necrópolis",
descripcion = "Un frasco pequeño con un líquido granate y brillante, que destella con un resplandor profundo, capaz de restaurar 3 puntos de vida al instante.", descripcion = "Un frasco pequeño con un líquido granate y brillante, que destella con un resplandor profundo, capaz de restaurar 3 puntos de vida al instante.",
...@@ -57,18 +68,54 @@ object RepositorioObjetos { ...@@ -57,18 +68,54 @@ object RepositorioObjetos {
efecto = EfectoObjetoCura(999), efecto = EfectoObjetoCura(999),
imagen = R.drawable.asi_objeto_pocima_vida_all imagen = R.drawable.asi_objeto_pocima_vida_all
), ),
ObjetoEquipable( ObjetoConsumible(
nombre = "Escudo Caetrae", nombre = "Poción de Veneno II",
descripcion = "La caetrae es un escudo redondo vacceo, forjado para la defensa en combate, que aumenta tu vida máxima en 10 puntos.", descripcion = "Según las leyendas, los vacceos preparaban este brebaje para impregnar sus armas, asegurando que incluso un rasguño pudiera derrotar a un enemigo. Hace 2 de daño al enemigo.",
efecto = EfectoEquipableAumento(10, Atributo.Vida), efecto = EfectoObjetoAtacar(2),
imagen = R.drawable.asi_objeto_escudo imagen = R.drawable.asi_objeto_veneno2
), ),
ObjetoEquipable( //**********************************
nombre = "Casco Ceremonial", // D E V A L O R
descripcion = "Casco ceremonial de oro de los vacceos decorado con intrincados patrones que simboliza el estatus social. Aumenta tu vida máxima en 8 puntos", //**********************************
efecto = EfectoEquipableAumento(8, Atributo.Vida), ObjetoDeValor(
imagen = R.drawable.asi_objeto_casco nombre = "Vasito de barro cocido",
descripcion = "Objeto de gran valor. Se convierte en 10 monedas si consigues completar la partida.",
coste = 10,
imagen = R.drawable.asi_exploradores_vasito
),
ObjetoDeValor(
nombre = "Jabonera de cerámica",
descripcion = "Objeto de gran valor. Se convierte en 15 monedas si consigues completar la partida.",
coste = 15,
imagen = R.drawable.asi_exploradores_jabonera
),
ObjetoDeValor(
nombre = "Copa negra con inscripciones",
descripcion = "Objeto de gran valor. Se convierte en 15 monedas si consigues completar la partida.",
coste = 15,
imagen = R.drawable.asi_minijuego_3_copa_negra_brunida
),
ObjetoDeValor(
nombre = "Tapadera de cerámica zoomorfa",
descripcion = "Objeto de gran valor. Se convierte en 30 monedas si consigues completar la partida.",
coste = 30,
imagen = R.drawable.asi_minijuego_3_tapadera_zoomorfo
),
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
), ),
ObjetoDeValor(
nombre= "Sonajero Redondo",
descripcion = "Pequeño artefacto de cerámica utilizado en rituales funerarios o ceremonias. Su diseño y sonido característico eran símbolos de protección y conexión espiritual en la cultura celtíbera.",
imagen = R.drawable.asi_minijuego_3_sonajero_redondo,
coste = 15
),
//**********************************************
// D E U T I L I D A D
//**********************************************
ObjetoUtilidad( ObjetoUtilidad(
nombre = "Pico Vacceo", nombre = "Pico Vacceo",
descripcion = "Un pico viejo y oscuro con dibujos extraños que parecen brillar cerca de las piedras, como si estuviera esperando que lo uses para algo importante.", descripcion = "Un pico viejo y oscuro con dibujos extraños que parecen brillar cerca de las piedras, como si estuviera esperando que lo uses para algo importante.",
...@@ -83,12 +130,6 @@ object RepositorioObjetos { ...@@ -83,12 +130,6 @@ object RepositorioObjetos {
nombre = "Pala Vaccea", 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.", 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 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 } ).associateBy { it.nombre }
} }
......
app/src/main/res/drawable-nodpi/asi_objeto_veneno2.png

24 KiB