From 1af9d853cbf0e760a08bba7b95b730dd85c56d9f Mon Sep 17 00:00:00 2001 From: infinitefusion Date: Thu, 23 Nov 2023 19:25:28 -0500 Subject: [PATCH] Adds cache for autogen sprites to reduce lag when loading sprites --- Data/Scripts/010_Data/001_GameData.rb | 2 +- .../001_Pokemon-related/004_PokemonStorage.rb | 2 +- Data/Scripts/016_UI/017_UI_PokemonStorage.rb | 2 +- Data/Scripts/050_AddOns/FusionSprites.rb | 26 ++++++++++++++++-- Data/Scripts/050_AddOns/HttpCalls.rb | 1 + Data/Scripts/050_AddOns/MultiSaves.rb | 1 + Data/Scripts/050_AddOns/New Items effects.rb | 2 +- Data/System.rxdata | Bin 28462 -> 28461 bytes 8 files changed, 30 insertions(+), 6 deletions(-) diff --git a/Data/Scripts/010_Data/001_GameData.rb b/Data/Scripts/010_Data/001_GameData.rb index 70f8c6b56..15402ef5a 100644 --- a/Data/Scripts/010_Data/001_GameData.rb +++ b/Data/Scripts/010_Data/001_GameData.rb @@ -48,7 +48,7 @@ module GameData end if !self::DATA.has_key?(other) - echo _INTL("Unknown ID {1}.", other) + echoln _INTL("Unknown ID {1}.", other) return self::get(:PIKACHU) end diff --git a/Data/Scripts/014_Pokemon/001_Pokemon-related/004_PokemonStorage.rb b/Data/Scripts/014_Pokemon/001_Pokemon-related/004_PokemonStorage.rb index 3493215f8..de328e61f 100644 --- a/Data/Scripts/014_Pokemon/001_Pokemon-related/004_PokemonStorage.rb +++ b/Data/Scripts/014_Pokemon/001_Pokemon-related/004_PokemonStorage.rb @@ -229,7 +229,7 @@ class PokemonStorage def pbStoreCaught(pkmn) if @currentBox>=0 pkmn.time_form_set = nil - pkmn.form = 0 if pkmn.isSpecies?(:SHAYMIN) + #pkmn.form = 0 if pkmn.isSpecies?(:SHAYMIN) #pkmn.heal end for i in 0...maxPokemon(@currentBox) diff --git a/Data/Scripts/016_UI/017_UI_PokemonStorage.rb b/Data/Scripts/016_UI/017_UI_PokemonStorage.rb index 1f4591970..06adf8632 100644 --- a/Data/Scripts/016_UI/017_UI_PokemonStorage.rb +++ b/Data/Scripts/016_UI/017_UI_PokemonStorage.rb @@ -1932,7 +1932,7 @@ class PokemonStorageScreen if heldpoke || selected[0] == -1 p = (heldpoke) ? heldpoke : @storage[-1, index] p.time_form_set = nil - p.form = 0 if p.isSpecies?(:SHAYMIN) + #p.form = 0 if p.isSpecies?(:SHAYMIN) #p.heal end @scene.pbStore(selected, heldpoke, destbox, firstfree) diff --git a/Data/Scripts/050_AddOns/FusionSprites.rb b/Data/Scripts/050_AddOns/FusionSprites.rb index 9bfd7cdda..7d04acc4b 100644 --- a/Data/Scripts/050_AddOns/FusionSprites.rb +++ b/Data/Scripts/050_AddOns/FusionSprites.rb @@ -257,7 +257,18 @@ def record_sprite_substitution(substitution_id, sprite_name) $PokemonGlobal.alt_sprite_substitutions[substitution_id] = sprite_name end +def add_to_autogen_cache(pokemon_id, sprite_name) + return if !$PokemonGlobal + return if !$PokemonGlobal.autogen_sprites_cache + $PokemonGlobal.autogen_sprites_cache[pokemon_id]=sprite_name +end + +class PokemonGlobalMetadata + attr_accessor :autogen_sprites_cache +end + def get_fusion_sprite_path(head_id, body_id, spriteform_body = nil, spriteform_head = nil) + $PokemonGlobal.autogen_sprites_cache = {} if $PokemonGlobal && !$PokemonGlobal.autogen_sprites_cache #Todo: ça va chier si on fusionne une forme d'un pokemon avec une autre forme, mais pas un problème pour tout de suite form_suffix = "" form_suffix += "_" + spriteform_body.to_s if spriteform_body @@ -286,6 +297,11 @@ def get_fusion_sprite_path(head_id, body_id, spriteform_body = nil, spriteform_h record_sprite_substitution(substitution_id, local_custom_path) return local_custom_path end + echoln $PokemonGlobal.autogen_sprites_cache + + #if the game has loaded an autogen earlier, no point in trying to redownload, so load that instead + return $PokemonGlobal.autogen_sprites_cache[substitution_id] if $PokemonGlobal.autogen_sprites_cache[substitution_id] && $PokemonGlobal + #Try to download custom sprite if none found locally downloaded_custom = download_custom_sprite(head_id, body_id, spriteform_body_letter, spriteform_head_letter, random_alt) if downloaded_custom @@ -295,11 +311,17 @@ def get_fusion_sprite_path(head_id, body_id, spriteform_body = nil, spriteform_h #Try local generated sprite local_generated_path = Settings::BATTLERS_FOLDER + head_id.to_s + spriteform_head_letter + "/" + filename - return local_generated_path if pbResolveBitmap(local_generated_path) + if pbResolveBitmap(local_generated_path) + add_to_autogen_cache(substitution_id,local_generated_path) + return local_generated_path + end #Download generated sprite if nothing else found autogen_path = download_autogen_sprite(head_id, body_id,spriteform_body,spriteform_head) - return autogen_path if pbResolveBitmap(autogen_path) + if pbResolveBitmap(autogen_path) + add_to_autogen_cache(substitution_id,autogen_path) + return autogen_path + end return Settings::DEFAULT_SPRITE_PATH end diff --git a/Data/Scripts/050_AddOns/HttpCalls.rb b/Data/Scripts/050_AddOns/HttpCalls.rb index 18a7dac32..96eef7c59 100644 --- a/Data/Scripts/050_AddOns/HttpCalls.rb +++ b/Data/Scripts/050_AddOns/HttpCalls.rb @@ -75,6 +75,7 @@ def download_sprite(base_path, head_id, body_id, saveLocation = "Graphics/temp", echoln _INTL("\nDownloaded file from {1} to {2}", base_path, saveLocation) return downloaded_file_name end + echoln "tried to download " + base_path return nil rescue MKXPError, Errno::ENOENT return nil diff --git a/Data/Scripts/050_AddOns/MultiSaves.rb b/Data/Scripts/050_AddOns/MultiSaves.rb index 17293ad15..f8a1acd15 100644 --- a/Data/Scripts/050_AddOns/MultiSaves.rb +++ b/Data/Scripts/050_AddOns/MultiSaves.rb @@ -412,6 +412,7 @@ class PokemonLoadScreen Game.load(@save_data) $game_switches[SWITCH_V5_1] = true $PokemonGlobal.alt_sprite_substitutions = {} if !$PokemonGlobal.alt_sprite_substitutions + $PokemonGlobal.autogen_sprites_cache = {} return when cmd_new_game @scene.pbEndScene diff --git a/Data/Scripts/050_AddOns/New Items effects.rb b/Data/Scripts/050_AddOns/New Items effects.rb index f4af1a7b9..a5209ead8 100644 --- a/Data/Scripts/050_AddOns/New Items effects.rb +++ b/Data/Scripts/050_AddOns/New Items effects.rb @@ -1482,7 +1482,7 @@ def pbUnfuse(pokemon, scene, supersplicers, pcPosition = nil) bodyPoke = getBasePokemonID(pokemon.species_data.id_number, true) headPoke = getBasePokemonID(pokemon.species_data.id_number, false) - if (pokemon.obtain_method == 2 || pokemon.ot != $Trainer.name) # && !canunfuse + if (pokemon.obtain_method == 2 || pokemon.ot != $Trainer.name) && false # && !canunfuse scene.pbDisplay(_INTL("You can't unfuse a Pokémon obtained in a trade!")) return false else diff --git a/Data/System.rxdata b/Data/System.rxdata index 57e4fa9213b3d4f84c7c546e08a1d86651d3d743..77b58d1a77924e95de9ebf4e186c91821304e55f 100644 GIT binary patch delta 19 bcmZ2?k8$li#tq$)EX>>1{@FZ1a$YC^T|x;X delta 20 ccmZ2`k8#~S#tq$)tSn!{%o#WLOU?@g0A5B2NB{r;