Compare commits

..

56 Commits

Author SHA1 Message Date
infinitefusion 5657d28c78 whirl islands map 2025-01-13 21:14:15 -05:00
infinitefusion 984d30d912 spritesheets shit 2025-01-10 22:38:43 -05:00
infinitefusion 5fde2bbc1a Fixes team not being recovered after replaying pinkan island from rocket side 2025-01-08 18:18:03 -05:00
infinitefusion 743367f514 skip credits on mobile 2025-01-06 00:43:40 -05:00
infinitefusion f6fb6ff545 Fixes crash when backing out of menu on art gallery 2nd floor statistics npc 2025-01-06 00:32:15 -05:00
infinitefusion fdd672c0de Makes it not possible to put hats on triple fusions (temp fix to prevent crash) 2025-01-06 00:31:43 -05:00
infinitefusion 7a2978a329 normal type expert compatibiolity with older savefiles 2025-01-05 11:18:52 -05:00
infinitefusion 0e42591bfd fixes base sprites importing 2025-01-04 20:02:50 -05:00
infinitefusion 028c6d1442 adds ash hat in viridian forest 2025-01-04 13:05:31 -05:00
infinitefusion 9f95e6a263 resized spritesheets 2025-01-02 16:27:04 -05:00
infinitefusion bf06c26344 updates spritesheets to spritepack 2025-01-02 14:11:37 -05:00
infinitefusion f9f6f35236 Fixes sprite importing 2025-01-02 14:09:09 -05:00
infinitefusion 804578f4e3 Fixes updated spritesheets list not resetting when new spritepack is released 2025-01-02 09:51:03 -05:00
infinitefusion 234f22e78e Use spritesheets of 96x96 sprites 2025-01-01 16:29:04 -05:00
infinitefusion 84d1fe3d86 Fixes quests npc statistics on new savefiles 2024-12-30 20:01:59 -05:00
infinitefusion d1c0e4eaf9 Fixes fighting expert crash 2024-12-30 19:55:38 -05:00
infinitefusion 39d3c159b1 Updates version number 2024-12-30 15:59:49 -05:00
infinitefusion 6a3b607690 Fixes issue when wearing hat 2024-12-30 15:58:35 -05:00
infinitefusion c2954b8e84 Fix game now gives back missed HMs if any 2024-12-30 15:58:23 -05:00
infinitefusion 0a7f0cbbef removes pbs files 2024-12-30 13:21:49 -05:00
infinitefusion b547813995 Fixes issue with hotel quest rewards 2024-12-30 12:52:06 -05:00
infinitefusion 46e7636c65 Fixes bug preventing game from downloading newest sprites 2024-12-30 12:11:35 -05:00
infinitefusion 7cc97fb7b9 Typos and grammar mistakes 2024-12-30 11:10:57 -05:00
infinitefusion 49bf30987f Fixes always getting kicked out of celadon hideout after removing your uniform while inside 2024-12-30 10:51:34 -05:00
infinitefusion 83efcd1b35 graphics fixes 2024-12-30 10:44:31 -05:00
infinitefusion de9029eb1b Fixes clothes/hats menu 2024-12-29 15:11:31 -05:00
infinitefusion 3415c85618 Fixes HMs getting randomized when random gym types are enabled 2024-12-29 12:43:26 -05:00
infinitefusion de8f9603dc Track dyed clothes individually 2024-12-27 22:58:50 -05:00
infinitefusion 5e07802681 fixes type experts not removing randomized gym type 2024-12-25 14:38:14 -05:00
infinitefusion 099af82e47 split dex entry fixes 2024-12-25 14:33:52 -05:00
infinitefusion c03fc60c05 updates version number 2024-12-25 14:20:35 -05:00
infinitefusion c473e6ee72 Fixes diancie forcing player to release their pokemon to keep it 2024-12-25 14:20:12 -05:00
infinitefusion d9be9d17f5 adds all_entries file 2024-12-25 14:13:40 -05:00
infinitefusion 479cfd07fd dynamic autogen entries 2024-12-25 14:13:03 -05:00
infinitefusion 0a59474542 Removes autogen dex entries 2024-12-24 09:30:02 -05:00
infinitefusion 17ca4dcd69 fixes text 2024-12-23 23:58:48 -05:00
infinitefusion 950c942b20 Adds toggle for displaying generated entries or not + fixes issue when cleaning json strings 2024-12-23 23:52:04 -05:00
infinitefusion d2e5dfb8cd Fixes crash when setting the device option twice 2024-12-22 16:56:31 -05:00
infinitefusion a674134c62 Skip json string cleaning on mobile 2024-12-22 13:44:22 -05:00
infinitefusion 92818790b9 fixes unsynced pokedex issue 2024-12-22 12:17:17 -05:00
infinitefusion f6f85fab1b fixes unsynced pokedex issue 2024-12-22 12:08:14 -05:00
infinitefusion 2ae331fd14 fixes crash 2024-12-22 12:05:04 -05:00
infinitefusion b89420afd7 Fixes possible battle error when registering pokemon in pokedex 2024-12-22 11:33:14 -05:00
infinitefusion 5085a89614 fixes some misnamed outfits 2024-12-22 11:28:12 -05:00
infinitefusion db8f0d6d3e Fixes in-battle form changes 2024-12-22 11:27:23 -05:00
infinitefusion 57d0118ee9 Fixes some outfit and trainer bugs 2024-12-22 11:11:14 -05:00
infinitefusion fd053345b1 fixes crash when backing out of elevator menu 2024-12-21 21:19:25 -05:00
infinitefusion 5034855f98 fixes isOutdoor 2024-12-21 21:14:44 -05:00
infinitefusion 4cdd6878fb Adds missing hats 2024-12-21 19:47:10 -05:00
infinitefusion a19b64ebea Fixes pinkan island bosses not resetting properly 2024-12-21 18:35:00 -05:00
infinitefusion 0e8e7da039 Fixes pinkan island bosses not resetting properly 2024-12-21 18:34:11 -05:00
infinitefusion d22e6b0208 Fixes crash for entries 2024-12-21 18:20:50 -05:00
infinitefusion a6dc5167d1 Fixes crash when swapping diancie for another pokemon after catching 2024-12-21 17:14:09 -05:00
infinitefusion c846150afd Fixes crash in safari zone because of type icons 2024-12-21 17:11:30 -05:00
infinitefusion 81489ec8e6 fixes crash with ai entries on mobile 2024-12-21 17:00:22 -05:00
infinitefusion 28d3ffc074 fixes issue with letterless sprites not being picked automatically 2024-12-21 13:14:35 -05:00
4139 changed files with 540213 additions and 12596 deletions
+1 -3
View File
@@ -1,7 +1,5 @@
Graphics/CustomBattlers/*
Graphics/Battlers/*
Graphics/Pokemon/FusionIcons/*
Data/pokedex/*
Data/sprites/*
Data/VERSION
+8
View File
@@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/../../../../../../../../../../../:\Users\charl\Documents\Jeux\rpgmaker\infinitefusion\dev\infinitefusion-e18\Data\.idea/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/
+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="RUBY_MODULE" version="4">
<component name="ModuleRunConfigurationManager">
<shared />
</component>
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/Data.iml" filepath="$PROJECT_DIR$/.idea/Data.iml" />
</modules>
</component>
</project>
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+13 -6
View File
@@ -5,8 +5,8 @@
#==============================================================================#
module Settings
# The version of your game. It has to adhere to the MAJOR.MINOR.PATCH format.
GAME_VERSION = '6.4.0'
GAME_VERSION_NUMBER = "6.4.0"
GAME_VERSION = '6.4.5'
GAME_VERSION_NUMBER = "6.4.5"
LATEST_GAME_RELEASE = "6.4"
POKERADAR_LIGHT_ANIMATION_RED_ID = 17
@@ -22,10 +22,11 @@ module Settings
#Infinite fusion settings
NB_POKEMON = 501
CUSTOM_BASE_SPRITES_FOLDER = "Graphics/CustomBattlers/local_spritesBaseSprites/"
CUSTOM_BASE_SPRITES_FOLDER = "Graphics/CustomBattlers/local_sprites/BaseSprites/"
CUSTOM_BATTLERS_FOLDER = "Graphics/CustomBattlers/"
CUSTOM_SPRITES_TO_IMPORT_FOLDER = "Graphics/CustomBattlers/Sprites to import/"
CUSTOM_BATTLERS_FOLDER_INDEXED = "Graphics/CustomBattlers/local_sprites/indexed/"
CUSTOM_BASE_SPRITE_FOLDER = "Graphics/CustomBattlers/local_sprites/BaseSprites/"
BATTLERS_FOLDER = "Graphics/Battlers/Autogens/"
DOWNLOADED_SPRITES_FOLDER = "Graphics/temp/"
DEFAULT_SPRITE_PATH = "Graphics/Battlers/Special/000.png"
@@ -35,6 +36,8 @@ module Settings
BASE_SPRITES_FILE_PATH = "Data/sprites/BASE_SPRITES"
CUSTOM_DEX_ENTRIES_PATH = "Data/pokedex/dex.json"
AI_DEX_ENTRIES_PATH = "Data/pokedex/generated_entries.json"
POKEDEX_ENTRIES_PATH = "Data/pokedex/all_entries.json"
UPDATED_SPRITESHEETS_CACHE = "Data/sprites/updated_spritesheets_cache"
BACK_ITEM_ICON_PATH = "Graphics/Items/back.png"
@@ -57,8 +60,8 @@ module Settings
HTTP_CONFIGS_FILE_URL = "https://raw.githubusercontent.com/infinitefusion/pif-downloadables/refs/heads/master/Settings.rb"
HTTP_CONFIGS_FILE_PATH = "Data/Scripts/DownloadedSettings.rb"
SPRITES_FILE_URL = "https://raw.githubusercontent.com/infinitefusion/infinitefusion-e18/main/Data/CUSTOM_SPRITES"
BASE_SPRITES_FILE_URL = "https://raw.githubusercontent.com/infinitefusion/infinitefusion-e18/main/Data/BASE_SPRITES"
SPRITES_FILE_URL = "https://raw.githubusercontent.com/infinitefusion/infinitefusion-e18/main/Data/sprites/CUSTOM_SPRITES"
BASE_SPRITES_FILE_URL = "https://raw.githubusercontent.com/infinitefusion/infinitefusion-e18/main/Data/sprites/BASE_SPRITES"
STARTUP_MESSAGES = ""
@@ -102,6 +105,9 @@ module Settings
BASE_POKEMON_SPRITESHEET_URL = "https://infinitefusion.net/spritesheets/spritesheets_base/"
CUSTOM_FUSIONS_SPRITESHEET_URL = "https://infinitefusion.net/spritesheets/spritesheets_custom/"
BASE_POKEMON_SPRITESHEET_TRUE_SIZE_URL = "https://infinitefusion.net/spritesheets_truesize/spritesheets_base/"
CUSTOM_FUSIONS_SPRITESHEET_TRUE_SIZE_URL = "https://infinitefusion.net/spritesheets_truesize/spritesheets_custom/"
RIVAL_STARTER_PLACEHOLDER_SPECIES = :MEW #(MEW)
VAR_1_PLACEHOLDER_SPECIES = :DIALGA
VAR_2_PLACEHOLDER_SPECIES = :PALKIA
@@ -479,7 +485,8 @@ module Settings
[561, 50, :FLETCHINDER,32,45], #Mt. Ember
[562, 50, :NINJASK,45,50], #Boon Island
[603, 50, :KECLEON,45,50], #Chrono Island
[654, 50, :WHIMSICOTT,32,45] #Brine Road
[654, 50, :WHIMSICOTT,32,45], #Brine Road
[654, 50, :SCRAGGY,32,45] #Kindle Road
]
#=============================================================================
@@ -119,9 +119,11 @@ def downloadAllowed?()
end
def clean_json_string(str)
#echoln str
#return str if $PokemonSystem.on_mobile
# Remove non-UTF-8 characters and unexpected control characters
cleaned_str = str.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
#cleaned_str = str.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
cleaned_str = str
# Remove literal \n, \r, \t, etc.
cleaned_str = cleaned_str.gsub(/\\n|\\r|\\t/, '')
@@ -91,14 +91,15 @@ class Sprite_Character < RPG::Sprite
end
end
def setSpriteToAppearance(trainerAppearance)
#return if !@charbitmap || !@charbitmap.bitmap
begin
new_bitmap = AnimatedBitmap.new(getBaseOverworldSpriteFilename()) #@charbitmap
new_bitmap.bitmap = generateNPCClothedBitmapStatic(trainerAppearance)
@bitmap_override = new_bitmap
updateBitmap
rescue
end
end
def clearBitmapOverride()
@@ -149,7 +150,6 @@ class Sprite_Character < RPG::Sprite
end
end
def generateClothedBitmap()
return
end
@@ -275,7 +275,6 @@ class PokemonDataBox < SpriteWrapper
0,(s-1)*STATUS_ICON_HEIGHT,-1,STATUS_ICON_HEIGHT])
end
#Draw type icons (foe Pokémon only)
if @battler.opposes?(0) && $PokemonSystem.type_icons
drawEnemyTypeIcons(imagePos)
@@ -287,6 +286,7 @@ class PokemonDataBox < SpriteWrapper
end
def drawEnemyTypeIcons(imagePos)
return if @battler.is_a?(PokeBattle_FakeBattler)
type1_number = GameData::Type.get(@battler.type1).id_number
type2_number = GameData::Type.get(@battler.type2).id_number
+3 -3
View File
@@ -887,9 +887,9 @@ def pbReceiveItem(item, quantity = 1, item_name = "", music = nil, canRandom = t
if item == :LEFTOVERS
pbMessage(_INTL("\\me[{1}]You obtained some \\c[1]{2}\\c[0]!\\wtnp[30]", meName, itemname))
elsif item.is_machine? # TM or HM
if $game_switches[SWITCH_RANDOMIZE_GYMS_SEPARATELY] && $game_switches[SWITCH_RANDOMIZED_GYM_TYPES] && $game_variables[VAR_CURRENT_GYM_TYPE] > -1
item = GameData::Item.get(randomizeGymTM(item))
end
# if $game_switches[SWITCH_RANDOMIZE_GYMS_SEPARATELY] && $game_switches[SWITCH_RANDOMIZED_GYM_TYPES] && $game_variables[VAR_CURRENT_GYM_TYPE] > -1
# item = GameData::Item.get(randomizeGymTM(item))
# end
pbMessage(_INTL("\\me[{1}]You obtained \\c[1]{2} {3}\\c[0]!\\wtnp[30]", meName, itemname, GameData::Move.get(move).name))
elsif quantity > 1
pbMessage(_INTL("\\me[{1}]You obtained {2} #{text_color}{3}\\c[0]!\\wtnp[30]", meName, quantity, itemname))
@@ -19,6 +19,10 @@ class Player < Trainer
attr_accessor :unlocked_hairstyles
attr_accessor :unlocked_card_backgrounds
attr_accessor :dyed_hats
attr_accessor :dyed_clothes
attr_accessor :last_worn_outfit
attr_accessor :last_worn_hat
@@ -121,6 +125,24 @@ class Player < Trainer
refreshPlayerOutfit()
end
def clothes_color=(value)
echoln value
echoln @clothes
echoln $Trainer.dyed_clothes
echoln caller
@clothes_color=value
$Trainer.dyed_clothes= {} if !$Trainer.dyed_clothes
$Trainer.dyed_clothes[@clothes] = value if value
refreshPlayerOutfit()
end
def hat_color=(value)
@hat_color=value
$Trainer.dyed_hats= {} if ! $Trainer.dyed_hats
$Trainer.dyed_hats[@hat] = value if value
refreshPlayerOutfit()
end
def unlock_clothes(outfitID,silent=false)
update_global_clothes_list()
@@ -265,6 +287,10 @@ class Player < Trainer
@last_worn_outfit = nil
@last_worn_hat = nil
@dyed_hats = {}
@dyed_clothes = {}
@card_background = Settings::DEFAULT_TRAINER_CARD_BG
@unlocked_card_backgrounds = [@card_background]
end
@@ -68,6 +68,7 @@ class Player < Trainer
end
def resync_pokedex
echoln "syncing pokedex"
@seen_standard = resync_standard_pokedex_array(@seen_standard)
@owned_standard = resync_standard_pokedex_array(@owned_standard)
@@ -141,6 +142,7 @@ class Player < Trainer
end
def set_seen(species, should_refresh_dexes = true)
try_resync_pokedex()
dexNum = getDexNumberForSpecies(species)
if isTripleFusion(dexNum)
set_seen_triple(species)
@@ -173,7 +173,7 @@ _END_
# Stop Editing
def main
#endCredits() if $PokemonSystem.on_mobile
endCredits() if $PokemonSystem.on_mobile
#-------------------------------
# Animated Background Setup
#-------------------------------
+8 -7
View File
@@ -21,7 +21,7 @@ class PokemonPokedexInfo_Scene
@sprites["infosprite"].zoom_x = Settings::FRONTSPRITE_SCALE
@sprites["infosprite"].zoom_y = Settings::FRONTSPRITE_SCALE
@spritesLoader = BattleSpriteLoader.new
@randomEntryText = nil
# @mapdata = pbLoadTownMapData
# map_metadata = GameData::MapMetadata.try_get($game_map.map_id)
# mappos = (map_metadata) ? map_metadata.town_map_position : nil
@@ -323,7 +323,7 @@ class PokemonPokedexInfo_Scene
# species_data.pokedex_entry, base, shadow)
#
#
#$PokemonSystem.use_generated_dex_entries=true if $PokemonSystem.use_generated_dex_entries ==nil
drawEntryText(overlay, species_data)
# Draw the footprint
@@ -362,6 +362,7 @@ class PokemonPokedexInfo_Scene
pbDrawImagePositions(overlay, imagepos)
end
def drawEntryText(overlay, species_data)
baseColor = Color.new(88, 88, 80)
shadow = Color.new(168, 184, 184)
@@ -374,12 +375,12 @@ class PokemonPokedexInfo_Scene
entryText = customEntry
shadowColor = shadowCustom
else
aiEntry = getAIDexEntry(species_data.species, species_data.name)
if aiEntry
entryText = aiEntry
shadowColor = shadowAI
if $PokemonSystem.use_generated_dex_entries && species_data.is_a?(GameData::FusedSpecies)
@randomEntryText = species_data.get_random_dex_entry if !@randomEntryText
entryText = @randomEntryText
shadowColor = shadow
else
entryText = species_data.pokedex_entry
entryText = "No custom Pokédex entry available for this Pokémon. Please consider submitting an entry for this Pokémon on the game's Discord."
shadowColor = shadow
end
end
+1 -1
View File
@@ -1254,7 +1254,7 @@ class PokemonPartyScreen
end
end
commands[cmdSwitch = commands.length] = _INTL("Switch") if @party.length > 1
commands[cmdHat = commands.length] = _INTL("Hat") if !pkmn.egg? && $game_switches[SWITCH_UNLOCKED_POKEMON_HATS]
commands[cmdHat = commands.length] = _INTL("Hat") if canPutHatOnPokemon(pkmn)
if !pkmn.egg?
if pkmn.mail
commands[cmdMail = commands.length] = _INTL("Mail")
+1 -1
View File
@@ -1282,7 +1282,7 @@ class PokemonSummary_Scene
if pbBattleChallenge.currentChallenge == -1
commands[cmdGiveItem = commands.length] = _INTL("Give item")
commands[cmdTakeItem = commands.length] = _INTL("Take item") if @pokemon.hasItem?
commands[cmdHat = commands.length] = _INTL("Hat") if !@pokemon.egg? && $game_switches[SWITCH_UNLOCKED_POKEMON_HATS]
commands[cmdHat = commands.length] = _INTL("Hat") if canPutHatOnPokemon(@pokemon)
end
commands[cmdPokedex = commands.length] = _INTL("View Pokédex") if $Trainer.has_pokedex
end
+2
View File
@@ -22,6 +22,7 @@ class PokemonSystem
attr_accessor :max_nb_sprites_download
attr_accessor :on_mobile
attr_accessor :type_icons
attr_accessor :use_generated_dex_entries
def initialize
@textspeed = 1 # Text speed (0=slow, 1=normal, 2=fast)
@@ -43,6 +44,7 @@ class PokemonSystem
@max_nb_sprites_download = 5
@on_mobile = false
@type_icons = true
@use_generated_dex_entries = true
end
end
@@ -111,7 +111,7 @@ class DoublePreviewScreen
spriteLoader = BattleSpriteLoader.new
bitmap = spriteLoader.load_fusion_sprite(head_pokemon,body_pokemon)
bitmap.scale_bitmap(Settings::FRONTSPRITE_SCALE)
pif_sprite = spriteLoader.obtain_fusion_pif_sprite(head_pokemon,body_pokemon)
#hasCustom = picturePath.include?("CustomBattlers")
#hasCustom = customSpriteExistsBase(body_pokemon,head_pokemon)
hasCustom = customSpriteExists(body_pokemon,head_pokemon)
@@ -123,10 +123,12 @@ class DoublePreviewScreen
drawFusionInformation(dexNumber, level, x)
if !$Trainer.seen?(dexNumber)
if hasCustom
previewwindow.picture.pbSetColor(150, 255, 150, 200)
if pif_sprite.local_path()
previewwindow.picture.pbSetColor(170, 200, 250, 200) #blue
elsif hasCustom
previewwindow.picture.pbSetColor(150, 255, 150, 200) #green
else
previewwindow.picture.pbSetColor(255, 255, 255, 200)
previewwindow.picture.pbSetColor(255, 255, 255, 200) #white
end
end
return previewwindow
+34 -1
View File
@@ -104,6 +104,14 @@ module GameData
return @head_pokemon.id_number
end
def get_body_species_symbol
return @body_pokemon.id
end
def get_head_species_symbol
return @head_pokemon.id
end
def adjust_stats_with_evs
GameData::Stat.each_main do |s|
@base_stats[s.id] = 1 if !@base_stats[s.id] || @base_stats[s.id] <= 0
@@ -289,6 +297,31 @@ module GameData
return split_and_combine_text(body_entry, head_entry, ".")
end
def get_random_dex_entry()
begin
file_path = Settings::POKEDEX_ENTRIES_PATH
json_data = File.read(file_path)
all_body_entries = HTTPLite::JSON.parse(json_data)
body_entry = all_body_entries[@body_pokemon.id_number.to_s].sample
body_entry = body_entry.gsub(/#{@body_pokemon.real_name}/i, @real_name)
body_entry = clean_json_string(body_entry).gsub(@body_pokemon.real_name, @real_name)
head_entry = all_body_entries[@head_pokemon.id_number.to_s].sample
head_entry = head_entry.gsub(/#{@head_pokemon.real_name}/i, @real_name)
head_entry = clean_json_string(head_entry).gsub(@head_pokemon.real_name, @real_name)
rescue
body_entry = @body_pokemon.real_pokedex_entry.gsub(@body_pokemon.real_name, @real_name)
head_entry = @head_pokemon.real_pokedex_entry.gsub(@head_pokemon.real_name, @real_name)
end
echoln body_entry
echoln head_entry
combined_entry = split_and_combine_text(body_entry, head_entry, ".")
combined_entry += "." unless combined_entry.end_with?(".")
return combined_entry
end
def calculate_egg_groups
body_egg_groups = @body_pokemon.egg_groups
head_egg_groups = @head_pokemon.egg_groups
@@ -335,7 +368,7 @@ module GameData
beginningText = beginingText_split[0]
endText = endText_split[1] && endText_split[1] != "" ? endText_split[1] : endText_split[0]
return beginningText + separator + endText
return beginningText + separator + " " + endText
end
def calculate_fused_stats(dominantStat, otherStat)
+1
View File
@@ -954,6 +954,7 @@ end
def drawSpriteCredits(pif_sprite, viewport)
overlay = BitmapSprite.new(Graphics.width, Graphics.height, @viewport).bitmap
return if pif_sprite.type == :AUTOGEN
return if pif_sprite.local_path
x = Graphics.width / 2
y = 240
spritename = pif_sprite.to_filename()
@@ -2,6 +2,11 @@ class PIFSpriteExtracter
COLUMNS = 20 # Number of columns in the spritesheet
@@spritesheet_cache = SpritesBitmapCache.new
#factor by which the sprite needs to be resized to get it to base game resolution (288x288)
def get_resize_scale
return 1
end
def load_sprite(pif_sprite,download_allowed=true)
begin
start_time = Time.now
@@ -19,6 +24,7 @@ class PIFSpriteExtracter
end
end
sprite_bitmap = AnimatedBitmap.from_bitmap(bitmap)
sprite_bitmap.scale_bitmap(get_resize_scale())
end_time = Time.now
source = loaded_from_spritesheet ? :"spritesheet" : "cache"
echoln "Loaded sprite for <head:#{pif_sprite.head_id}, body: #{pif_sprite.body_id}, variant: #{pif_sprite.alt_letter}> from #{source} in #{end_time - start_time} seconds"
@@ -90,36 +96,3 @@ class PIFSpriteExtracter
class PokemonGlobalMetadata
attr_accessor :current_spritepack_date
end
# class SpritesBitmapCache
# @@cache = {} # Cache storage for spritesheets
# @@usage_order = [] # Tracks usage order for LRU eviction
#
# def self.fetch(key)
# if @@cache.key?(key)
# # Move key to the end to mark it as recently used
# @@usage_order.delete(key)
# @@usage_order << key
# return @@cache[key]
# end
#
# # Load spritesheet via block if not found in cache
# spritesheet = yield
#
# if @@cache.size >= Settings::SPRITE_CACHE_MAX_NB
# # Evict least recently used (first in order)
# oldest_key = @@usage_order.shift
# @@cache.delete(oldest_key)
# echoln "Evicted: #{oldest_key} from spritesheet cache"
# end
#
# # Add new spritesheet to cache and track its usage
# @@cache[key] = spritesheet
# @@usage_order << key
# spritesheet
# end
# end
@@ -1,6 +1,6 @@
class AutogenExtracter < PIFSpriteExtracter
SPRITESHEET_FOLDER_PATH = "Graphics\\Battlers\\spritesheets_autogen\\"
SPRITE_SIZE = 288 # Each sprite is 288x288 pixels
SPRITE_SIZE = 96 # Size of each sprite in the spritesheet
COLUMNS = 10 # Number of columns in the spritesheet
SHEET_WIDTH = SPRITE_SIZE * COLUMNS # 2880 pixels wide spritesheet
@@ -32,6 +32,9 @@ class AutogenExtracter < PIFSpriteExtracter
return "#{SPRITESHEET_FOLDER_PATH}#{head_id}.png"
end
def get_resize_scale
return 3
end
#
# # Check cache before loading from disk
# sprite_bitmap = @@spritesheet_cache.fetch(pif_sprite) do
@@ -7,8 +7,7 @@ class BaseSpriteExtracter < PIFSpriteExtracter
end
SPRITESHEET_FOLDER_PATH = "Graphics/CustomBattlers/spritesheets/spritesheets_base/"
SPRITE_SIZE = 288 # Original sprite size
SCALED_SIZE = 288 # Scaled sprite size
SPRITE_SIZE = 96 # Original sprite size
NB_COLUMNS_BASESPRITES = 10
SHEET_WIDTH = SPRITE_SIZE * NB_COLUMNS_BASESPRITES # 2880 pixels wide spritesheet
def load_bitmap_from_spritesheet(pif_sprite)
@@ -55,4 +54,8 @@ class BaseSpriteExtracter < PIFSpriteExtracter
return !$updated_spritesheets.include?(spritesheet_file)
end
def get_resize_scale
return 3
end
end
@@ -4,6 +4,9 @@ class BattleSpriteLoader
end
def load_pif_sprite_directly(pif_sprite)
if pif_sprite.local_path && pbResolveBitmap(pif_sprite.local_path)
return AnimatedBitmap.new(pif_sprite.local_path)
end
extractor = get_sprite_extractor_instance(pif_sprite.type)
return extractor.load_sprite(pif_sprite)
end
@@ -22,8 +25,8 @@ class BattleSpriteLoader
def preload_sprite_from_pokemon(pokemon)
return if !pokemon
substitution_id = get_sprite_substitution_id_from_dex_number(pokemon.species)
echoln substitution_id
echoln $PokemonGlobal.alt_sprite_substitutions
# echoln substitution_id
# echoln $PokemonGlobal.alt_sprite_substitutions
pif_sprite = $PokemonGlobal.alt_sprite_substitutions[substitution_id] if $PokemonGlobal
if !pif_sprite
pif_sprite = get_pif_sprite_from_species(pokemon.species)
@@ -65,19 +68,25 @@ class BattleSpriteLoader
def obtain_fusion_pif_sprite(head_id,body_id)
substitution_id = get_sprite_substitution_id_for_fusion(head_id, body_id)
pif_sprite = $PokemonGlobal.alt_sprite_substitutions[substitution_id] if $PokemonGlobal
pif_sprite.dump_info if pif_sprite
if !pif_sprite
pif_sprite = select_new_pif_fusion_sprite(head_id, body_id)
local_path = check_for_local_sprite(pif_sprite)
if local_path
pif_sprite.local_path = local_path
pif_sprite.type = :CUSTOM
end
substitution_id = get_sprite_substitution_id_for_fusion(head_id, body_id)
$PokemonGlobal.alt_sprite_substitutions[substitution_id] = pif_sprite if $PokemonGlobal
end
return pif_sprite
end
def load_fusion_sprite(head_id, body_id)
pif_sprite = obtain_fusion_pif_sprite(head_id,body_id)
local_path = check_for_local_sprite(pif_sprite)
if local_path
return AnimatedBitmap.new(local_path)
if pif_sprite.local_path
return AnimatedBitmap.new(pif_sprite.local_path)
end
extractor = get_sprite_extractor_instance(pif_sprite.type)
loaded_sprite = extractor.load_sprite(pif_sprite, @download_allowed)
@@ -94,9 +103,8 @@ class BattleSpriteLoader
pif_sprite = select_new_pif_base_sprite(dex_number)
$PokemonGlobal.alt_sprite_substitutions[substitution_id] = pif_sprite if $PokemonGlobal
end
local_path = check_for_local_sprite(pif_sprite)
if local_path
return AnimatedBitmap.new(local_path)
if pif_sprite.local_path
return AnimatedBitmap.new(pif_sprite.local_path)
end
extractor = get_sprite_extractor_instance(pif_sprite.type)
loaded_sprite = extractor.load_sprite(pif_sprite)
@@ -137,6 +145,7 @@ class BattleSpriteLoader
end
def check_for_local_sprite(pif_sprite)
return pif_sprite.local_path if pif_sprite.local_path
if pif_sprite.type == :BASE
sprite_path = "#{Settings::CUSTOM_BASE_SPRITES_FOLDER}#{pif_sprite.head_id}#{pif_sprite.alt_letter}.png"
else
@@ -6,8 +6,7 @@ class CustomSpriteExtracter < PIFSpriteExtracter
end
SPRITESHEET_FOLDER_PATH = "Graphics/CustomBattlers/spritesheets/spritesheets_custom/"
SPRITE_SIZE = 288 # Original sprite size
SCALED_SIZE = 288 # Scaled sprite size
SPRITE_SIZE = 96 # Original sprite size
SHEET_WIDTH = SPRITE_SIZE * COLUMNS # 2880 pixels wide spritesheet
def load_bitmap_from_spritesheet(pif_sprite)
@@ -60,6 +59,11 @@ class CustomSpriteExtracter < PIFSpriteExtracter
load_sprite(PIFSprite.new(:CUSTOM,head_id,body_id,alt_letter))
end
def get_resize_scale
return 3
end
#
# def extract_bitmap_to_file(head_id, body_id, alt_letter, folder)
# # Create the directory if it doesn't exist
+17 -3
View File
@@ -4,6 +4,7 @@ class PIFSprite
attr_accessor :head_id
attr_accessor :body_id
attr_accessor :alt_letter
attr_accessor :local_path
#types:
# :AUTOGEN, :CUSTOM, :BASE
@@ -12,8 +13,24 @@ class PIFSprite
@head_id = head_id
@body_id = body_id
@alt_letter = alt_letter
@local_path = nil
end
def dump_info()
echoln "Type: #{@type}"
echoln "Head: #{@head_id}"
echoln "Body: #{@body_id}"
echoln "Alt letter: #{@alt_letter}"
echoln "Local path: #{@local_path}"
end
def equals(other_pif_sprite)
return @type == other_pif_sprite.type &&
@head_id == other_pif_sprite.head_id &&
@body_id == other_pif_sprite.body_id &&
@alt_letter == other_pif_sprite.alt_letter &&
@local_path == other_pif_sprite.local_path
end
#little hack for old methods that expect a filename for a sprite
def to_filename()
@@ -46,7 +63,6 @@ class PIFSprite
obj
end
end
def new_pif_sprite_from_dex_num(type, dexNum, alt_letter)
@@ -55,8 +71,6 @@ def new_pif_sprite_from_dex_num(type, dexNum,alt_letter)
return PIFSprite.new(type, head_id, body_id, alt_letter)
end
def pif_sprite_from_spritename(spritename, autogen = false)
spritename = spritename.split(".png")[0] #remove the extension
if spritename =~ /^(\d+)\.(\d+)([a-zA-Z]*)$/ # Two numbers with optional letters
@@ -84,6 +84,7 @@ SWITCH_PINKAN_SIDE_ROCKET=1099
SWITCH_PINKAN_SIDE_POLICE=1100
SWITCH_LEAVING_PINKAN_ISLAND=1113
SWITCH_BLOCK_PINKAN_WHISTLE=1111
SWITCH_PINKAN_FINISHED=1119
VAR_ORICORIO_FLOWERS = 276
#Randomizer Switches
@@ -173,14 +173,19 @@ def generate_front_trainer_sprite_bitmap(allowEasterEgg=true, pokeball = nil, cl
raise "No temp clothes graphics available"
end
outfitBitmap = AnimatedBitmap.new(outfitFilename, clothes_color_shift) # if pbResolveBitmap(outfitFilename) #pb
outfitBitmap = AnimatedBitmap.new(outfitFilename, clothes_color_shift) if pbResolveBitmap(outfitFilename) #pb
hairBitmapWrapper = AnimatedBitmap.new(hairFilename, hair_color_shift) if pbResolveBitmap(hairFilename)
hatBitmap = AnimatedBitmap.new(hatFilename, hat_color_shift) if pbResolveBitmap(hatFilename) #pbLoadOutfitBitmap(hatFilename) if pbResolveBitmap(hatFilename)
baseBitmap.bitmap = baseBitmap.bitmap.clone
baseBitmap.bitmap.blt(0, 0, outfitBitmap.bitmap, outfitBitmap.bitmap.rect) if outfitBitmap
if outfitBitmap
baseBitmap.bitmap.blt(0, 0, outfitBitmap.bitmap, outfitBitmap.bitmap.rect)
else
outfitFilename = getTrainerSpriteOutfitFilename("temp")
outfitBitmap = AnimatedBitmap.new(outfitFilename, 0)
baseBitmap.bitmap.blt(0, 0, outfitBitmap.bitmap, outfitBitmap.bitmap.rect)
end
baseBitmap.bitmap.blt(0, 0, hairBitmapWrapper.bitmap, hairBitmapWrapper.bitmap.rect) if hairBitmapWrapper
baseBitmap.bitmap.blt(0, 0, hatBitmap.bitmap, hatBitmap.bitmap.rect) if hatBitmap
baseBitmap.bitmap.blt(44, 42, ballBitmap, ballBitmap.rect) if ballBitmap
@@ -155,7 +155,6 @@ end
def get_clothes_by_id(id)
update_global_outfit_lists()
echoln $PokemonGlobal.clothes_data
return $PokemonGlobal.clothes_data.has_key?(id) ? $PokemonGlobal.clothes_data[id] : nil
end
+2 -2
View File
@@ -21,7 +21,7 @@ CLOTHES_GHOST = "temp"
CLOTHES_STEEL_M = "steelworkerM"
CLOTHES_STEEL_F = "steelworkerF"
CLOTHES_FIRE = "firefigther"
CLOTHES_FIRE = "fire"
CLOTHES_WATER = "waterdress"
@@ -31,7 +31,7 @@ CLOTHES_ELECTRIC = "urbanelectric"
CLOTHES_PSYCHIC = "temp"
CLOTHES_ICE = "temp"
CLOTHES_ICE = "iceoutfit"
CLOTHES_DRAGON = "dragonconqueror"
@@ -1,4 +1,6 @@
class OutfitsMartAdapter < PokemonMartAdapter
attr_accessor :worn_clothes
WORN_ITEM_BASE_COLOR = MessageConfig::BLUE_TEXT_MAIN_COLOR
WORN_ITEM_SHADOW_COLOR = MessageConfig::BLUE_TEXT_SHADOW_COLOR
@@ -1,6 +1,13 @@
class ClothesMartAdapter < OutfitsMartAdapter
DEFAULT_NAME = "[unknown]"
DEFAULT_DESCRIPTION = "A piece of clothing that trainers can wear."
def toggleEvent(item)
if !isShop? && $Trainer.clothes_color != 0
if pbConfirmMessage(_INTL("Would you like to remove the dye?"))
$Trainer.clothes_color = 0
end
end
end
def initialize(stock = nil, isShop = nil)
super
@@ -29,10 +36,37 @@ class ClothesMartAdapter < OutfitsMartAdapter
return if !item
previewWindow.clothes = item.id
$Trainer.clothes = item.id
set_dye_color(item,previewWindow)
pbRefreshSceneMap
previewWindow.updatePreview()
end
def get_dye_color(item)
return 0 if isShop?
$Trainer.dyed_clothes= {} if ! $Trainer.dyed_clothes
if $Trainer.dyed_clothes.include?(item.id)
return $Trainer.dyed_clothes[item.id]
end
return 0
end
def set_dye_color(item,previewWindow)
if !isShop?
$Trainer.dyed_clothes= {} if ! $Trainer.dyed_clothes
if $Trainer.dyed_clothes.include?(item.id)
dye_color = $Trainer.dyed_clothes[item.id]
$Trainer.clothes_color = dye_color
previewWindow.clothes_color = dye_color
else
$Trainer.clothes_color=0
previewWindow.clothes_color=0
end
else
$Trainer.clothes_color=0
previewWindow.clothes_color=0
end
end
def addItem(item)
changed_clothes = obtainClothes(item.id)
@@ -52,6 +86,7 @@ class ClothesMartAdapter < OutfitsMartAdapter
def reset_player_clothes()
$Trainer.clothes = @worn_clothes
$Trainer.clothes_color = $Trainer.dyed_clothes[@worn_clothes] if $Trainer.dyed_clothes && $Trainer.dyed_clothes[@worn_clothes]
end
def get_unlocked_items_list()

Some files were not shown because too many files have changed in this diff Show More