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

Target

Select target project
  • diegval/el-legado-de-pintia
1 result
Show changes
Commits on Source (5)
Showing
with 281 additions and 112 deletions
......@@ -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 {
append("Vida: ")
append(GameState.eventoActual.resistenciaActual)
......
......@@ -5,5 +5,6 @@ enum class Atributo {
Ataque,
Investigacion,
Energia,
Nula
Nula,
Critico
}
\ No newline at end of file
......@@ -37,9 +37,9 @@ object GeneradorDeEventos {
while (eventosGenerados.size < CANTIDAD) {
val tipoSeleccionado = seleccionarTipoEvento()
println(historialTipos)
if (historialTipos.isNotEmpty() && tipoSeleccionado == historialTipos.last()) {
/*if (historialTipos.isNotEmpty() && tipoSeleccionado == historialTipos.last()) {
continue
}
}*/
val nuevoEvento = EventoFactorySelector.obtenerFactory(tipoSeleccionado).generarEvento()
......@@ -128,5 +128,11 @@ object GeneradorDeEventos {
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
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.efecto.EfectoRevivirEnemigo
import com.example.ellegadodepintia.exploradoresDePintia.model.eventoFactory.EventoCombate
import com.example.ellegadodepintia.exploradoresDePintia.model.habilidad.efectoHabilidad.EfectoHabilidad
......@@ -82,10 +83,10 @@ object GestorCombate {
}
}
fun calcularAtaque(ataqueBase: Int): Int {
fun calcularAtaque(ataqueBase: Int, probabilidadCritico: Int): Int {
val ataqueFinal: Int
val resultadoTirada = (0..100).random()
ataqueFinal = if (resultadoTirada <= 8) {
ataqueFinal = if (resultadoTirada <= probabilidadCritico) {
ataqueBase * 2
} else {
ataqueBase
......@@ -99,18 +100,33 @@ object GestorCombate {
accionEnemigo()
}, 800)
} else {
evento.actualizarFinalizado(true)
turnoJugador = true
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)
if (revivirEnemigo() == "Fallo") {
evento.actualizarFinalizado(true)
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)
}
}
}
}
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 {
......@@ -167,9 +183,12 @@ object GestorCombate {
val porcentajeVida =
GameState.eventoActual.resistenciaActual / GameState.eventoActual.resistenciaMax.toDouble()
return if (tieneRecuperacion && porcentajeVida <= 0.3) {
evento.acciones.random()
evento.acciones.filterNot { it is EfectoRevivirEnemigo }.random()
} else {
evento.acciones.filterNot { it is EfectoRegeneracionEnemigo }.random()
evento.acciones.filterNot {
it is EfectoRegeneracionEnemigo ||
it is EfectoRevivirEnemigo
}.random()
}
}
......
......@@ -126,5 +126,4 @@ object GestorDeEventos{
}
}
\ No newline at end of file
......@@ -36,6 +36,9 @@ class Jugador {
atributos[Atributo.Ataque] = 1
atributos[Atributo.Investigacion] = 1
atributos[Atributo.Energia] = 10
atributos[Atributo.Critico] = 8
inventario.add(RepositorioObjetos.obtenerObjetoPorNombre("Puñal Vacceo")!!)
habilidades.add(
Habilidad(
......@@ -54,15 +57,6 @@ class Jugador {
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(
Habilidad(
nombre = "Revitalización Floral",
......
......@@ -14,7 +14,7 @@ class EfectoAtaqueEnemigo(probabilidadExito: Int) : Efecto(probabilidadExito) {
GestorCombate.cargarAnimacionesAtaqueEnemigo()
if (probabilidadEnemigo <= probabilidadExito) {
val ataqueReal = GestorCombate.calcularAtaque(evento.ataque)
val ataqueReal = GestorCombate.calcularAtaque(evento.ataque, evento.probCritico)
GameState.jugador.actualizarAtributo(Atributo.Vida, -ataqueReal)
......
......@@ -11,7 +11,7 @@ class EfectoAtaqueProtagonista(probabilidadExito: Int) : Efecto(probabilidadExit
if (probabilidadPersonaje <= probabilidadExito) {
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)
mensaje = "¡Ataque realizado con éxito has hecho $ataqueReal de daño"
} else {
......
......@@ -8,6 +8,7 @@ import com.example.ellegadodepintia.R
import com.example.ellegadodepintia.exploradoresDePintia.model.GameState
import com.example.ellegadodepintia.exploradoresDePintia.model.GameState.context
import com.example.ellegadodepintia.exploradoresDePintia.model.Atributo
import com.example.ellegadodepintia.exploradoresDePintia.model.GeneradorDeEventos
import com.example.ellegadodepintia.exploradoresDePintia.model.objeto.ObjetoDeValor
//TODO() Agregar inventario con restos de la reliquia
......@@ -42,7 +43,13 @@ class EfectoDestruir(probabilidadExito: Int) : Efecto(probabilidadExito) {
coste = 5
)
)
"¡Qué has hecho, la reliquia se ha roto por completo!. Has conseguido un fragmento de la reliquia"
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"
}
}
} else {
"La reliquia ha resistido el golpe con éxito."
......
......@@ -36,7 +36,7 @@ class EfectoReparar(probabilidadExito: Int, private val stringReparado: String,
}
return if (probabilidad <= probabilidadExito) {
GameState.eventoActual.actualizarResistencia(1)
GameState.eventoActual.actualizarResistencia(GameState.jugador.atributos[Atributo.Investigacion]!!)
if(GameState.eventoActual.resistenciaActual == GameState.eventoActual.resistenciaMax){
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
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.efecto.EfectoRevivirEnemigo
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 vidaMax: Int,
val ataque: Int,
val recompensa: Objeto
)
......@@ -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(
R.drawable.monster_metal_idle_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(
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")!!
),
"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 {
......@@ -65,16 +58,17 @@ class CombateFactory : EventoFactory {
override fun generarEvento(): EventoCombate {
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(
descripcion = descripcion,
dificultad = 0,
opciones = combateInfo.opciones.toMutableList(),
opciones = generarOpciones(""),
imagenAtaque = combateInfo.imagenAtaque,
imagen = combateInfo.imagenIdle,
resistenciaMax = (5..10).random(),
ataque = (1..2).random(),
resistenciaMax = combateInfo.vidaMax,
ataque = combateInfo.ataque,
finalizado = false,
acciones = combateInfo.habilidades.toMutableList(),
recompensa = combateInfo.recompensa
......@@ -82,8 +76,28 @@ class CombateFactory : EventoFactory {
}
override fun generarOpciones(descripcion: String): MutableList<Opcion> {
val combateInfo = combatesMap[descripcion] ?: return mutableListOf()
return combateInfo.opciones.take(4).toMutableList()
return mutableListOf(
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 {
......
......@@ -31,6 +31,11 @@ abstract class Evento(
notifyObservers()
}
fun setResistencia(valor : Int){
resistenciaActual = valor
notifyObservers()
}
private fun notifyObservers() {
observers.forEach { it(this) }
}
......
......@@ -18,6 +18,7 @@ class EventoCombate(
val recompensa : Objeto
) : Evento(descripcion, dificultad, opciones, imagen, resistenciaMax, resistenciaMax, finalizado){
val id: String = UUID.randomUUID().toString()
var probCritico = 8
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other == null || javaClass != other.javaClass) return false
......
......@@ -17,7 +17,7 @@ class ReliquiaFactory : EventoFactory {
descripcion = "Investigar",
atributoRequerida = Atributo.Investigacion,
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.",
1
)
......@@ -25,7 +25,7 @@ class ReliquiaFactory : EventoFactory {
descripcion = "Reparar",
atributoRequerida = Atributo.Investigacion,
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.",
"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,
......@@ -50,16 +50,16 @@ class ReliquiaFactory : EventoFactory {
descripcion = "Investigar",
atributoRequerida = Atributo.Investigacion,
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.",
1
2
)
), Opcion(
descripcion = "Reparar",
atributoRequerida = Atributo.Investigacion,
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.",
"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,
......@@ -83,16 +83,16 @@ class ReliquiaFactory : EventoFactory {
descripcion = "Investigar",
atributoRequerida = Atributo.Investigacion,
EfectoInvestigar(
60,
80,
"Tras examinar minuciosamente la copa, encuentras patrones geométricos que podrían relacionarse con antiguos ritos funerarios o de sacrificio. ",
1
2
)
), Opcion(
descripcion = "Reparar",
atributoRequerida = Atributo.Investigacion,
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.",
"El trabajo improvisado falla, y la copa queda aún más dañada o inutilizable, reduciendo su valor cultural o práctico.",
1,
......@@ -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(
Opcion(
descripcion = "Investigar",
......@@ -118,14 +118,14 @@ class ReliquiaFactory : EventoFactory {
EfectoInvestigar(
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. ",
1
3
)
), Opcion(
descripcion = "Reparar",
atributoRequerida = Atributo.Investigacion,
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.",
"Intentas repararla, pero sin las herramientas adecuadas o la técnica correcta, la tapadera queda más dañada.",
1,
......@@ -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 {
......
......@@ -7,7 +7,7 @@ import com.example.ellegadodepintia.exploradoresDePintia.model.GestorCombate
class EfectoGolpeMultiple(private var cantidad: Int): EfectoHabilidad(){
override fun ejecutar() {
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)
}
}
\ 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 @@
import com.example.ellegadodepintia.R
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.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
object RepositorioObjetos {
private val objetos: Map<String, Objeto> by lazy {
listOf(
ObjetoDeValor(
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
),
//******************************************
// E Q U I P A B L E S
//******************************************
ObjetoEquipable(
nombre = "Espada de Hierro",
descripcion = "Una espada de hierro sencilla y confiable perfecta para un aventurero novato. Otorga 1 de daño extra",
efecto = EfectoEquipableAumento(1, Atributo.Ataque),
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(
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.",
......@@ -57,18 +68,54 @@ object RepositorioObjetos {
efecto = EfectoObjetoCura(999),
imagen = R.drawable.asi_objeto_pocima_vida_all
),
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 10 puntos.",
efecto = EfectoEquipableAumento(10, Atributo.Vida),
imagen = R.drawable.asi_objeto_escudo
ObjetoConsumible(
nombre = "Poción de Veneno II",
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 = EfectoObjetoAtacar(2),
imagen = R.drawable.asi_objeto_veneno2
),
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 8 puntos",
efecto = EfectoEquipableAumento(8, Atributo.Vida),
imagen = R.drawable.asi_objeto_casco
//**********************************
// D E V A L O R
//**********************************
ObjetoDeValor(
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(
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.",
......@@ -83,12 +130,6 @@ 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 }
}
......
app/src/main/res/drawable-nodpi/asi_objeto_veneno2.png

24 KiB