Add local attack / skill / spell / alteration icons
|
|
@ -16,7 +16,7 @@
|
|||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:supportsRtl="false"
|
||||
android:theme="@style/Theme.Lexicon.NoActionBar"
|
||||
tools:targetApi="31">
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ class MainApplication : Application(), ImageLoaderFactory {
|
|||
.diskCache {
|
||||
DiskCache.Builder()
|
||||
.directory(applicationContext.cacheDir.resolve("image_cache"))
|
||||
.maxSizeBytes(size = 150.Mo)
|
||||
.maxSizeBytes(size = 250.Mo)
|
||||
.build()
|
||||
}
|
||||
.crossfade(true)
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import com.pixelized.rplexicon.ui.theme.typography.LexiconTypography
|
|||
import com.pixelized.rplexicon.utilitary.annotate
|
||||
import com.pixelized.rplexicon.utilitary.dropCapRegex
|
||||
import com.pixelized.rplexicon.utilitary.extentions.local.label
|
||||
import com.pixelized.rplexicon.utilitary.extentions.prefix
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.prefix
|
||||
import com.pixelized.rplexicon.utilitary.extractSentenceRegex
|
||||
import com.pixelized.rplexicon.utilitary.extractWordRegex
|
||||
import com.pixelized.rplexicon.utilitary.highlightRegex
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ data class Attack(
|
|||
val damage: Throw?,
|
||||
val script: Script?,
|
||||
val icon: Uri?,
|
||||
val alterations: List<String>,
|
||||
) {
|
||||
enum class Type(val key: String) {
|
||||
PHYSICAL_MELEE_ATTACK("Mêlée"),
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ class AttackParser @Inject constructor(
|
|||
script = row.parse(column = SCRIPT)?.let { scriptParser.parse(it) },
|
||||
hit = throwParser.parse(value = row.parse(column = HIT)),
|
||||
damage = throwParser.parse(value = row.parse(column = DAMAGE)),
|
||||
alterations = row.parseList(column = ALTERATION),
|
||||
)
|
||||
actions
|
||||
.getOrPut(characterSheet.name) { mutableListOf() }
|
||||
|
|
@ -65,7 +64,6 @@ class AttackParser @Inject constructor(
|
|||
private val RANGE = column("Portée")
|
||||
private val HIT = column("Touché")
|
||||
private val DAMAGE = column("Dommage")
|
||||
private val ALTERATION = column("Altérations")
|
||||
private val ICON = column("Icone")
|
||||
private val SCRIPT = column("Script")
|
||||
private val COLUMNS
|
||||
|
|
@ -76,7 +74,6 @@ class AttackParser @Inject constructor(
|
|||
RANGE,
|
||||
HIT,
|
||||
DAMAGE,
|
||||
ALTERATION,
|
||||
SCRIPT,
|
||||
ICON
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package com.pixelized.rplexicon.data.parser
|
||||
|
||||
import android.net.Uri
|
||||
import com.pixelized.rplexicon.utilitary.extentions.toUriOrNull
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.toUriOrNull
|
||||
import javax.inject.Inject
|
||||
|
||||
class IllustrationParser @Inject constructor() {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import com.pixelized.rplexicon.data.database.quest.QuestDataDbo
|
|||
import com.pixelized.rplexicon.data.database.quest.QuestDbo
|
||||
import com.pixelized.rplexicon.data.model.Quest
|
||||
import com.pixelized.rplexicon.data.model.QuestEntry
|
||||
import com.pixelized.rplexicon.utilitary.extentions.toUriOrNull
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.toUriOrNull
|
||||
import javax.inject.Inject
|
||||
|
||||
class QuestParser @Inject constructor(
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import com.pixelized.rplexicon.data.database.location.LocationDbo
|
|||
import com.pixelized.rplexicon.data.database.location.WorldDbo
|
||||
import com.pixelized.rplexicon.data.model.Location
|
||||
import com.pixelized.rplexicon.data.parser.IllustrationParser
|
||||
import com.pixelized.rplexicon.utilitary.extentions.toUriOrNull
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.toUriOrNull
|
||||
import javax.inject.Inject
|
||||
|
||||
class LocationParser @Inject constructor(
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import androidx.navigation.navArgument
|
|||
import com.pixelized.rplexicon.ui.navigation.NavigationAnimation
|
||||
import com.pixelized.rplexicon.ui.navigation.animatedComposable
|
||||
import com.pixelized.rplexicon.ui.screens.character.CharacterSheetScreen
|
||||
import com.pixelized.rplexicon.utilitary.extentions.ARG
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.ARG
|
||||
|
||||
private const val ROUTE = "characterSheet"
|
||||
private const val CHARACTER_SHEET_NAME = "id"
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import androidx.navigation.navArgument
|
|||
import com.pixelized.rplexicon.ui.navigation.NavigationAnimation
|
||||
import com.pixelized.rplexicon.ui.navigation.animatedComposable
|
||||
import com.pixelized.rplexicon.ui.screens.lexicon.detail.LexiconDetailScreen
|
||||
import com.pixelized.rplexicon.utilitary.extentions.ARG
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.ARG
|
||||
|
||||
private const val ROUTE = "LexiconDetail"
|
||||
private const val ARG_ID = "id"
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import androidx.navigation.navArgument
|
|||
import com.pixelized.rplexicon.ui.navigation.NavigationAnimation
|
||||
import com.pixelized.rplexicon.ui.navigation.animatedComposable
|
||||
import com.pixelized.rplexicon.ui.screens.search.SearchScreen
|
||||
import com.pixelized.rplexicon.utilitary.extentions.ARG
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.ARG
|
||||
|
||||
private const val ROUTE = "search"
|
||||
private const val ARG_ENABLE_LEXICON = "ARG_ENABLE_LEXICON"
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import androidx.navigation.navArgument
|
|||
import com.pixelized.rplexicon.ui.navigation.NavigationAnimation
|
||||
import com.pixelized.rplexicon.ui.navigation.animatedComposable
|
||||
import com.pixelized.rplexicon.ui.screens.location.detail.LocationDetailScreen
|
||||
import com.pixelized.rplexicon.utilitary.extentions.ARG
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.ARG
|
||||
|
||||
private const val ROUTE = "LocationDetail"
|
||||
private const val ARG_ID = "id"
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ import androidx.navigation.navArgument
|
|||
import com.pixelized.rplexicon.ui.navigation.NavigationAnimation
|
||||
import com.pixelized.rplexicon.ui.navigation.animatedComposable
|
||||
import com.pixelized.rplexicon.ui.screens.quest.detail.QuestDetailScreen
|
||||
import com.pixelized.rplexicon.utilitary.extentions.ARG
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.ARG
|
||||
|
||||
private const val ROUTE = "QuestDetail"
|
||||
private const val ARG_ID = "id"
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import androidx.navigation.navArgument
|
|||
import com.pixelized.rplexicon.ui.navigation.NavigationAnimation
|
||||
import com.pixelized.rplexicon.ui.navigation.animatedComposable
|
||||
import com.pixelized.rplexicon.ui.screens.spell.SpellDetailScreen
|
||||
import com.pixelized.rplexicon.utilitary.extentions.ARG
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.ARG
|
||||
|
||||
private const val ROUTE = "spellDetail"
|
||||
private const val ARG_SPELL = "spell"
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.pixelized.rplexicon.data.model.CharacterSheet
|
|||
import com.pixelized.rplexicon.data.model.Property
|
||||
import com.pixelized.rplexicon.data.model.alteration.Alteration
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.actions.AttackUio
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.attackIcon
|
||||
import com.pixelized.rplexicon.utilitary.extentions.icon
|
||||
import com.pixelized.rplexicon.utilitary.extentions.modifier
|
||||
import com.pixelized.rplexicon.utilitary.extentions.toLabel
|
||||
|
|
@ -74,7 +75,7 @@ class AttackUioFactory @Inject constructor() {
|
|||
|
||||
return AttackUio(
|
||||
id = attack,
|
||||
icon = attack.icon,
|
||||
icon = attack.icon ?: attack.title.attackIcon(),
|
||||
name = attack.title,
|
||||
type = when (attack.type) {
|
||||
Attack.Type.PHYSICAL_MELEE_ATTACK -> R.string.attack_type_melee
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import com.pixelized.rplexicon.utilitary.extentions.local.base
|
|||
import com.pixelized.rplexicon.utilitary.extentions.local.primary
|
||||
import com.pixelized.rplexicon.utilitary.extentions.local.secondary
|
||||
import com.pixelized.rplexicon.utilitary.extentions.modifier
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.skillIcon
|
||||
import com.pixelized.rplexicon.utilitary.extentions.toLabel
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -44,7 +45,7 @@ class SkillFactoryUioFactory @Inject constructor(
|
|||
val modifier = effectModifier + effectFlat
|
||||
|
||||
SkillItemUio(
|
||||
icon = skill.icon,
|
||||
icon = skill.icon ?: skill.name.skillIcon(),
|
||||
label = skill.name,
|
||||
translate = description?.original,
|
||||
rest = skill.rest,
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import com.pixelized.rplexicon.data.repository.character.DescriptionRepository
|
|||
import com.pixelized.rplexicon.ui.screens.character.composable.actions.SpellUio
|
||||
import com.pixelized.rplexicon.utilitary.extentions.icon
|
||||
import com.pixelized.rplexicon.utilitary.extentions.modifier
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.spellIcon
|
||||
import com.pixelized.rplexicon.utilitary.extentions.toLabel
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -95,7 +96,7 @@ class SpellUioFactory @Inject constructor(
|
|||
}
|
||||
}
|
||||
return SpellUio(
|
||||
icon = assignedSpell.spell.icon,
|
||||
icon = assignedSpell.spell.icon ?: assignedSpell.spell.name.spellIcon(),
|
||||
school = assignedSpell.spell.school,
|
||||
name = assignedSpell.spell.name,
|
||||
translated = descriptionRepository.getDescription(name = assignedSpell.spell.name)?.original,
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import com.pixelized.rplexicon.ui.screens.character.factory.AttackUioFactory
|
|||
import com.pixelized.rplexicon.utilitary.extentions.local.toStatus
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
|
@ -50,7 +51,7 @@ class AttacksViewModel @Inject constructor(
|
|||
.combine(activeAlterationRepository.getActiveAssignedAlterations(character = character)) { _, alterations ->
|
||||
struct.alterations = alterations.toStatus()
|
||||
}
|
||||
.collect {
|
||||
.collectLatest {
|
||||
val (sheet, actions, alterations) = struct
|
||||
if (sheet != null) {
|
||||
val attacks = actions.map { action ->
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import com.pixelized.rplexicon.utilitary.extentions.local.toStatus
|
|||
import com.pixelized.rplexicon.utilitary.extentions.modifier
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
|
@ -71,7 +72,7 @@ class HeaderViewModel @Inject constructor(
|
|||
.combine(firebaseRepository.getCharacter(character = character)) { _, fire ->
|
||||
struct.fire = fire
|
||||
}
|
||||
.collect {
|
||||
.collectLatest {
|
||||
val (sheet, status, fire) = struct
|
||||
if (sheet != null) {
|
||||
val headerCategories = SheetHeaderData(
|
||||
|
|
@ -99,7 +100,9 @@ class HeaderViewModel @Inject constructor(
|
|||
fireData.value = headerValues
|
||||
}
|
||||
} else {
|
||||
launch { characterRepository.fetchCharacterSheet() }
|
||||
launch(context = Dispatchers.Default) {
|
||||
characterRepository.fetchCharacterSheet()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import com.pixelized.rplexicon.data.repository.character.DescriptionRepository
|
|||
import com.pixelized.rplexicon.data.repository.character.ObjectActionRepository
|
||||
import com.pixelized.rplexicon.ui.navigation.screens.characterSheetArgument
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.actions.ObjectItemUio
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.objectIcon
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
|
@ -36,7 +37,7 @@ class ObjectsViewModel @Inject constructor(
|
|||
val data = objects[character]?.map {
|
||||
ObjectItemUio(
|
||||
prefix = it.prefix,
|
||||
icon = it.icon,
|
||||
icon = it.icon ?: "${it.prefix ?: ""}${it.name}".objectIcon(),
|
||||
name = it.name,
|
||||
original = descriptionRepository.getDescription(name = it.name)?.original,
|
||||
effect = it.effect,
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import com.pixelized.rplexicon.ui.screens.character.composable.actions.SkillItem
|
|||
import com.pixelized.rplexicon.ui.screens.character.factory.SkillFactoryUioFactory
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
|
@ -58,7 +59,7 @@ class SkillsViewModel @Inject constructor(
|
|||
.combine(firebaseRepository.getCharacter(character = character)) { _, fire ->
|
||||
data.fire = fire
|
||||
}
|
||||
.collect {
|
||||
.collectLatest {
|
||||
val (character, fire, values) = data
|
||||
// Filter out passive skills, theses are display in the Proficiency Page.
|
||||
val skills = skillFactory.convert(
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import com.pixelized.rplexicon.utilitary.extentions.modifier
|
|||
import com.pixelized.rplexicon.utilitary.extentions.signLabel
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
|
@ -71,7 +72,7 @@ class SpellsViewModel @Inject constructor(
|
|||
characterFire = fire
|
||||
struct.also { it.fire = fire }
|
||||
}
|
||||
.collect { data ->
|
||||
.collectLatest { data ->
|
||||
val spells = spellBookUseCase.toSpells(
|
||||
character = data.sheets[characterName],
|
||||
fire = data.fire,
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import com.pixelized.rplexicon.ui.screens.rolls.factory.AlterationFactory
|
|||
import com.pixelized.rplexicon.utilitary.extentions.context
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
|
@ -62,7 +63,7 @@ class AlterationViewModel @Inject constructor(
|
|||
.combine(activeAlterationRepository.getActiveAssignedAlterations(character)) { _, actives ->
|
||||
data.actives = actives.associate { it.name to true }
|
||||
}
|
||||
.collect {
|
||||
.collectLatest {
|
||||
val (sheet, descriptions, alterations, actives) = data
|
||||
val uio = alterations
|
||||
.groupBy { alteration -> alteration.source }
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ import com.pixelized.rplexicon.utilitary.annotate
|
|||
import com.pixelized.rplexicon.utilitary.dropCapRegex
|
||||
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||
import com.pixelized.rplexicon.utilitary.extentions.modifier.scrollOffset
|
||||
import com.pixelized.rplexicon.utilitary.extentions.searchCriterion
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.searchCriterion
|
||||
import com.pixelized.rplexicon.utilitary.highlightRegex
|
||||
import com.pixelized.rplexicon.utilitary.styleWith
|
||||
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ import com.pixelized.rplexicon.utilitary.annotateWithDropCap
|
|||
import com.pixelized.rplexicon.utilitary.dropCapRegex
|
||||
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||
import com.pixelized.rplexicon.utilitary.extentions.modifier.scrollOffset
|
||||
import com.pixelized.rplexicon.utilitary.extentions.searchCriterion
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.searchCriterion
|
||||
import com.pixelized.rplexicon.utilitary.highlightRegex
|
||||
import com.pixelized.rplexicon.utilitary.styleWith
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ import com.pixelized.rplexicon.utilitary.annotate
|
|||
import com.pixelized.rplexicon.utilitary.dropCapRegex
|
||||
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||
import com.pixelized.rplexicon.utilitary.extentions.modifier.scrollOffset
|
||||
import com.pixelized.rplexicon.utilitary.extentions.searchCriterion
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.searchCriterion
|
||||
import com.pixelized.rplexicon.utilitary.highlightRegex
|
||||
import com.pixelized.rplexicon.utilitary.styleWith
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import com.pixelized.rplexicon.data.repository.character.AlterationRepository
|
|||
import com.pixelized.rplexicon.data.repository.character.SkillRepository
|
||||
import com.pixelized.rplexicon.data.repository.character.SpellRepository
|
||||
import com.pixelized.rplexicon.ui.screens.character.composable.actions.AlterationItemUio
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.alterationIcon
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
import javax.inject.Inject
|
||||
|
||||
|
|
@ -25,7 +26,7 @@ class AlterationFactory @Inject constructor(
|
|||
): List<AlterationItemUio> {
|
||||
return alterations.map {
|
||||
AlterationItemUio(
|
||||
icon = it.icon,
|
||||
icon = it.icon ?: it.name.alterationIcon(),
|
||||
label = it.name,
|
||||
source = it.source,
|
||||
subLabel = description[it.name]?.original,
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ import com.pixelized.rplexicon.ui.composable.form.TextFieldUio
|
|||
import com.pixelized.rplexicon.ui.navigation.screens.searchArgument
|
||||
import com.pixelized.rplexicon.ui.screens.search.item.SearchItemUio
|
||||
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||
import com.pixelized.rplexicon.utilitary.extentions.searchCriterion
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.searchCriterion
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ import com.pixelized.rplexicon.utilitary.annotate
|
|||
import com.pixelized.rplexicon.utilitary.dropCapRegex
|
||||
import com.pixelized.rplexicon.utilitary.extentions.lexicon
|
||||
import com.pixelized.rplexicon.utilitary.extentions.modifier.scrollOffset
|
||||
import com.pixelized.rplexicon.utilitary.extentions.searchCriterion
|
||||
import com.pixelized.rplexicon.utilitary.extentions.string.searchCriterion
|
||||
import com.pixelized.rplexicon.utilitary.highlightRegex
|
||||
import com.pixelized.rplexicon.utilitary.styleWith
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import com.pixelized.rplexicon.utilitary.extentions.context
|
|||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
|
@ -43,7 +44,7 @@ class StatisticViewModel @Inject constructor(
|
|||
fun showDetail(dice: ClassHeaderSummaryUio.Dice) {
|
||||
detailJob?.cancel()
|
||||
detailJob = viewModelScope.launch(Dispatchers.IO) {
|
||||
firebaseRepository.getThrows().collect {
|
||||
firebaseRepository.getThrows().collectLatest {
|
||||
val card = it.details[dice.characterName]?.let { throws ->
|
||||
throwCardFactory.convert(throws = throws)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,239 @@
|
|||
package com.pixelized.rplexicon.utilitary.extentions.string
|
||||
|
||||
import android.net.Uri
|
||||
import com.pixelized.rplexicon.R
|
||||
import com.pixelized.rplexicon.utilitary.extentions.uri
|
||||
|
||||
fun String.attackIcon(): Uri? {
|
||||
return ResourcesCache.attacks[this]?.uri?.toUriOrNull()
|
||||
}
|
||||
|
||||
fun String.objectIcon(): Uri? {
|
||||
return ResourcesCache.objects[this]?.uri?.toUriOrNull()
|
||||
}
|
||||
|
||||
fun String.alterationIcon(): Uri? {
|
||||
return ResourcesCache.alterations[this]?.uri?.toUriOrNull()
|
||||
}
|
||||
|
||||
fun String.skillIcon(): Uri? {
|
||||
return ResourcesCache.skills[this]?.uri?.toUriOrNull()
|
||||
}
|
||||
|
||||
fun String.spellIcon(): Uri? {
|
||||
return ResourcesCache.spells[this]?.uri?.toUriOrNull()
|
||||
}
|
||||
|
||||
private object ResourcesCache {
|
||||
val alterations = hashMapOf(
|
||||
"Arme enflammée" to R.drawable.icbg_flaming_blade,
|
||||
"Critique" to R.drawable.icbg_frenzied_strike,
|
||||
"Esquiver" to R.drawable.icbg_uncanny_dodge,
|
||||
"Aspect de la bête" to R.drawable.icbg_aspect_of_the_beast_bear,
|
||||
"Attaque téméraire" to R.drawable.icbg_reckless_attack,
|
||||
"Défense sans armure" to R.drawable.icbg_unarmoured_defence_barbarian,
|
||||
"Instinct sauvage" to R.drawable.icbg_feral_instinct,
|
||||
"Rage" to R.drawable.icbg_rage_bear_heart,
|
||||
"Déplacement rapide" to R.drawable.icbg_fast_movement,
|
||||
"Sens du danger" to R.drawable.icbg_danger_sense,
|
||||
"Attaques sauvages" to R.drawable.icbg_savage_attacks,
|
||||
"Dé de supériorité - d6" to R.drawable.icbg_generic_control,
|
||||
"Dé de supériorité - d8" to R.drawable.icbg_generic_control,
|
||||
"Inspiration bardique" to R.drawable.icbg_bardic_inspiration,
|
||||
"Touche à tout" to R.drawable.icbg_jack_of_all_trades,
|
||||
"Aide" to R.drawable.icbg_aid,
|
||||
"Assistance" to R.drawable.icbg_guidance,
|
||||
"Bénédiction" to R.drawable.icbg_bless,
|
||||
"Discours motivant" to R.drawable.icbg_heroism,
|
||||
"Frappes épouvantables" to R.drawable.icbg_bolt_of_celestial_light,
|
||||
"Style de combat: Archerie" to R.drawable.icbg_brace_ranged,
|
||||
"Volonté astucieuse" to R.drawable.icbg_cutting_words_passive_feature,
|
||||
"Frappe du zéphyr" to R.drawable.icbg_step_of_the_wind_dash,
|
||||
"Marque du chasseur" to R.drawable.icbg_hunters_mark,
|
||||
"Arme magique" to R.drawable.icbg_magic_weapon,
|
||||
"Passage sans trace" to R.drawable.icbg_pass_without_trace,
|
||||
"Tireur d'élite" to R.drawable.icbg_crossbow_expert_wounding,
|
||||
"Forme sauvage : Loup" to R.drawable.icbg_wild_shape_wolf,
|
||||
"Odorat et ouïe aiguisés" to R.drawable.icbg_wild_shape_wolf,
|
||||
"Tactique de groupe" to R.drawable.icbg_pack_tactics,
|
||||
"Forme sauvage : Chat" to R.drawable.icbg_wild_shape_cat,
|
||||
"Ouïe aiguisés" to R.drawable.icbg_wild_shape_cat,
|
||||
"Dague" to R.drawable.icbg_dagger_unfaded,
|
||||
"Hache de guerre en argent" to R.drawable.icbg_battleaxe_plus_one_unfaded,
|
||||
"Bouclier" to R.drawable.icbg_studded_shield_unfaded,
|
||||
"Cape de protection" to R.drawable.icbg_cloak_of_protection_unfaded,
|
||||
"Armure d'écailles" to R.drawable.icbg_scale_mail_unfaded,
|
||||
"Armure de cuir" to R.drawable.icbg_leather_armour_rogue_unfaded,
|
||||
"Avantage" to R.drawable.ic_advantage,
|
||||
"Désavantage" to R.drawable.ic_disadvantage,
|
||||
"Emphase" to R.drawable.ic_emphase,
|
||||
"Touché par le néant" to R.drawable.icbg_partial_ceremorphosis,
|
||||
"Amateurisme retrouvé" to R.drawable.icbg_iron_mind,
|
||||
"Morsure de vampire" to R.drawable.icbg_bite,
|
||||
"Abri (partiel)" to R.drawable.icbg_patient_defence,
|
||||
"Abri (important)" to R.drawable.icbg_multiattack_defense,
|
||||
"Abri (total)" to R.drawable.icbg_protection_from_missiles,
|
||||
)
|
||||
|
||||
val attacks = hashMapOf(
|
||||
"Hache de guerre en argent" to R.drawable.icbg_reckless_attack,
|
||||
"Hache de guerre en argent (2 mains)" to R.drawable.icbg_reckless_attack,
|
||||
"Dague" to R.drawable.icbg_main_hand_attack,
|
||||
"Masse d'armes" to R.drawable.icbg_main_hand_attack,
|
||||
"Attaque à mains nues" to R.drawable.icbg_unarmed_strike,
|
||||
"Arme improvisée" to R.drawable.icbg_improvised_melee_weapon,
|
||||
"Lancé de javelot" to R.drawable.icbg_throw_weapon,
|
||||
"Lancé de dague" to R.drawable.icbg_throw_weapon,
|
||||
"Masse d'armes" to R.drawable.icbg_main_hand_attack,
|
||||
"Arme improvisée" to R.drawable.icbg_improvised_melee_weapon,
|
||||
"Epée courte argentée" to R.drawable.icbg_main_hand_attack,
|
||||
"Epée courte (main gauche)" to R.drawable.icbg_off_hand_attack_melee,
|
||||
"Arc long" to R.drawable.icbg_ranged_attack,
|
||||
"Arme improvisée" to R.drawable.icbg_improvised_melee_weapon,
|
||||
"Morsure" to R.drawable.icbg_bite_wolf,
|
||||
"Griffer" to R.drawable.icbg_claws_cat,
|
||||
"Dague" to R.drawable.icbg_main_hand_attack,
|
||||
"Dague (main gauche)" to R.drawable.icbg_off_hand_attack_melee,
|
||||
"Arbalète légère" to R.drawable.icbg_ranged_attack,
|
||||
"Arme improvisée" to R.drawable.icbg_improvised_melee_weapon,
|
||||
"Rapière" to R.drawable.icbg_main_hand_attack,
|
||||
"Épée courte (main gauche)" to R.drawable.icbg_off_hand_attack_melee,
|
||||
"Arme improvisée" to R.drawable.icbg_improvised_melee_weapon,
|
||||
"Arbalète légère" to R.drawable.icbg_ranged_attack,
|
||||
"Arbalète de poing" to R.drawable.icbg_ranged_attack,
|
||||
"Arbalète de poing (main gauche)" to R.drawable.icbg_off_hand_attack_ranged,
|
||||
)
|
||||
|
||||
val objects = hashMapOf(
|
||||
"Parchemin de Bénédiction" to R.drawable.icbg_scroll_of_bless_unfaded,
|
||||
"Parchemin d'Arme spirituelle" to R.drawable.icbg_book_signedtradebisa_unfaded,
|
||||
"Potion de guérison" to R.drawable.icbg_pot_potion_of_healing_unfaded,
|
||||
"Eau bénite" to R.drawable.icbg_grn_holy_water_unfaded,
|
||||
"Baies nourricières" to R.drawable.icbg_food_goodberry_unfaded,
|
||||
)
|
||||
|
||||
val skills = hashMapOf(
|
||||
"Dé de vie (Barbare)" to R.drawable.icbg_bolstering_magic_boon,
|
||||
"Dé de vie (Guerrier)" to R.drawable.icbg_bolstering_magic_boon,
|
||||
"Dé de vie (Rodeur)" to R.drawable.icbg_bolstering_magic_boon,
|
||||
"Dé de vie (Druide)" to R.drawable.icbg_bolstering_magic_boon,
|
||||
"Dé de vie" to R.drawable.icbg_bolstering_magic_boon,
|
||||
"Inspiration" to R.drawable.icbg_indomitable,
|
||||
"Touché par le néant" to R.drawable.icbg_partial_ceremorphosis,
|
||||
"C'était inévitable" to R.drawable.icbg_ancient_grudges,
|
||||
"Rage" to R.drawable.icbg_rage_bear_heart,
|
||||
"Endurance implacable" to R.drawable.icbg_relentless_endurance,
|
||||
"Vision dans le noir (Orc)" to R.drawable.icbg_darkvision,
|
||||
"Menaçant" to R.drawable.icbg_intimidating_presence,
|
||||
"Attaques sauvages" to R.drawable.icbg_savage_attacks,
|
||||
"Défense sans armure" to R.drawable.icbg_unarmoured_defence_barbarian,
|
||||
"Sens du danger" to R.drawable.icbg_danger_sense,
|
||||
"Second souffle" to R.drawable.icbg_second_wind,
|
||||
"Technique supérieur" to R.drawable.icbg_wild_magic_teleport_activate_barbarian,
|
||||
"Dé de supériorité - d6" to R.drawable.icbg_generic_control,
|
||||
"Croc-en-jambe" to R.drawable.icbg_trip_attack_melee,
|
||||
"Conduit divin" to R.drawable.icbg_divine_intervention_sunder_the_heretical,
|
||||
"Illumination protectrice" to R.drawable.icbg_warding_bond_icon,
|
||||
"Renvoi des morts-vivants" to R.drawable.icbg_turn_undead,
|
||||
"Radiance de l'aube" to R.drawable.icbg_break_of_dawn,
|
||||
"Forme sauvage" to R.drawable.icbg_wild_shape,
|
||||
"Ennemi juré" to R.drawable.icbg_mortal_reminder,
|
||||
"Explorateur né" to R.drawable.icbg_forest,
|
||||
"Ascendance féerique" to R.drawable.icbg_draconic_ancestry_copper_acid,
|
||||
"Cachette naturelle" to R.drawable.icbg_naturally_stealthy,
|
||||
"Vigilance primitive (variante)" to R.drawable.icbg_bestial_fury,
|
||||
"Vision dans le noir (Elfe)" to R.drawable.icbg_darkvision,
|
||||
"Transe" to R.drawable.icbg_focused_conjuration,
|
||||
"Attaque supplémentaire" to R.drawable.icbg_extra_attack,
|
||||
"Apanage de la Noblesse" to R.drawable.icbg_natures_ward,
|
||||
"Druidique" to R.drawable.icbg_class_druid_badge,
|
||||
"Appel de familier" to R.drawable.icbg_find_familiar_cat,
|
||||
"Détection de la magie" to R.drawable.icbg_generic_psychic,
|
||||
"Vision dans le noir (Tieffelin)" to R.drawable.icbg_darkvision,
|
||||
"Résistance infernale." to R.drawable.icbg_hellish_resistance,
|
||||
"Ascendance infernale" to R.drawable.icbg_draconic_ancestry_brass_fire,
|
||||
"Décharge déchirante" to R.drawable.icbg_agonising_blast,
|
||||
"Vision occulte" to R.drawable.icbg_generic_psychic,
|
||||
"Sombre présage" to R.drawable.icbg_hex_charisma,
|
||||
"Malédiction" to R.drawable.icbg_hex_charisma,
|
||||
"Ténèbres" to R.drawable.icbg_darkvision_spell,
|
||||
"Représailles infernales" to R.drawable.icbg_hellish_rebuke,
|
||||
"Inspiration" to R.drawable.icbg_indomitable,
|
||||
"Inspiration bardique" to R.drawable.icbg_bardic_inspiration,
|
||||
"Représentation envoûtante" to R.drawable.icbg_psionic_suggestion_hush,
|
||||
"Apparence inspirante" to R.drawable.icbg_magic_initiate_bard,
|
||||
"Chant reposant" to R.drawable.icbg_song_of_rest,
|
||||
"Fléau" to R.drawable.icbg_bane_spell,
|
||||
"Foulée brumeuse" to R.drawable.icbg_misty_step,
|
||||
"Amateurisme retrouvé" to R.drawable.icbg_iron_mind,
|
||||
"Vision dans le noir (Elfe)" to R.drawable.icbg_darkvision,
|
||||
"Ascendance féerique" to R.drawable.icbg_draconic_ancestry_copper_acid,
|
||||
"Source d'inspiration" to R.drawable.icbg_bardic_defence,
|
||||
"Touche à tout" to R.drawable.icbg_jack_of_all_trades,
|
||||
)
|
||||
|
||||
val spells = hashMapOf(
|
||||
"Aide" to R.drawable.icbg_aid,
|
||||
"Alarme" to R.drawable.icbg_command_halt,
|
||||
"Appel de familier" to R.drawable.icbg_find_familiar_cat,
|
||||
"Arme spirituelle" to R.drawable.icbg_spiritual_weapon_maul,
|
||||
"Armure d'Agathys" to R.drawable.icbg_armour_of_agathys,
|
||||
"Assistance" to R.drawable.icbg_guidance,
|
||||
"Bénédiction" to R.drawable.icbg_bless,
|
||||
"Charme-personne" to R.drawable.icbg_charm_person,
|
||||
"Communication avec les animaux" to R.drawable.icbg_speak_with_animals,
|
||||
"Contact glacial" to R.drawable.icbg_bone_chill,
|
||||
"Décharge occulte" to R.drawable.icbg_eldritch_blast,
|
||||
"Détection de la magie" to R.drawable.icbg_generic_psychic,
|
||||
"Espièglerie de Nathair" to R.drawable.icbg_tashas_hideous_laughter,
|
||||
"Esprits gardiens" to R.drawable.icbg_spirit_guardians,
|
||||
"Flamme sacrée" to R.drawable.icbg_sacred_flame,
|
||||
"Fléau" to R.drawable.icbg_bane_spell,
|
||||
"Foulée brumeuse" to R.drawable.icbg_misty_step,
|
||||
"Frappe du zéphyr" to R.drawable.icbg_step_of_the_wind_dash,
|
||||
"Illusion mineure" to R.drawable.icbg_minor_illusion,
|
||||
"Image silencieuse" to R.drawable.icbg_blink,
|
||||
"Immobilisation de personne" to R.drawable.icbg_hold_person,
|
||||
"Injonction" to R.drawable.icbg_command_flee,
|
||||
"Invisibilité" to R.drawable.icbg_invisibility,
|
||||
"Lueurs féeriques" to R.drawable.icbg_faerie_fire,
|
||||
"Lumière" to R.drawable.icbg_light,
|
||||
"Main de mage" to R.drawable.icbg_mage_hand,
|
||||
"Mains brûlantes" to R.drawable.icbg_burning_hands,
|
||||
"Marque du chasseur" to R.drawable.icbg_hunters_mark,
|
||||
"Message" to R.drawable.icbg_levitate,
|
||||
"Moquerie cruelle" to R.drawable.icbg_vicious_mockery,
|
||||
"Nuée de dagues" to R.drawable.icbg_cloud_of_daggers,
|
||||
"Prière de guérison" to R.drawable.icbg_prayer_of_healing,
|
||||
"Rayon ardent" to R.drawable.icbg_scorching_ray,
|
||||
"Restauration partielle" to R.drawable.icbg_lesser_restoration,
|
||||
"Sanctuaire" to R.drawable.icbg_sanctuary,
|
||||
"Sens animal" to R.drawable.icbg_animal_friendship,
|
||||
"Silence" to R.drawable.icbg_silence,
|
||||
"Soins" to R.drawable.icbg_cure_wounds,
|
||||
"Sommeil" to R.drawable.icbg_sleep,
|
||||
"Sphère de feu" to R.drawable.icbg_flaming_sphere,
|
||||
"Stabilisation" to R.drawable.icbg_help,
|
||||
"Suggestion" to R.drawable.icbg_command_approach,
|
||||
"Thaumaturgie" to R.drawable.icbg_thaumaturgy,
|
||||
"Vague tonnante" to R.drawable.icbg_thunderwave,
|
||||
"Passage sans trace" to R.drawable.icbg_pass_without_trace,
|
||||
"Croissance d'épines" to R.drawable.icbg_spike_growth,
|
||||
"Arme magique" to R.drawable.icbg_magic_weapon,
|
||||
"Baies nourricières" to R.drawable.icbg_goodberry,
|
||||
"Frappe piègeuse" to R.drawable.icbg_ensnaring_strike_ranged,
|
||||
"Petite hutte de Léomund" to R.drawable.icbg_globe_of_invulnerability,
|
||||
"Communication avec les plantes" to R.drawable.icbg_plant_growth,
|
||||
"Boule de feu" to R.drawable.icbg_fireball,
|
||||
"Lumière du jour" to R.drawable.icbg_daylight_sphere,
|
||||
"Aura de vitalité" to R.drawable.icbg_healing_radiance,
|
||||
"Malédiction" to R.drawable.icbg_hex_charisma,
|
||||
"Toucher du vampire" to R.drawable.icbg_vampiric_touch,
|
||||
"Amis" to R.drawable.icbg_friends,
|
||||
"Discours motivant" to R.drawable.icbg_heroism,
|
||||
"Ténèbres" to R.drawable.icbg_darkvision_spell,
|
||||
"Représailles infernales" to R.drawable.icbg_hellish_rebuke,
|
||||
"Mot de guérison" to R.drawable.icbg_healing_word,
|
||||
"Façonnage de l'eau" to R.drawable.icbg_create_water,
|
||||
)
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package com.pixelized.rplexicon.utilitary.extentions
|
||||
package com.pixelized.rplexicon.utilitary.extentions.string
|
||||
|
||||
import android.net.Uri
|
||||
import androidx.compose.runtime.Stable
|
||||
BIN
app/src/main/res/drawable/ic_advantage.webp
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="100dp"
|
||||
android:height="100dp"
|
||||
|
|
|
|||
BIN
app/src/main/res/drawable/ic_disadvantage.webp
Normal file
|
After Width: | Height: | Size: 9.7 KiB |
BIN
app/src/main/res/drawable/ic_emphase.webp
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
app/src/main/res/drawable/icbg_agonising_blast.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
app/src/main/res/drawable/icbg_aid.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
app/src/main/res/drawable/icbg_ancient_grudges.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
app/src/main/res/drawable/icbg_animal_friendship.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
app/src/main/res/drawable/icbg_armour_of_agathys.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
app/src/main/res/drawable/icbg_aspect_of_the_beast_bear.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
app/src/main/res/drawable/icbg_bane_spell.webp
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
app/src/main/res/drawable/icbg_bardic_defence.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
app/src/main/res/drawable/icbg_bardic_inspiration.webp
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
app/src/main/res/drawable/icbg_battleaxe_plus_one_unfaded.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
app/src/main/res/drawable/icbg_bestial_fury.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
app/src/main/res/drawable/icbg_bite.webp
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
app/src/main/res/drawable/icbg_bite_wolf.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
app/src/main/res/drawable/icbg_bless.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
app/src/main/res/drawable/icbg_blink.webp
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
app/src/main/res/drawable/icbg_bolstering_magic_boon.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
app/src/main/res/drawable/icbg_bolt_of_celestial_light.webp
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
app/src/main/res/drawable/icbg_bone_chill.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
app/src/main/res/drawable/icbg_book_signedtradebisa_unfaded.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
app/src/main/res/drawable/icbg_brace_ranged.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
app/src/main/res/drawable/icbg_break_of_dawn.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
app/src/main/res/drawable/icbg_burning_hands.webp
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
app/src/main/res/drawable/icbg_charm_person.webp
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
app/src/main/res/drawable/icbg_class_druid_badge.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
app/src/main/res/drawable/icbg_claws_cat.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
app/src/main/res/drawable/icbg_cloak_of_protection_unfaded.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
app/src/main/res/drawable/icbg_cloud_of_daggers.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
app/src/main/res/drawable/icbg_command_approach.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
app/src/main/res/drawable/icbg_command_flee.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
app/src/main/res/drawable/icbg_command_halt.webp
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
app/src/main/res/drawable/icbg_create_water.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
app/src/main/res/drawable/icbg_crossbow_expert_wounding.webp
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
app/src/main/res/drawable/icbg_cure_wounds.webp
Normal file
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
BIN
app/src/main/res/drawable/icbg_dagger_unfaded.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
app/src/main/res/drawable/icbg_danger_sense.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
app/src/main/res/drawable/icbg_darkvision.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
app/src/main/res/drawable/icbg_darkvision_spell.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
app/src/main/res/drawable/icbg_daylight_sphere.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
app/src/main/res/drawable/icbg_disciple_of_life.webp
Normal file
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 28 KiB |
BIN
app/src/main/res/drawable/icbg_draconic_ancestry_brass_fire.webp
Normal file
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 24 KiB |
BIN
app/src/main/res/drawable/icbg_eldritch_blast.webp
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
app/src/main/res/drawable/icbg_ensnaring_strike_ranged.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
app/src/main/res/drawable/icbg_extra_attack.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
app/src/main/res/drawable/icbg_faerie_fire.webp
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
app/src/main/res/drawable/icbg_fast_movement.webp
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
app/src/main/res/drawable/icbg_feral_instinct.webp
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
app/src/main/res/drawable/icbg_find_familiar_cat.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
app/src/main/res/drawable/icbg_fireball.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
app/src/main/res/drawable/icbg_flaming_blade.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
app/src/main/res/drawable/icbg_flaming_sphere.webp
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
app/src/main/res/drawable/icbg_focused_conjuration.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
app/src/main/res/drawable/icbg_font_of_inspiration.webp
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
app/src/main/res/drawable/icbg_food_goodberry_unfaded.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
app/src/main/res/drawable/icbg_forest.webp
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
app/src/main/res/drawable/icbg_frenzied_strike.webp
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
app/src/main/res/drawable/icbg_friends.webp
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
app/src/main/res/drawable/icbg_generic_control.webp
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
app/src/main/res/drawable/icbg_generic_psychic.webp
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
app/src/main/res/drawable/icbg_globe_of_invulnerability.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
app/src/main/res/drawable/icbg_goodberry.webp
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
app/src/main/res/drawable/icbg_grn_holy_water_unfaded.png
Normal file
|
After Width: | Height: | Size: 34 KiB |