spriter fight in gallery

This commit is contained in:
infinitefusion
2023-06-17 12:58:57 -04:00
parent 45fe666a35
commit a82a58df33
17 changed files with 173 additions and 41 deletions

View File

@@ -424,10 +424,9 @@ def pbDisplayBattleFactoryPointsWindow(msgwindow)
pbDisplayVariableWindow(msgwindow, "Tokens", VAR_BATTLE_FACTORY_TOKENS)
end
def pbDisplayVariableWindow(msgwindow,name,variable_id)
def pbDisplayVariableWindow(msgwindow, name, variable_id)
pointsString = $game_variables[variable_id].to_s
pointswindow = Window_AdvancedTextPokemon.new(_INTL("{1}:\n<ar>{2}</ar>",name, pointsString))
pointswindow = Window_AdvancedTextPokemon.new(_INTL("{1}:\n<ar>{2}</ar>", name, pointsString))
pointswindow.setSkin("Graphics/Windowskins/goldskin")
pointswindow.resizeToFit(pointswindow.text, Graphics.width)
pointswindow.width = 160 if pointswindow.width <= 160
@@ -441,11 +440,11 @@ def pbDisplayVariableWindow(msgwindow,name,variable_id)
return pointswindow
end
def pbDisplayTwoVariableWindow(msgwindow,name1,variable1_id,name2, variable2_id)
def pbDisplayTwoVariableWindow(msgwindow, name1, variable1_id, name2, variable2_id)
pointsString1 = $game_variables[variable1_id].to_s
pointsString2 = $game_variables[variable2_id].to_s
pointswindow = Window_AdvancedTextPokemon.new(_INTL("{1}:<ar>{2}</ar>\n{3}:<ar>{4}</ar>",name1, pointsString1,name2,pointsString2))
pointswindow = Window_AdvancedTextPokemon.new(_INTL("{1}:<ar>{2}</ar>\n{3}:<ar>{4}</ar>", name1, pointsString1, name2, pointsString2))
pointswindow.setSkin("Graphics/Windowskins/goldskin")
pointswindow.resizeToFit(pointswindow.text, Graphics.width)
pointswindow.width = 160 if pointswindow.width <= 160
@@ -551,10 +550,10 @@ end
# Main message-displaying function
#===============================================================================
def pbMessageDisplayNoSound(msgwindow, message, letterbyletter = true, commandProc = nil)
pbMessageDisplay(msgwindow,message,letterbyletter,commandProc,false)
pbMessageDisplay(msgwindow, message, letterbyletter, commandProc, false)
end
def pbMessageDisplay(msgwindow, message, letterbyletter = true, commandProc = nil,withSound=true)
def pbMessageDisplay(msgwindow, message, letterbyletter = true, commandProc = nil, withSound = true)
return if !msgwindow
oldletterbyletter = msgwindow.letterbyletter
msgwindow.letterbyletter = (letterbyletter) ? true : false
@@ -730,15 +729,17 @@ def pbMessageDisplay(msgwindow, message, letterbyletter = true, commandProc = ni
param = controls[i][1]
case control
when "f"
isFusion = param.to_i > NB_POKEMON
head = getBasePokemonID(param.to_i, false)
body = getBasePokemonID(param.to_i, true)
facewindow.dispose if facewindow
path = obtainPokemonSpritePath(body, head, $game_variables[VAR_CUSTOM_SPRITES_ENABLED] == 0)
facewindow = isFusion ? PictureWindow.new(path) : PictureWindow.new("Graphics/Battlers/#{head}/#{head}.png")
pbPositionNearMsgWindow(facewindow, msgwindow, :left)
facewindow.viewport = msgwindow.viewport
facewindow.z = msgwindow.z
if param.to_i > 0
isFusion = param.to_i > NB_POKEMON
head = getBasePokemonID(param.to_i, false)
body = getBasePokemonID(param.to_i, true)
facewindow.dispose if facewindow
path = obtainPokemonSpritePath(body, head, $game_variables[VAR_CUSTOM_SPRITES_ENABLED] == 0)
facewindow = isFusion ? PictureWindow.new(path) : PictureWindow.new("Graphics/Battlers/#{head}/#{head}.png")
pbPositionNearMsgWindow(facewindow, msgwindow, :left)
facewindow.viewport = msgwindow.viewport
facewindow.z = msgwindow.z
end
when "ff"
facewindow.dispose if facewindow
facewindow = FaceWindowVX.new(param)
@@ -876,9 +877,9 @@ def pbMessageNoSound(message, commands = nil, cmdIfCancel = 0, skin = nil, defau
msgwindow = pbCreateMessageWindow(nil, skin)
if commands
ret = pbMessageDisplayNoSound(msgwindow, message, true,
proc { |msgwindow|
next Kernel.pbShowCommands(msgwindow, commands, cmdIfCancel, defaultCmd, &block)
}, &block)
proc { |msgwindow|
next Kernel.pbShowCommands(msgwindow, commands, cmdIfCancel, defaultCmd, &block)
}, &block)
else
pbMessageDisplay(msgwindow, message, &block)
end
@@ -887,7 +888,6 @@ def pbMessageNoSound(message, commands = nil, cmdIfCancel = 0, skin = nil, defau
return ret
end
def pbConfirmMessage(message, &block)
return (pbMessage(message, [_INTL("Yes"), _INTL("No")], 2, &block) == 0)
end

View File

@@ -74,7 +74,7 @@ class PokeBattle_Scene
# Opposing trainer(s) sprites
if @battle.trainerBattle?
@battle.opponent.each_with_index do |p,i|
pbCreateTrainerFrontSprite(i,p.trainer_type,@battle.opponent.length)
pbCreateTrainerFrontSprite(i,p.trainer_type,@battle.opponent.length,p.sprite_override)
end
end
# Data boxes and Pokémon sprites
@@ -181,8 +181,10 @@ class PokeBattle_Scene
trainer.oy = trainer.bitmap.height
end
def pbCreateTrainerFrontSprite(idxTrainer,trainerType,numTrainers=1)
def pbCreateTrainerFrontSprite(idxTrainer,trainerType,numTrainers=1,sprite_override=nil)
trainerFile = GameData::TrainerType.front_sprite_filename(trainerType)
trainerFile = sprite_override if sprite_override
spriteX, spriteY = PokeBattle_SceneConstants.pbTrainerPosition(1,idxTrainer,numTrainers)
trainer = pbAddSprite("trainer_#{idxTrainer+1}",spriteX,spriteY,trainerFile,@viewport)
return if !trainer.bitmap

View File

@@ -515,6 +515,53 @@ def pbTrainerBattleCore(*args)
return decision
end
def convert_pokemon_to_pokemon_hash(pokemon)
pokemon_hash = Hash.new
pokemon_hash[:species] = pokemon.species
pokemon_hash[:level] = pokemon.level
return pokemon_hash
end
#party: array of pokemon team
# [[:SPECIES,level], ... ]
#
def customTrainerBattle(trainerName, trainerType, party_array, default_level=50, endSpeech="", sprite_override=nil)
# trainerID= "customTrainer"
#
# trainer_info_hash = {}
# trainer_info_hash[:id] = trainerID
# trainer_info_hash[:id_number] = 0
# trainer_info_hash[:name] = trainerName
# trainer_info_hash[:version] = 0
# trainer_info_hash[:items] = []
# trainer_info_hash[:lose_text] = endSpeech
# trainer_info_hash[:pokemon] = party
#trainer = GameData::Trainer.new(trainer_info_hash)
trainer = NPCTrainer.new(trainerName,trainerType,sprite_override)
trainer.lose_text=endSpeech
party = []
party_array.each { |pokemon|
if pokemon.is_a?(Pokemon)
party << pokemon
elsif pokemon.is_a?(Symbol)
party << Pokemon.new(pokemon,default_level,trainer)
end
}
trainer.party=party
Events.onTrainerPartyLoad.trigger(nil,trainer)
decision = pbTrainerBattleCore(trainer)
# Return true if the player won the battle, and false if any other result
return (decision==1)
end
#===============================================================================
# Standard methods that start a trainer battle of various sizes
#===============================================================================

View File

@@ -8,6 +8,7 @@ class Trainer
attr_accessor :language
attr_accessor :party
attr_accessor :quests
attr_accessor :sprite_override
def inspect
str = super.chop
@@ -204,12 +205,13 @@ class Trainer
#=============================================================================
def initialize(name, trainer_type)
def initialize(name, trainer_type, sprite_override=nil)
@trainer_type = GameData::TrainerType.get(trainer_type).id
@name = name
@id = rand(2 ** 16) | rand(2 ** 16) << 16
@language = pbGetLanguage
@party = []
@sprite_override = sprite_override
end
end
@@ -220,7 +222,7 @@ class NPCTrainer < Trainer
attr_accessor :items
attr_accessor :lose_text
def initialize(name, trainer_type)
def initialize(name, trainer_type, sprite_override=nil)
super
@items = []
@lose_text = nil

View File

@@ -1155,7 +1155,7 @@ class PokemonPartyScreen
def pbPokemonRename(pkmn, pkmnid)
cmd = 0
loop do
speciesname = PBSpecies.getName(pkmn.species)
speciesname = pkmn.speciesName
msg = [_INTL("{1} has the nickname {2}.", speciesname, pkmn.name),
_INTL("{1} has no nickname.", speciesname)][pkmn.name == speciesname ? 1 : 0]
cmd = @scene.pbShowCommands(msg, [

View File

@@ -145,6 +145,7 @@ end
#param2 = true pour body, false pour head
#return int du pokemon de base
def getBasePokemonID(pokemon, body = true)
return nil if pokemon <= 0
if pokemon.is_a?(Symbol)
dex_number = GameData::Species.get(pokemon).id_number
pokemon = dex_number

View File

@@ -60,7 +60,7 @@ def addNewTripleFusion(pokemon1,pokemon2,pokemon3,level = 1)
end
pokemon = TripleFusion.new(pokemon1,pokemon2,pokemon3,level)
pokemon.calc_stats
pbMessage(_INTL("{1} obtained {2}!\\me[Pkmn get]\\wtnp[80]\1", $Trainer.name, pokemon.name))
pbNicknameAndStore(pokemon)
#$Trainer.pokedex.register(pokemon)

View File

@@ -125,11 +125,42 @@ def list_all_spriters()
return names_list
end
def generateCurrentGalleryBattle(level = nil, number_of_pokemon = 3)
spriter_name = pbGet(259)
#set highest level in party if nil
if !level
level = $Trainer.highest_level_pokemon_in_party
end
possible_battlers = []
for i in 0..5
sprite = pbGet(VAR_GALLERY_FEATURED_SPRITES)[i]
species = getPokemonSpeciesFromSprite(sprite)
possible_battlers << species if species
end
selected_battlers_idx = possible_battlers.sample(number_of_pokemon)
party = []
selected_battlers_idx.each { |species|
party << Pokemon.new(species, level)
}
customTrainerBattle(spriter_name,
:PAINTER,
party,
level,
pick_spriter_losing_dialog(spriter_name),
pick_trainer_sprite(spriter_name)
)
end
def generateArtGallery(nbSpritesDisplayed = 6, saveArtistNameInVariable = 1, saveSpritesInVariable = 2, saveAllArtistSpritesInVariable = 3, artistName = nil)
artistName = nil if artistName == 0
creditsMap = map_sprites_by_artist
featuredArtist = artistName ? artistName : getRandomSpriteArtist(creditsMap, nbSpritesDisplayed)
if featuredArtist
if !creditsMap[featuredArtist] #try again if issue
return generateArtGallery(nbSpritesDisplayed,saveSpritesInVariable,saveSpritesInVariable,saveSpritesInVariable,artistName)
end
featuredSprites = creditsMap[featuredArtist].shuffle.take(nbSpritesDisplayed)
pbSet(saveArtistNameInVariable, File.basename(featuredArtist, '#*'))
pbSet(saveSpritesInVariable, featuredSprites)
@@ -143,7 +174,7 @@ def format_artist_name(full_name)
return File.basename(full_name, '#*')
end
def getRandomSpriteArtist(creditsMap = nil, minimumNumberOfSprites = 1, giveUpAfterX = 50)
def getRandomSpriteArtist(creditsMap = nil, minimumNumberOfSprites = 10, giveUpAfterX = 50)
creditsMap = map_sprites_by_artist if !creditsMap
i = 0
while i < giveUpAfterX

View File

@@ -0,0 +1,36 @@
def pick_trainer_sprite(spriter_name)
possible_types = "abcd"
trainer_type_index = select_number_from_seed(spriter_name,0,3)
path = _INTL("Graphics/Trainers/trainer116{1}",possible_types[trainer_type_index].to_s)
return path
end
def select_number_from_seed(seed, min_value, max_value)
hash = 137
seed.each_byte do |byte|
hash = ((hash << 5) + hash) + byte
end
srand(hash)
selected_number = rand(min_value..max_value)
selected_number
end
def pick_spriter_losing_dialog(spriter_name)
possible_dialogs = [
"Oh... I lost...",
"I did my best!",
"You're too strong!",
"You win!",
"What a fight!",
"That was fun!",
"Ohh, that's too bad",
"I should've sprited some stronger Pokémon!",
"So much for that!",
"Should've seen that coming!",
"I can't believe it!",
"What a surprise!"
]
index = select_number_from_seed(spriter_name,0,possible_dialogs.size-1)
return possible_dialogs[index]
end

View File

@@ -17,6 +17,12 @@ class TripleFusion < Pokemon
super(:ZAPMOLTICUNO,level,owner,withMoves,recheck_form)
end
def types
return [@species1_data.type1, @species2_data.type1,@species3_data.type1]
end
def baseStats
ret = {}
GameData::Stat.each_main do |s|
@@ -33,6 +39,9 @@ class TripleFusion < Pokemon
return (nicknamed?) ? @name : @species_name
end
def speciesName
return @species_name
end
def generate_triple_fusion_name()
part1 = split_string_with_syllables(@species1_data.name)[0]
@@ -58,6 +67,23 @@ class TripleFusion < Pokemon
end
def ability_id
if !@ability
abil_index = ability_index
if !@ability # Natural ability or no hidden ability defined
chosen_poke_for_ability= rand(1..3)
if chosen_poke_for_ability == 1
@ability = @species1_data.abilities[abil_index] || @species1_data.abilities[0]
elsif chosen_poke_for_ability == 2
@ability = @species2_data.abilities[abil_index] || @species2_data.abilities[0]
else
@ability = @species3_data.abilities[abil_index] || @species3_data.abilities[0]
end
end
end
return @ability
end
end