mirror of
https://github.com/infinitefusion/infinitefusion-e18.git
synced 2025-12-27 11:15:59 +00:00
Compare commits
5 Commits
bbd5ba09ea
...
develop-e2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
13c7792686 | ||
|
|
4ecf97b777 | ||
|
|
6536fcda77 | ||
|
|
4a19fbc754 | ||
|
|
c0cf7da7bb |
@@ -149,7 +149,6 @@ class TilemapRenderer
|
||||
# Try to load expanded autotile from cache first
|
||||
cached_path = File.join("Graphics", "Autotiles/ExpandedAutotiles", "#{filename}.png")
|
||||
if FileTest.exist?(cached_path)
|
||||
echoln "Loading cached expanded autotile for #{filename}"
|
||||
bitmap = RPG::Cache.load_bitmap(EXPANDED_AUTOTILES_FOLDER, filename)
|
||||
|
||||
duration = AUTOTILE_FRAME_DURATION
|
||||
|
||||
@@ -562,7 +562,7 @@ end
|
||||
# Fades out the screen before a block is run and fades it back in after the
|
||||
# block exits. z indicates the z-coordinate of the viewport used for this effect
|
||||
def pbFadeOutIn(z = 99999, nofadeout = false)
|
||||
duration = 0.4 # In seconds
|
||||
duration = 0.1 # In seconds
|
||||
col = Color.new(0, 0, 0, 0)
|
||||
viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
||||
viewport.z = z
|
||||
|
||||
@@ -5,6 +5,8 @@ class AnimatedBitmap
|
||||
def initialize(file, hue = 0)
|
||||
raise "Filename is nil (missing graphic)." if file.nil?
|
||||
path = file
|
||||
@path = path
|
||||
|
||||
filename = ""
|
||||
if file.last != "/" # Isn't just a directory
|
||||
split_file = file.split(/[\\\/]/)
|
||||
@@ -31,6 +33,8 @@ class AnimatedBitmap
|
||||
def dispose; @bitmap.dispose; end
|
||||
def deanimate; @bitmap.deanimate; end
|
||||
def copy; @bitmap.copy; end
|
||||
|
||||
def path; @path end
|
||||
end
|
||||
|
||||
#===============================================================================
|
||||
|
||||
@@ -35,7 +35,7 @@ module GameData
|
||||
return nil if !species || !form
|
||||
validate species => [Symbol, String]
|
||||
validate form => Integer
|
||||
raise _INTL("Undefined species {1}.", species) if !GameData::Species.exists?(species)
|
||||
#raise _INTL("Undefined species {1}.", species) if !GameData::Species.exists?(species)
|
||||
species = species.to_sym if species.is_a?(String)
|
||||
if form > 0
|
||||
trial = sprintf("%s_%d", species, form).to_sym
|
||||
|
||||
@@ -23,7 +23,7 @@ class PokemonEvolutionScene
|
||||
|
||||
def pbStartScreen(pokemon, newspecies)
|
||||
@pokemon = pokemon
|
||||
@newspecies = newspecies
|
||||
@fused_pokemon_dex_number = newspecies
|
||||
@sprites = {}
|
||||
@bgviewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
||||
@bgviewport.z = 99999
|
||||
@@ -40,7 +40,7 @@ class PokemonEvolutionScene
|
||||
rsprite1.y = (Graphics.height - 64) / 2
|
||||
rsprite2 = PokemonSprite.new(@viewport)
|
||||
rsprite2.setOffset(PictureOrigin::CENTER)
|
||||
rsprite2.setPokemonBitmapSpecies(@pokemon, @newspecies, false)
|
||||
rsprite2.setPokemonBitmapSpecies(@pokemon, @fused_pokemon_dex_number, false)
|
||||
rsprite2.x = rsprite1.x
|
||||
rsprite2.y = rsprite1.y
|
||||
rsprite2.visible = false
|
||||
@@ -197,8 +197,8 @@ class PokemonEvolutionScene
|
||||
def pbEvolutionSuccess
|
||||
$stats.evolution_count += 1
|
||||
# Play cry of evolved species
|
||||
cry_time = GameData::Species.cry_length(@newspecies, @pokemon.form)
|
||||
Pokemon.play_cry(@newspecies, @pokemon.form)
|
||||
cry_time = GameData::Species.cry_length(@fused_pokemon_dex_number, @pokemon.form)
|
||||
Pokemon.play_cry(@fused_pokemon_dex_number, @pokemon.form)
|
||||
timer_start = System.uptime
|
||||
loop do
|
||||
Graphics.update
|
||||
@@ -208,7 +208,7 @@ class PokemonEvolutionScene
|
||||
pbBGMStop
|
||||
# Success jingle/message
|
||||
pbMEPlay("Evolution success")
|
||||
newspeciesname = GameData::Species.get(@newspecies).name
|
||||
newspeciesname = GameData::Species.get(@fused_pokemon_dex_number).name
|
||||
pbMessageDisplay(@sprites["msgwindow"],
|
||||
"\\se[]" + _INTL("Congratulations! Your {1} evolved into {2}!",
|
||||
@pokemon.name, newspeciesname) + "\\wt[80]") { pbUpdate }
|
||||
@@ -217,14 +217,14 @@ class PokemonEvolutionScene
|
||||
pbEvolutionMethodAfterEvolution
|
||||
# Modify Pokémon to make it evolved
|
||||
was_fainted = @pokemon.fainted?
|
||||
@pokemon.species = @newspecies
|
||||
@pokemon.species = @fused_pokemon_dex_number
|
||||
@pokemon.hp = 0 if was_fainted
|
||||
@pokemon.calc_stats
|
||||
@pokemon.ready_to_evolve = false
|
||||
# See and own evolved species
|
||||
was_owned = $player.owned?(@newspecies)
|
||||
was_owned = $player.owned?(@fused_pokemon_dex_number)
|
||||
$player.pokedex.register(@pokemon)
|
||||
$player.pokedex.set_owned(@newspecies)
|
||||
$player.pokedex.set_owned(@fused_pokemon_dex_number)
|
||||
moves_to_learn = []
|
||||
movelist = @pokemon.getMoveList
|
||||
movelist.each do |i|
|
||||
@@ -252,7 +252,7 @@ class PokemonEvolutionScene
|
||||
end
|
||||
|
||||
def pbEvolutionMethodAfterEvolution
|
||||
@pokemon.action_after_evolution(@newspecies)
|
||||
@pokemon.action_after_evolution(@fused_pokemon_dex_number)
|
||||
end
|
||||
|
||||
def pbUpdate(animating = false)
|
||||
|
||||
@@ -16,7 +16,8 @@ class UI::TrainerCardVisuals < UI::BaseVisuals
|
||||
# Trainer card
|
||||
add_icon_sprite(:card, 0, 0, graphics_folder + gendered_filename(_INTL("trainer_card")))
|
||||
# Overrides sprite (coordinates are the bottom middle of the sprite)
|
||||
add_icon_sprite(:player, 400, 240, GameData::TrainerType.player_front_sprite_filename($player.trainer_type))
|
||||
@sprites[:player] = IconSprite.new(400, 240, @viewport)
|
||||
@sprites[:player].setBitmapDirectly(generate_front_trainer_sprite_bitmap())
|
||||
if !@sprites[:player].bitmap
|
||||
raise _INTL("No trainer front sprite exists for the player character, expected a file at {1}.",
|
||||
"Graphics/Trainers/" + $player.trainer_type.to_s + ".png")
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Game_Temp
|
||||
attr_accessor :unimportedSprites
|
||||
attr_accessor :nb_imported_sprites
|
||||
attr_accessor :loading_screen
|
||||
attr_accessor :custom_sprites_list
|
||||
attr_accessor :base_sprites_list
|
||||
attr_accessor :forced_alt_sprites
|
||||
|
||||
alias pokemonEssentials_GameTemp_original_initialize initialize
|
||||
def initialize
|
||||
pokemonEssentials_GameTemp_original_initialize
|
||||
@custom_sprites_list ={}
|
||||
@base_sprites_list ={}
|
||||
end
|
||||
end
|
||||
@@ -199,7 +199,7 @@ class Window_PokemonMart < Window_DrawableCommand
|
||||
@stock = stock
|
||||
@adapter = adapter
|
||||
super(x, y, width, height, viewport)
|
||||
@selarrow = AnimatedBitmap.new("Graphics/Pictures/martSel")
|
||||
@selarrow = AnimatedBitmap.new("Graphics/UI/Mart/martSel")
|
||||
@baseColor = Color.new(88, 88, 80)
|
||||
@shadowColor = Color.new(168, 184, 184)
|
||||
self.windowskin = nil
|
||||
@@ -0,0 +1,50 @@
|
||||
module GameData
|
||||
class Species
|
||||
def id_number
|
||||
return (GameData::Species.keys.index(@id) || 0) + 1
|
||||
end
|
||||
|
||||
|
||||
def type1
|
||||
return @types[0]
|
||||
end
|
||||
|
||||
def type2
|
||||
return @types[-1]
|
||||
end
|
||||
|
||||
def is_fusion
|
||||
return id_number > Settings::NB_POKEMON
|
||||
end
|
||||
|
||||
def is_triple_fusion
|
||||
return id_number >= Settings::ZAPMOLCUNO_NB
|
||||
end
|
||||
def get_body_species
|
||||
return @species
|
||||
end
|
||||
|
||||
def get_head_species
|
||||
return @species
|
||||
end
|
||||
def hasType?(type)
|
||||
type = GameData::Type.get(type).id
|
||||
return self.types.include?(type)
|
||||
end
|
||||
|
||||
def self.get_species_form(species, form)
|
||||
return nil if !species || !form
|
||||
return GameData::Species.get(species)
|
||||
|
||||
validate species => [Symbol, self, String]
|
||||
validate form => Integer
|
||||
species = species.species if species.is_a?(self)
|
||||
species = species.to_sym if species.is_a?(String)
|
||||
trial = sprintf("%s_%d", species, form).to_sym
|
||||
species_form = (DATA[trial].nil?) ? species : trial
|
||||
return (DATA.has_key?(species_form)) ? DATA[species_form] : nil
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
def pbChoosePokemon(helptext,index_game_var=1, name_game_var=2, able_proc = nil, _allow_ineligible = false)
|
||||
set_help_text(_INTL(helptext))
|
||||
chosen = -1
|
||||
pbFadeOutIn do
|
||||
screen = UI::Party.new($player.party, mode: :choose_pokemon)
|
||||
screen.set_able_annotation_proc(able_proc) if able_proc
|
||||
chosen = screen.choose_pokemon
|
||||
end
|
||||
pbSet(index_game_var, chosen)
|
||||
pbSet(name_game_var, (chosen >= 0) ? $player.party[chosen].name : "")
|
||||
return chosen
|
||||
end
|
||||
225
Data/Scripts/998_InfiniteFusion/Fusion/DoublePreviewScreen.rb
Normal file
225
Data/Scripts/998_InfiniteFusion/Fusion/DoublePreviewScreen.rb
Normal file
@@ -0,0 +1,225 @@
|
||||
class DoublePreviewScreen
|
||||
SELECT_ARROW_X_LEFT= 100
|
||||
SELECT_ARROW_X_RIGHT= 350
|
||||
SELECT_ARROW_X_CANCEL= 230
|
||||
|
||||
SELECT_ARROW_Y_SELECT= 0
|
||||
SELECT_ARROW_Y_CANCEL= 210
|
||||
ARROW_GRAPHICS_PATH = "Graphics/Pictures/Fusion/selHand"
|
||||
CANCEL_BUTTON_PATH = "Graphics/Pictures/Fusion/previewScreen_Cancel"
|
||||
BACKGROUND_PATH = "Graphics/Pictures/Fusion/shadeFull_"
|
||||
|
||||
|
||||
CANCEL_BUTTON_X= 140
|
||||
CANCEL_BUTTON_Y= 260
|
||||
|
||||
def initialize(species_left, species_right)
|
||||
@species_left = species_left
|
||||
@species_right = species_right
|
||||
|
||||
@typewindows = []
|
||||
@picture1 = nil
|
||||
@picture2 = nil
|
||||
@draw_types = nil
|
||||
@draw_level = nil
|
||||
@draw_sprite_info = nil
|
||||
@selected = 0
|
||||
@last_post=0
|
||||
@sprites = {}
|
||||
|
||||
initializeBackground
|
||||
initializeSelectArrow
|
||||
initializeCancelButton
|
||||
end
|
||||
|
||||
def getBackgroundPicture
|
||||
return BACKGROUND_PATH
|
||||
end
|
||||
|
||||
|
||||
def getSelection
|
||||
selected = startSelection
|
||||
@sprites["cancel"].visible=false
|
||||
#@sprites["arrow"].visible=false
|
||||
|
||||
#todo: il y a un fuck en quelque part.... en attendant ca marche inversé ici
|
||||
return @species_left if selected == 0
|
||||
return @species_right if selected == 1
|
||||
return -1
|
||||
end
|
||||
|
||||
def startSelection
|
||||
loop do
|
||||
Graphics.update
|
||||
Input.update
|
||||
updateSelection
|
||||
if Input.trigger?(Input::USE)
|
||||
return @selected
|
||||
end
|
||||
if Input.trigger?(Input::BACK)
|
||||
return -1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def updateSelection
|
||||
currentSelected = @selected
|
||||
updateSelectionIndex
|
||||
if @selected != currentSelected
|
||||
updateSelectionGraphics
|
||||
end
|
||||
end
|
||||
|
||||
def updateSelectionIndex
|
||||
if Input.trigger?(Input::LEFT)
|
||||
@selected = 0
|
||||
elsif Input.trigger?(Input::RIGHT)
|
||||
@selected = 1
|
||||
end
|
||||
if @selected == -1
|
||||
if Input.trigger?(Input::UP)
|
||||
@selected = @last_post
|
||||
end
|
||||
else
|
||||
if Input.trigger?(Input::DOWN)
|
||||
@last_post = @selected
|
||||
@selected = -1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def updateSelectionGraphics
|
||||
if @selected == 0
|
||||
@sprites["arrow"].x = SELECT_ARROW_X_LEFT
|
||||
@sprites["arrow"].y = SELECT_ARROW_Y_SELECT
|
||||
elsif @selected == 1
|
||||
@sprites["arrow"].x = SELECT_ARROW_X_RIGHT
|
||||
@sprites["arrow"].y = SELECT_ARROW_Y_SELECT
|
||||
else
|
||||
@sprites["arrow"].x = SELECT_ARROW_X_CANCEL
|
||||
@sprites["arrow"].y = SELECT_ARROW_Y_CANCEL
|
||||
end
|
||||
pbUpdateSpriteHash(@sprites)
|
||||
end
|
||||
|
||||
def draw_window(dexNumber, level, x, y)
|
||||
body_pokemon = getBodyID(dexNumber)
|
||||
head_pokemon = getHeadID(dexNumber, body_pokemon)
|
||||
|
||||
# picturePath = getPicturePath(head_pokemon, body_pokemon)
|
||||
# bitmap = AnimatedBitmap.new(picturePath)
|
||||
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)
|
||||
previewwindow = PictureWindow.new(bitmap)
|
||||
previewwindow.x = x
|
||||
previewwindow.y = y
|
||||
previewwindow.z = 100000
|
||||
|
||||
drawFusionInformation(dexNumber, level, x)
|
||||
|
||||
if !$Trainer.seen?(dexNumber)
|
||||
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) #white
|
||||
end
|
||||
end
|
||||
return previewwindow
|
||||
end
|
||||
|
||||
|
||||
def drawFusionInformation(fusedDexNum, level, x = 0)
|
||||
viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
||||
@typewindows << drawPokemonType(fusedDexNum, viewport, x + 55, 220) if @draw_types
|
||||
drawFusionPreviewText(viewport, "Lv. " + level.to_s, x + 80, 40,) if @draw_level
|
||||
drawSpriteInfoIcons(getPokemon(fusedDexNum),viewport) if @draw_sprite_info
|
||||
end
|
||||
|
||||
|
||||
def initializeSelectArrow
|
||||
@sprites["arrow"] = IconSprite.new(0, 0, @viewport)
|
||||
@sprites["arrow"].setBitmap(ARROW_GRAPHICS_PATH)
|
||||
@sprites["arrow"].x = SELECT_ARROW_X_LEFT
|
||||
@sprites["arrow"].y = SELECT_ARROW_Y_SELECT
|
||||
@sprites["arrow"].z = 100001
|
||||
end
|
||||
|
||||
|
||||
def initializeCancelButton()
|
||||
@sprites["cancel"] = IconSprite.new(0, 0, @viewport)
|
||||
@sprites["cancel"].setBitmap(CANCEL_BUTTON_PATH)
|
||||
@sprites["cancel"].x = CANCEL_BUTTON_X
|
||||
@sprites["cancel"].y = CANCEL_BUTTON_Y
|
||||
@sprites["cancel"].z = 100000
|
||||
end
|
||||
|
||||
def initializeBackground()
|
||||
@sprites["background"] = IconSprite.new(0, 0, @viewport)
|
||||
@sprites["background"].setBitmap(getBackgroundPicture)
|
||||
@sprites["background"].x = 0
|
||||
@sprites["background"].y = 0
|
||||
@sprites["background"].z = 99999
|
||||
end
|
||||
|
||||
def drawFusionPreviewText(viewport, text, x, y)
|
||||
label_base_color = Color.new(248, 248, 248)
|
||||
label_shadow_color = Color.new(104, 104, 104)
|
||||
overlay = BitmapSprite.new(Graphics.width, Graphics.height, viewport).bitmap
|
||||
textpos = [[text, x, y, 0, label_base_color, label_shadow_color]]
|
||||
pbDrawTextPositions(overlay, textpos)
|
||||
end
|
||||
|
||||
#todo
|
||||
# Adds the icons indicating if the fusion has alt sprites and if the final evo has a custom sprite
|
||||
# also add a second icon to indidcate if the final evolution has a custom
|
||||
def drawSpriteInfoIcons(fusedPokemon, viewport)
|
||||
#pokedexUtils = PokedexUtils.new
|
||||
#hasAltSprites = pokedexUtils.pbGetAvailableAlts(fusedPokemon).size>1
|
||||
#pokedexUtils.getFinalEvolution(fusedPokemon).real_name
|
||||
#todo
|
||||
end
|
||||
|
||||
def dispose
|
||||
@picture1.dispose
|
||||
@picture2.dispose
|
||||
for typeWindow in @typewindows
|
||||
typeWindow.dispose
|
||||
end
|
||||
pbDisposeSpriteHash(@sprites)
|
||||
|
||||
end
|
||||
|
||||
def drawPokemonType(pokemon_id, viewport, x_pos = 192, y_pos = 264)
|
||||
width = 66
|
||||
viewport.z = 1000001
|
||||
overlay = BitmapSprite.new(Graphics.width, Graphics.height, viewport).bitmap
|
||||
|
||||
pokemon = GameData::Species.get(pokemon_id)
|
||||
typebitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/types"))
|
||||
|
||||
echoln pokemon
|
||||
echoln pokemon.types
|
||||
echoln pokemon.id
|
||||
|
||||
type1_number = GameData::Type.get(pokemon.type1).icon_position
|
||||
type2_number = GameData::Type.get(pokemon.type2).icon_position if pokemon.type2
|
||||
|
||||
type1rect = Rect.new(0, type1_number * 28, 64, 28)
|
||||
type2rect = Rect.new(0, type2_number * 28, 64, 28)
|
||||
if pokemon.type1 == pokemon.type2
|
||||
overlay.blt(x_pos + (width / 2), y_pos, typebitmap.bitmap, type1rect)
|
||||
else
|
||||
overlay.blt(x_pos, y_pos, typebitmap.bitmap, type1rect)
|
||||
overlay.blt(x_pos + width, y_pos, typebitmap.bitmap, type2rect)
|
||||
end
|
||||
return viewport
|
||||
end
|
||||
|
||||
end
|
||||
@@ -9,28 +9,19 @@ end
|
||||
|
||||
# don't remember why there's two Supersplicers arguments.... probably a mistake
|
||||
def pbDNASplicing(pokemon, scene, item = :DNASPLICERS)
|
||||
echoln pokemon
|
||||
echoln scene
|
||||
echoln item
|
||||
|
||||
|
||||
is_supersplicer = isSuperSplicersMechanics(item)
|
||||
|
||||
playingBGM = $game_system.getPlayingBGM
|
||||
dexNumber = pokemon.species_data.id_number
|
||||
if (pokemon.species_data.id_number <= NB_POKEMON)
|
||||
if pokemon.fused != nil
|
||||
if $player.party.length >= 6
|
||||
scene.pbDisplay(_INTL("Your party is full! You can't unfuse {1}.", pokemon.name))
|
||||
return false
|
||||
else
|
||||
$player.party[$player.party.length] = pokemon.fused
|
||||
pokemon.fused = nil
|
||||
pokemon.form = 0
|
||||
scene.pbHardRefresh
|
||||
scene.pbDisplay(_INTL("{1} changed Forme!", pokemon.name))
|
||||
return true
|
||||
end
|
||||
else
|
||||
if (pokemon.species_data.id_number <= Settings::NB_POKEMON)
|
||||
chosen = scene.pbChoosePokemon(_INTL("Fuse with which Pokémon?"))
|
||||
if chosen >= 0
|
||||
poke2 = $player.party[chosen]
|
||||
if (poke2.species_data.id_number <= NB_POKEMON) && poke2 != pokemon
|
||||
if (poke2.species_data.id_number <= Settings::NB_POKEMON) && poke2 != pokemon
|
||||
# check if fainted
|
||||
|
||||
if pokemon.egg? || poke2.egg?
|
||||
@@ -63,7 +54,7 @@ def pbDNASplicing(pokemon, scene, item = :DNASPLICERS)
|
||||
|
||||
if (Kernel.pbConfirmMessage(_INTL("Fuse {1} and {2}?", selectedHead.name, selectedBase.name)))
|
||||
pbFuse(selectedHead, selectedBase, item)
|
||||
pbRemovePokemonAt(chosen)
|
||||
$Trainer.remove_pokemon_at_index(chosen)
|
||||
scene.pbHardRefresh
|
||||
pbBGMPlay(playingBGM)
|
||||
return true
|
||||
@@ -79,7 +70,7 @@ def pbDNASplicing(pokemon, scene, item = :DNASPLICERS)
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
else
|
||||
# UNFUSE
|
||||
return true if pbUnfuse(pokemon, scene, is_supersplicer)
|
||||
@@ -96,34 +87,10 @@ def selectFusion(pokemon, poke2, supersplicers = false)
|
||||
return selectedHead
|
||||
end
|
||||
|
||||
# firstOptionSelected= selectedHead == pokemon
|
||||
# selectedBody = selectedHead == pokemon ? poke2 : pokemon
|
||||
# newid = (selectedBody.species_data.id_number) * NB_POKEMON + selectedHead.species_data.id_number
|
||||
|
||||
# def pbFuse(pokemon, poke2, supersplicers = false)
|
||||
# newid = (pokemon.species_data.id_number) * NB_POKEMON + poke2.species_data.id_number
|
||||
# previewwindow = FusionPreviewScreen.new(pokemon, poke2)#PictureWindow.new(picturePath)
|
||||
#
|
||||
# if (Kernel.pbConfirmMessage(_INTL("Fuse the two Pokémon?", newid)))
|
||||
# previewwindow.dispose
|
||||
# fus = PokemonFusionScene.new
|
||||
# if (fus.pbStartScreen(pokemon, poke2, newid))
|
||||
# returnItemsToBag(pokemon, poke2)
|
||||
# fus.pbFusionScreen(false, supersplicers)
|
||||
# $game_variables[126] += 1 #fuse counter
|
||||
# fus.pbEndScreen
|
||||
# return true
|
||||
# end
|
||||
# else
|
||||
# previewwindow.dispose
|
||||
# return false
|
||||
# end
|
||||
# end
|
||||
|
||||
def pbFuse(pokemon_body, pokemon_head, splicer_item)
|
||||
use_supersplicers_mechanics = isSuperSplicersMechanics(splicer_item)
|
||||
|
||||
newid = (pokemon_body.species_data.id_number) * NB_POKEMON + pokemon_head.species_data.id_number
|
||||
newid = (pokemon_body.species_data.id_number) * Settings::NB_POKEMON + pokemon_head.species_data.id_number
|
||||
fus = PokemonFusionScene.new
|
||||
|
||||
if (fus.pbStartScreen(pokemon_body, pokemon_head, newid, splicer_item))
|
||||
@@ -137,7 +104,7 @@ end
|
||||
|
||||
# Todo: refactor this, holy shit this is a mess
|
||||
def pbUnfuse(pokemon, scene, supersplicers, pcPosition = nil)
|
||||
if pokemon.species_data.id_number > (NB_POKEMON * NB_POKEMON) + NB_POKEMON # triple fusion
|
||||
if pokemon.species_data.id_number > (Settings::NB_POKEMON * Settings::NB_POKEMON) + Settings::NB_POKEMON # triple fusion
|
||||
scene.pbDisplay(_INTL("{1} cannot be unfused.", pokemon.name))
|
||||
return false
|
||||
end
|
||||
|
||||
@@ -1,403 +1,421 @@
|
||||
# module GameData
|
||||
# class FusedSpecies < GameData::Species
|
||||
# attr_reader :growth_rate
|
||||
# attr_reader :body_pokemon
|
||||
# attr_reader :head_pokemon
|
||||
#
|
||||
# def initialize(id)
|
||||
# if id.is_a?(Integer)
|
||||
# body_id = getBodyID(id)
|
||||
# head_id = getHeadID(id, body_id)
|
||||
# pokemon_id = getFusedPokemonIdFromDexNum(body_id, head_id)
|
||||
# return GameData::FusedSpecies.new(pokemon_id)
|
||||
# end
|
||||
# head_id = get_head_number_from_symbol(id)
|
||||
# body_id = get_body_number_from_symbol(id)
|
||||
#
|
||||
# @body_pokemon = GameData::Species.get(body_id)
|
||||
# @head_pokemon = GameData::Species.get(head_id)
|
||||
#
|
||||
# @id = id
|
||||
# @id_number = calculate_dex_number()
|
||||
# @species = @id
|
||||
# @form = 0
|
||||
# @real_name = calculate_name()
|
||||
# @real_form_name = nil
|
||||
#
|
||||
# @type1 = calculate_type1()
|
||||
# @type2 = calculate_type2()
|
||||
#
|
||||
# #Stats
|
||||
# @base_stats = calculate_base_stats()
|
||||
# @evs = calculate_evs()
|
||||
# adjust_stats_with_evs()
|
||||
#
|
||||
# @base_exp = calculate_base_exp()
|
||||
# @growth_rate = calculate_growth_rate()
|
||||
# @gender_ratio = calculate_gender() #todo
|
||||
# @catch_rate = calculate_catch_rate()
|
||||
# @happiness = calculate_base_happiness()
|
||||
#
|
||||
# #Moves
|
||||
# @moves = calculate_moveset()
|
||||
# @tutor_moves = calculate_tutor_moves() # hash[:tutor_moves] || []
|
||||
# @egg_moves = calculate_egg_moves() # hash[:egg_moves] || []
|
||||
#
|
||||
# #Abilities
|
||||
# @abilities = calculate_abilities() # hash[:abilities] || []
|
||||
# @hidden_abilities = calculate_hidden_abilities() # hash[:hidden_abilities] || []
|
||||
#
|
||||
# #wild held items
|
||||
# @wild_item_common = get_wild_item(@head_pokemon.wild_item_common, @body_pokemon.wild_item_common) # hash[:wild_item_common]
|
||||
# @wild_item_uncommon = get_wild_item(@head_pokemon.wild_item_uncommon, @body_pokemon.wild_item_uncommon) # hash[:wild_item_uncommon]
|
||||
# @wild_item_rare = get_wild_item(@head_pokemon.wild_item_rare, @body_pokemon.wild_item_rare) # hash[:wild_item_rare]
|
||||
#
|
||||
# @evolutions = calculate_evolutions() # hash[:evolutions] || []
|
||||
#
|
||||
# #breeding
|
||||
# @egg_groups = [:Undiscovered] #calculate_egg_groups() # hash[:egg_groups] || [:Undiscovered]
|
||||
# @hatch_steps = calculate_hatch_steps() # hash[:hatch_steps] || 1
|
||||
# @incense = nil #hash[:incense]
|
||||
#
|
||||
# #pokedex
|
||||
# @pokedex_form = @form #ignored
|
||||
# @real_category = calculate_category()
|
||||
# @real_pokedex_entry = calculate_dex_entry()
|
||||
# @height = average_values(@head_pokemon.height, @body_pokemon.height)
|
||||
# @weight = average_values(@head_pokemon.weight, @body_pokemon.weight)
|
||||
# @color = @head_pokemon.color
|
||||
# @shape = @body_pokemon.shape
|
||||
#
|
||||
# #sprite positioning
|
||||
# @back_sprite_x = @body_pokemon.back_sprite_x
|
||||
# @back_sprite_y = @body_pokemon.back_sprite_y
|
||||
# @front_sprite_x = @body_pokemon.front_sprite_x
|
||||
# @front_sprite_y = @body_pokemon.front_sprite_y
|
||||
# @front_sprite_altitude = @body_pokemon.front_sprite_altitude
|
||||
# @shadow_x = @body_pokemon.shadow_x
|
||||
# @shadow_size = @body_pokemon.shadow_size
|
||||
#
|
||||
# # #unused attributes from Species class
|
||||
# #
|
||||
# # @shape = :Head
|
||||
# # @habitat = :None
|
||||
# # @generation = 0
|
||||
# # @mega_stone = nil
|
||||
# # @mega_move = nil
|
||||
# # @unmega_form = 0
|
||||
# # @mega_message = 0
|
||||
# end
|
||||
#
|
||||
# def get_body_number_from_symbol(id)
|
||||
# return id.to_s.match(/\d+/)[0].to_i
|
||||
# end
|
||||
#
|
||||
# def get_head_number_from_symbol(id)
|
||||
# return id.to_s.match(/(?<=H)\d+/)[0].to_i
|
||||
# end
|
||||
#
|
||||
# def get_body_species
|
||||
# return @body_pokemon.id_number
|
||||
# end
|
||||
#
|
||||
# def get_head_species
|
||||
# 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
|
||||
# @evs[s.id] = 0 if !@evs[s.id] || @evs[s.id] < 0
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# #FUSION CALCULATIONS
|
||||
# def calculate_dex_number()
|
||||
# return (@body_pokemon.id_number * NB_POKEMON) + @head_pokemon.id_number
|
||||
# end
|
||||
#
|
||||
# def calculate_type1()
|
||||
# return @head_pokemon.type2 if @head_pokemon.type1 == :NORMAL && @head_pokemon.type2 == :FLYING
|
||||
# return @head_pokemon.type1
|
||||
# end
|
||||
#
|
||||
# def calculate_type2()
|
||||
# return @body_pokemon.type1 if @body_pokemon.type2 == @type1
|
||||
# return @body_pokemon.type2
|
||||
# end
|
||||
#
|
||||
# def calculate_base_stats()
|
||||
# head_stats = @head_pokemon.base_stats
|
||||
# body_stats = @body_pokemon.base_stats
|
||||
#
|
||||
# fused_stats = {}
|
||||
#
|
||||
# #Head dominant stats
|
||||
# fused_stats[:HP] = calculate_fused_stats(head_stats[:HP], body_stats[:HP])
|
||||
# fused_stats[:SPECIAL_DEFENSE] = calculate_fused_stats(head_stats[:SPECIAL_DEFENSE], body_stats[:SPECIAL_DEFENSE])
|
||||
# fused_stats[:SPECIAL_ATTACK] = calculate_fused_stats(head_stats[:SPECIAL_ATTACK], body_stats[:SPECIAL_ATTACK])
|
||||
#
|
||||
# #Body dominant stats
|
||||
# fused_stats[:ATTACK] = calculate_fused_stats(body_stats[:ATTACK], head_stats[:ATTACK])
|
||||
# fused_stats[:DEFENSE] = calculate_fused_stats(body_stats[:DEFENSE], head_stats[:DEFENSE])
|
||||
# fused_stats[:SPEED] = calculate_fused_stats(body_stats[:SPEED], head_stats[:SPEED])
|
||||
#
|
||||
# return fused_stats
|
||||
# end
|
||||
#
|
||||
# def calculate_base_exp()
|
||||
# head_exp = @head_pokemon.base_exp
|
||||
# body_exp = @body_pokemon.base_exp
|
||||
# return average_values(head_exp, body_exp)
|
||||
# end
|
||||
#
|
||||
# def calculate_catch_rate
|
||||
# return get_lowest_value(@body_pokemon.catch_rate, @head_pokemon.catch_rate)
|
||||
# end
|
||||
#
|
||||
# def calculate_base_happiness
|
||||
# return @head_pokemon.happiness
|
||||
# end
|
||||
#
|
||||
# def calculate_moveset
|
||||
# return combine_arrays(@body_pokemon.moves, @head_pokemon.moves)
|
||||
# end
|
||||
#
|
||||
# def calculate_egg_moves
|
||||
# return combine_arrays(@body_pokemon.egg_moves, @head_pokemon.egg_moves)
|
||||
# end
|
||||
#
|
||||
# def calculate_tutor_moves
|
||||
# return combine_arrays(@body_pokemon.tutor_moves, @head_pokemon.tutor_moves)
|
||||
# end
|
||||
#
|
||||
# def get_wild_item(body_item, head_item)
|
||||
# rand_num = rand(2)
|
||||
# if rand_num == 0
|
||||
# return body_item
|
||||
# else
|
||||
# return head_item
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# def calculate_abilities()
|
||||
# abilities_hash = []
|
||||
#
|
||||
# ability1 = @body_pokemon.abilities[0]
|
||||
# ability2 = @head_pokemon.abilities[0]
|
||||
# abilities_hash << ability1
|
||||
# abilities_hash << ability2
|
||||
# return abilities_hash
|
||||
# end
|
||||
#
|
||||
# # def calculate_abilities(pokemon1, pokemon2)
|
||||
# # abilities_hash = []
|
||||
# #
|
||||
# # ability1 = pokemon1.abilities[0]
|
||||
# # ability2 = pokemon2.abilities[1]
|
||||
# # if !ability2
|
||||
# # ability2 = pokemon2.abilities[0]
|
||||
# # end
|
||||
# # abilities_hash << ability1
|
||||
# # abilities_hash << ability2
|
||||
# # return abilities_hash
|
||||
# # end
|
||||
#
|
||||
# def calculate_hidden_abilities()
|
||||
# abilities_hash = []
|
||||
#
|
||||
# #First two spots are the other abilities of the two pokemon
|
||||
# ability1 = @body_pokemon.abilities[1]
|
||||
# ability2 = @head_pokemon.abilities[1]
|
||||
# ability1 = @body_pokemon.abilities[0] if !ability1
|
||||
# ability2 = @head_pokemon.abilities[0] if !ability2
|
||||
#
|
||||
# abilities_hash << ability1
|
||||
# abilities_hash << ability2
|
||||
#
|
||||
# #add the hidden ability for the two base pokemon
|
||||
# hiddenAbility1 = @body_pokemon.hidden_abilities[0]
|
||||
# hiddenAbility1 = ability1 if !hiddenAbility1
|
||||
#
|
||||
# hiddenAbility2 = @head_pokemon.hidden_abilities[0]
|
||||
# hiddenAbility2 = ability2 if !hiddenAbility2
|
||||
#
|
||||
# abilities_hash << hiddenAbility1
|
||||
# abilities_hash << hiddenAbility2
|
||||
# return abilities_hash
|
||||
# end
|
||||
#
|
||||
# def calculate_name()
|
||||
# body_nat_dex = GameData::NAT_DEX_MAPPING[@body_pokemon.id_number] ? GameData::NAT_DEX_MAPPING[@body_pokemon.id_number] : @body_pokemon.id_number
|
||||
# head_nat_dex = GameData::NAT_DEX_MAPPING[@head_pokemon.id_number] ? GameData::NAT_DEX_MAPPING[@head_pokemon.id_number] : @head_pokemon.id_number
|
||||
# begin
|
||||
# prefix = GameData::SPLIT_NAMES[head_nat_dex][0]
|
||||
# suffix = GameData::SPLIT_NAMES[body_nat_dex][1]
|
||||
# if prefix[-1] == suffix[0]
|
||||
# prefix = prefix[0..-2]
|
||||
# end
|
||||
# suffix = suffix.capitalize if prefix.end_with?(" ")
|
||||
# return prefix + suffix
|
||||
#
|
||||
# rescue
|
||||
# print("species with error: " + @species.to_s)
|
||||
# end
|
||||
#
|
||||
# end
|
||||
#
|
||||
# def calculate_evolutions()
|
||||
# body_evolutions = @body_pokemon.evolutions
|
||||
# head_evolutions = @head_pokemon.evolutions
|
||||
#
|
||||
# fused_evolutions = []
|
||||
#
|
||||
# #body
|
||||
# for evolution in body_evolutions
|
||||
# evolutionSpecies = evolution[0]
|
||||
# evolutionSpecies_dex = GameData::Species.get(evolutionSpecies).id_number
|
||||
# fused_species = _INTL("B{1}H{2}", evolutionSpecies_dex, @head_pokemon.id_number)
|
||||
# fused_evolutions << build_evolution_array(evolution, fused_species)
|
||||
# end
|
||||
#
|
||||
# #head
|
||||
# for evolution in head_evolutions
|
||||
# evolutionSpecies = evolution[0]
|
||||
# evolutionSpecies_dex = GameData::Species.get(evolutionSpecies).id_number
|
||||
# fused_species = _INTL("B{1}H{2}", @body_pokemon.id_number, evolutionSpecies_dex)
|
||||
# fused_evolutions << build_evolution_array(evolution, fused_species)
|
||||
# end
|
||||
#
|
||||
# return fused_evolutions
|
||||
# end
|
||||
#
|
||||
# #Change the evolution species depending if head & body and keep the rest of the data the same
|
||||
# def build_evolution_array(evolution_data, new_species)
|
||||
# fused_evolution_array = []
|
||||
# fused_evolution_array << new_species.to_sym
|
||||
#
|
||||
# #add the rest
|
||||
# for data in evolution_data
|
||||
# next if evolution_data.index(data) == 0
|
||||
# fused_evolution_array << data
|
||||
# end
|
||||
# return fused_evolution_array
|
||||
# end
|
||||
#
|
||||
# def calculate_dex_entry
|
||||
# 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)
|
||||
#
|
||||
# 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
|
||||
# return :Undiscovered if body_egg_groups.include?(:Undiscovered) || head_egg_groups.include?(:Undiscovered)
|
||||
# return combine_arrays(body_egg_groups, head_egg_groups)
|
||||
# end
|
||||
#
|
||||
# def calculate_hatch_steps
|
||||
# return average_values(@head_pokemon.hatch_steps, @body_pokemon.hatch_steps)
|
||||
# end
|
||||
#
|
||||
# def calculate_evs()
|
||||
# return average_map_values(@body_pokemon.evs, @head_pokemon.evs)
|
||||
# end
|
||||
#
|
||||
# def calculate_category
|
||||
# return split_and_combine_text(@body_pokemon.category, @head_pokemon.category, " ")
|
||||
# end
|
||||
#
|
||||
# def calculate_growth_rate
|
||||
# growth_rate_priority = [:Fast, :Medium, :Parabolic, :Fluctuating, :Erratic, :Slow] #todo rearrange order for balance?
|
||||
# body_growth_rate = @body_pokemon.growth_rate
|
||||
# head_growth_rate = @head_pokemon.growth_rate
|
||||
# base_growth_rates = [body_growth_rate, head_growth_rate]
|
||||
# for rate in growth_rate_priority
|
||||
# return rate if base_growth_rates.include?(rate)
|
||||
# end
|
||||
# return :Medium
|
||||
# end
|
||||
#
|
||||
# #TODO
|
||||
# # ################## UNFINISHED ####################
|
||||
# def calculate_gender
|
||||
# return :Genderless
|
||||
# end
|
||||
#
|
||||
# ############################# UTIL METHODS ###############################
|
||||
#
|
||||
# #Takes 2 strings, splits and combines them using the beginning of the first one and the end of the second one
|
||||
# # (for example for pokedex entries)
|
||||
# def split_and_combine_text(beginingText_full, endText_full, separator)
|
||||
# beginingText_split = beginingText_full.split(separator, 2)
|
||||
# endText_split = endText_full.split(separator, 2)
|
||||
#
|
||||
# beginningText = beginingText_split[0]
|
||||
# endText = endText_split[1] && endText_split[1] != "" ? endText_split[1] : endText_split[0]
|
||||
# return beginningText + separator + " " + endText
|
||||
# end
|
||||
#
|
||||
# def calculate_fused_stats(dominantStat, otherStat)
|
||||
# return ((2 * dominantStat) / 3) + (otherStat / 3).floor
|
||||
# end
|
||||
#
|
||||
# def average_values(value1, value2)
|
||||
# return ((value1 + value2) / 2).floor
|
||||
# end
|
||||
#
|
||||
# def average_map_values(map1, map2)
|
||||
# averaged_map = map1.merge(map2) do |key, value1, value2|
|
||||
# ((value1 + value2) / 2.0).floor
|
||||
# end
|
||||
# return averaged_map
|
||||
# end
|
||||
#
|
||||
# def get_highest_value(value1, value2)
|
||||
# return value1 > value2 ? value1 : value2
|
||||
# end
|
||||
#
|
||||
# def get_lowest_value(value1, value2)
|
||||
# return value1 < value2 ? value1 : value2
|
||||
# end
|
||||
#
|
||||
# def combine_arrays(array1, array2)
|
||||
# return array1 + array2
|
||||
# end
|
||||
#
|
||||
# end
|
||||
# end
|
||||
module GameData
|
||||
class FusedSpecies < GameData::Species
|
||||
attr_reader :growth_rate
|
||||
attr_reader :body_pokemon
|
||||
attr_reader :head_pokemon
|
||||
|
||||
def initialize(id)
|
||||
if id.is_a?(Integer)
|
||||
body_id = getBodyID(id)
|
||||
head_id = getHeadID(id, body_id)
|
||||
pokemon_id = getFusedPokemonIdFromDexNum(body_id, head_id)
|
||||
return GameData::FusedSpecies.new(pokemon_id)
|
||||
end
|
||||
head_id = get_head_number_from_symbol(id)
|
||||
body_id = get_body_number_from_symbol(id)
|
||||
|
||||
@body_pokemon = GameData::Species.get(body_id)
|
||||
@head_pokemon = GameData::Species.get(head_id)
|
||||
|
||||
@id = id
|
||||
@id_number = calculate_dex_number()
|
||||
@species = @id
|
||||
@form = 0
|
||||
@real_name = calculate_name()
|
||||
@real_form_name = nil
|
||||
|
||||
@type1 = calculate_type1()
|
||||
@type2 = calculate_type2()
|
||||
@types = [@type1, @type2]
|
||||
#Stats
|
||||
@base_stats = calculate_base_stats()
|
||||
@evs = calculate_evs()
|
||||
adjust_stats_with_evs()
|
||||
|
||||
@base_exp = calculate_base_exp()
|
||||
@growth_rate = calculate_growth_rate()
|
||||
@gender_ratio = calculate_gender() #todo
|
||||
@catch_rate = calculate_catch_rate()
|
||||
@happiness = calculate_base_happiness()
|
||||
|
||||
#Moves
|
||||
@moves = calculate_moveset()
|
||||
@tutor_moves = calculate_tutor_moves() # hash[:tutor_moves] || []
|
||||
@egg_moves = calculate_egg_moves() # hash[:egg_moves] || []
|
||||
|
||||
#Abilities
|
||||
@abilities = calculate_abilities() # hash[:abilities] || []
|
||||
@hidden_abilities = calculate_hidden_abilities() # hash[:hidden_abilities] || []
|
||||
|
||||
#wild held items
|
||||
@wild_item_common = get_wild_item(@head_pokemon.wild_item_common, @body_pokemon.wild_item_common) # hash[:wild_item_common]
|
||||
@wild_item_uncommon = get_wild_item(@head_pokemon.wild_item_uncommon, @body_pokemon.wild_item_uncommon) # hash[:wild_item_uncommon]
|
||||
@wild_item_rare = get_wild_item(@head_pokemon.wild_item_rare, @body_pokemon.wild_item_rare) # hash[:wild_item_rare]
|
||||
|
||||
@evolutions = calculate_evolutions() # hash[:evolutions] || []
|
||||
|
||||
#breeding
|
||||
@egg_groups = [:Undiscovered] #calculate_egg_groups() # hash[:egg_groups] || [:Undiscovered]
|
||||
@hatch_steps = calculate_hatch_steps() # hash[:hatch_steps] || 1
|
||||
@incense = nil #hash[:incense]
|
||||
|
||||
#pokedex
|
||||
@pokedex_form = @form #ignored
|
||||
@real_category = calculate_category()
|
||||
@real_pokedex_entry = calculate_dex_entry()
|
||||
@height = average_values(@head_pokemon.height, @body_pokemon.height)
|
||||
@weight = average_values(@head_pokemon.weight, @body_pokemon.weight)
|
||||
@color = @head_pokemon.color
|
||||
@shape = @body_pokemon.shape
|
||||
|
||||
#sprite positioning
|
||||
#todo: this was moved to pokemon_metrics
|
||||
# read the data for the body pokemon's species whenever it tries to position a fusedSpecies
|
||||
#
|
||||
# @back_sprite_x = @body_pokemon.back_sprite_x
|
||||
# @back_sprite_y = @body_pokemon.back_sprite_y
|
||||
# @front_sprite_x = @body_pokemon.front_sprite_x
|
||||
# @front_sprite_y = @body_pokemon.front_sprite_y
|
||||
# @front_sprite_altitude = @body_pokemon.front_sprite_altitude
|
||||
# @shadow_x = @body_pokemon.shadow_x
|
||||
# @shadow_size = @body_pokemon.shadow_size
|
||||
|
||||
# #unused attributes from Species class
|
||||
#
|
||||
# @shape = :Head
|
||||
# @habitat = :None
|
||||
# @generation = 0
|
||||
# @mega_stone = nil
|
||||
# @mega_move = nil
|
||||
# @unmega_form = 0
|
||||
# @mega_message = 0
|
||||
end
|
||||
|
||||
def type1
|
||||
return @type1
|
||||
end
|
||||
|
||||
def type2
|
||||
return @type2
|
||||
end
|
||||
|
||||
def apply_metrics_to_sprite(sprite, index, shadow = false)
|
||||
body_species = get_body_species()
|
||||
metrics_data = GameData::SpeciesMetrics.get_species_form(body_species, 0)
|
||||
metrics_data.apply_metrics_to_sprite(sprite, index, shadow)
|
||||
end
|
||||
|
||||
|
||||
def get_body_number_from_symbol(id)
|
||||
return id.to_s.match(/\d+/)[0].to_i
|
||||
end
|
||||
|
||||
def get_head_number_from_symbol(id)
|
||||
return id.to_s.match(/(?<=H)\d+/)[0].to_i
|
||||
end
|
||||
|
||||
def get_body_species
|
||||
return @body_pokemon.id_number
|
||||
end
|
||||
|
||||
def get_head_species
|
||||
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
|
||||
@evs[s.id] = 0 if !@evs[s.id] || @evs[s.id] < 0
|
||||
end
|
||||
end
|
||||
|
||||
#FUSION CALCULATIONS
|
||||
def calculate_dex_number()
|
||||
return (@body_pokemon.id_number * Settings::NB_POKEMON) + @head_pokemon.id_number
|
||||
end
|
||||
|
||||
def calculate_type1()
|
||||
return @head_pokemon.type2 if @head_pokemon.type1 == :NORMAL && @head_pokemon.type2 == :FLYING
|
||||
return @head_pokemon.type1
|
||||
end
|
||||
|
||||
def calculate_type2()
|
||||
return @body_pokemon.type1 if @body_pokemon.type2 == @type1
|
||||
return @body_pokemon.type2
|
||||
end
|
||||
|
||||
def calculate_base_stats()
|
||||
head_stats = @head_pokemon.base_stats
|
||||
body_stats = @body_pokemon.base_stats
|
||||
|
||||
fused_stats = {}
|
||||
|
||||
#Head dominant stats
|
||||
fused_stats[:HP] = calculate_fused_stats(head_stats[:HP], body_stats[:HP])
|
||||
fused_stats[:SPECIAL_DEFENSE] = calculate_fused_stats(head_stats[:SPECIAL_DEFENSE], body_stats[:SPECIAL_DEFENSE])
|
||||
fused_stats[:SPECIAL_ATTACK] = calculate_fused_stats(head_stats[:SPECIAL_ATTACK], body_stats[:SPECIAL_ATTACK])
|
||||
|
||||
#Body dominant stats
|
||||
fused_stats[:ATTACK] = calculate_fused_stats(body_stats[:ATTACK], head_stats[:ATTACK])
|
||||
fused_stats[:DEFENSE] = calculate_fused_stats(body_stats[:DEFENSE], head_stats[:DEFENSE])
|
||||
fused_stats[:SPEED] = calculate_fused_stats(body_stats[:SPEED], head_stats[:SPEED])
|
||||
|
||||
return fused_stats
|
||||
end
|
||||
|
||||
def calculate_base_exp()
|
||||
head_exp = @head_pokemon.base_exp
|
||||
body_exp = @body_pokemon.base_exp
|
||||
return average_values(head_exp, body_exp)
|
||||
end
|
||||
|
||||
def calculate_catch_rate
|
||||
return get_lowest_value(@body_pokemon.catch_rate, @head_pokemon.catch_rate)
|
||||
end
|
||||
|
||||
def calculate_base_happiness
|
||||
return @head_pokemon.happiness
|
||||
end
|
||||
|
||||
def calculate_moveset
|
||||
return combine_arrays(@body_pokemon.moves, @head_pokemon.moves)
|
||||
end
|
||||
|
||||
def calculate_egg_moves
|
||||
return combine_arrays(@body_pokemon.egg_moves, @head_pokemon.egg_moves)
|
||||
end
|
||||
|
||||
def calculate_tutor_moves
|
||||
return combine_arrays(@body_pokemon.tutor_moves, @head_pokemon.tutor_moves)
|
||||
end
|
||||
|
||||
def get_wild_item(body_item, head_item)
|
||||
rand_num = rand(2)
|
||||
if rand_num == 0
|
||||
return body_item
|
||||
else
|
||||
return head_item
|
||||
end
|
||||
end
|
||||
|
||||
def calculate_abilities()
|
||||
abilities_hash = []
|
||||
|
||||
ability1 = @body_pokemon.abilities[0]
|
||||
ability2 = @head_pokemon.abilities[0]
|
||||
abilities_hash << ability1
|
||||
abilities_hash << ability2
|
||||
return abilities_hash
|
||||
end
|
||||
|
||||
# def calculate_abilities(pokemon1, pokemon2)
|
||||
# abilities_hash = []
|
||||
#
|
||||
# ability1 = pokemon1.abilities[0]
|
||||
# ability2 = pokemon2.abilities[1]
|
||||
# if !ability2
|
||||
# ability2 = pokemon2.abilities[0]
|
||||
# end
|
||||
# abilities_hash << ability1
|
||||
# abilities_hash << ability2
|
||||
# return abilities_hash
|
||||
# end
|
||||
|
||||
def calculate_hidden_abilities()
|
||||
abilities_hash = []
|
||||
|
||||
#First two spots are the other abilities of the two pokemon
|
||||
ability1 = @body_pokemon.abilities[1]
|
||||
ability2 = @head_pokemon.abilities[1]
|
||||
ability1 = @body_pokemon.abilities[0] if !ability1
|
||||
ability2 = @head_pokemon.abilities[0] if !ability2
|
||||
|
||||
abilities_hash << ability1
|
||||
abilities_hash << ability2
|
||||
|
||||
#add the hidden ability for the two base pokemon
|
||||
hiddenAbility1 = @body_pokemon.hidden_abilities[0]
|
||||
hiddenAbility1 = ability1 if !hiddenAbility1
|
||||
|
||||
hiddenAbility2 = @head_pokemon.hidden_abilities[0]
|
||||
hiddenAbility2 = ability2 if !hiddenAbility2
|
||||
|
||||
abilities_hash << hiddenAbility1
|
||||
abilities_hash << hiddenAbility2
|
||||
return abilities_hash
|
||||
end
|
||||
|
||||
def calculate_name()
|
||||
body_nat_dex = GameData::NAT_DEX_MAPPING[@body_pokemon.id_number] ? GameData::NAT_DEX_MAPPING[@body_pokemon.id_number] : @body_pokemon.id_number
|
||||
head_nat_dex = GameData::NAT_DEX_MAPPING[@head_pokemon.id_number] ? GameData::NAT_DEX_MAPPING[@head_pokemon.id_number] : @head_pokemon.id_number
|
||||
begin
|
||||
prefix = GameData::SPLIT_NAMES[head_nat_dex][0]
|
||||
suffix = GameData::SPLIT_NAMES[body_nat_dex][1]
|
||||
if prefix[-1] == suffix[0]
|
||||
prefix = prefix[0..-2]
|
||||
end
|
||||
suffix = suffix.capitalize if prefix.end_with?(" ")
|
||||
return prefix + suffix
|
||||
|
||||
rescue
|
||||
print("species with error: " + @species.to_s)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def calculate_evolutions()
|
||||
body_evolutions = @body_pokemon.evolutions
|
||||
head_evolutions = @head_pokemon.evolutions
|
||||
|
||||
fused_evolutions = []
|
||||
|
||||
#body
|
||||
for evolution in body_evolutions
|
||||
evolutionSpecies = evolution[0]
|
||||
evolutionSpecies_dex = GameData::Species.get(evolutionSpecies).id_number
|
||||
fused_species = _INTL("B{1}H{2}", evolutionSpecies_dex, @head_pokemon.id_number)
|
||||
fused_evolutions << build_evolution_array(evolution, fused_species)
|
||||
end
|
||||
|
||||
#head
|
||||
for evolution in head_evolutions
|
||||
evolutionSpecies = evolution[0]
|
||||
evolutionSpecies_dex = GameData::Species.get(evolutionSpecies).id_number
|
||||
fused_species = _INTL("B{1}H{2}", @body_pokemon.id_number, evolutionSpecies_dex)
|
||||
fused_evolutions << build_evolution_array(evolution, fused_species)
|
||||
end
|
||||
|
||||
return fused_evolutions
|
||||
end
|
||||
|
||||
#Change the evolution species depending if head & body and keep the rest of the data the same
|
||||
def build_evolution_array(evolution_data, new_species)
|
||||
fused_evolution_array = []
|
||||
fused_evolution_array << new_species.to_sym
|
||||
|
||||
#add the rest
|
||||
for data in evolution_data
|
||||
next if evolution_data.index(data) == 0
|
||||
fused_evolution_array << data
|
||||
end
|
||||
return fused_evolution_array
|
||||
end
|
||||
|
||||
def calculate_dex_entry
|
||||
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)
|
||||
|
||||
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
|
||||
return :Undiscovered if body_egg_groups.include?(:Undiscovered) || head_egg_groups.include?(:Undiscovered)
|
||||
return combine_arrays(body_egg_groups, head_egg_groups)
|
||||
end
|
||||
|
||||
def calculate_hatch_steps
|
||||
return average_values(@head_pokemon.hatch_steps, @body_pokemon.hatch_steps)
|
||||
end
|
||||
|
||||
def calculate_evs()
|
||||
return average_map_values(@body_pokemon.evs, @head_pokemon.evs)
|
||||
end
|
||||
|
||||
def calculate_category
|
||||
return split_and_combine_text(@body_pokemon.category, @head_pokemon.category, " ")
|
||||
end
|
||||
|
||||
def calculate_growth_rate
|
||||
growth_rate_priority = [:Fast, :Medium, :Parabolic, :Fluctuating, :Erratic, :Slow] #todo rearrange order for balance?
|
||||
body_growth_rate = @body_pokemon.growth_rate
|
||||
head_growth_rate = @head_pokemon.growth_rate
|
||||
base_growth_rates = [body_growth_rate, head_growth_rate]
|
||||
for rate in growth_rate_priority
|
||||
return rate if base_growth_rates.include?(rate)
|
||||
end
|
||||
return :Medium
|
||||
end
|
||||
|
||||
#TODO
|
||||
# ################## UNFINISHED ####################
|
||||
def calculate_gender
|
||||
return :Genderless
|
||||
end
|
||||
|
||||
############################# UTIL METHODS ###############################
|
||||
|
||||
#Takes 2 strings, splits and combines them using the beginning of the first one and the end of the second one
|
||||
# (for example for pokedex entries)
|
||||
def split_and_combine_text(beginingText_full, endText_full, separator)
|
||||
beginingText_split = beginingText_full.split(separator, 2)
|
||||
endText_split = endText_full.split(separator, 2)
|
||||
|
||||
beginningText = beginingText_split[0]
|
||||
endText = endText_split[1] && endText_split[1] != "" ? endText_split[1] : endText_split[0]
|
||||
return beginningText + separator + " " + endText
|
||||
end
|
||||
|
||||
def calculate_fused_stats(dominantStat, otherStat)
|
||||
return ((2 * dominantStat) / 3) + (otherStat / 3).floor
|
||||
end
|
||||
|
||||
def average_values(value1, value2)
|
||||
return ((value1 + value2) / 2).floor
|
||||
end
|
||||
|
||||
def average_map_values(map1, map2)
|
||||
averaged_map = map1.merge(map2) do |key, value1, value2|
|
||||
((value1 + value2) / 2.0).floor
|
||||
end
|
||||
return averaged_map
|
||||
end
|
||||
|
||||
def get_highest_value(value1, value2)
|
||||
return value1 > value2 ? value1 : value2
|
||||
end
|
||||
|
||||
def get_lowest_value(value1, value2)
|
||||
return value1 < value2 ? value1 : value2
|
||||
end
|
||||
|
||||
def combine_arrays(array1, array2)
|
||||
return array1 + array2
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
1229
Data/Scripts/998_InfiniteFusion/Fusion/Fusion data/SplitNames.rb
Normal file
1229
Data/Scripts/998_InfiniteFusion/Fusion/Fusion data/SplitNames.rb
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,31 +1,74 @@
|
||||
# module GameData
|
||||
# module ClassMethods
|
||||
# def get(other)
|
||||
# validate other => [Symbol, self, String, Integer]
|
||||
# return other if other.is_a?(self)
|
||||
# other = other.to_sym if other.is_a?(String)
|
||||
#
|
||||
# if other.to_s.match?(/\AB\d+H\d+\z/)
|
||||
# species = GameData::FusedSpecies.new(other)
|
||||
# return species
|
||||
# end
|
||||
#
|
||||
# if other.is_a?(Integer) && self == GameData::Species
|
||||
# if other > NB_POKEMON
|
||||
# body_id = getBodyID(other)
|
||||
# head_id = getHeadID(other, body_id)
|
||||
# pokemon_id = getFusedPokemonIdFromDexNum(body_id, head_id)
|
||||
# return GameData::FusedSpecies.new(pokemon_id)
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# if !self::DATA.has_key?(other)
|
||||
# # echoln _INTL("Unknown ID {1}.", other)
|
||||
# return self::get(:PIKACHU)
|
||||
# end
|
||||
#
|
||||
# raise "Unknown ID #{other}." unless self::DATA.has_key?(other)
|
||||
# return self::DATA[other]
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
module GameData
|
||||
module ClassMethods
|
||||
def get(other)
|
||||
validate other => [Symbol, self, String, Integer]
|
||||
return other if other.is_a?(self)
|
||||
other = other.to_sym if other.is_a?(String)
|
||||
|
||||
if other.to_s.match?(/\AB\d+H\d+\z/)
|
||||
species = GameData::FusedSpecies.new(other)
|
||||
return species
|
||||
end
|
||||
|
||||
if other.is_a?(Integer) && self == GameData::Species
|
||||
if other > Settings::NB_POKEMON
|
||||
body_id = getBodyID(other)
|
||||
head_id = getHeadID(other, body_id)
|
||||
pokemon_id = getFusedPokemonIdFromDexNum(body_id, head_id)
|
||||
return GameData::FusedSpecies.new(pokemon_id)
|
||||
else
|
||||
species_id = GameData::Species.keys[other-1]
|
||||
return GameData::Species.get(species_id) if species_id
|
||||
end
|
||||
end
|
||||
|
||||
if !self::DATA.has_key?(other)
|
||||
# echoln _INTL("Unknown ID {1}.", other)
|
||||
return self::get(:PIKACHU)
|
||||
end
|
||||
|
||||
raise "Unknown ID #{other}." unless self::DATA.has_key?(other)
|
||||
return self::DATA[other]
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
module ClassMethodsSymbols
|
||||
def get(other)
|
||||
validate other => [Symbol, self, String, Integer]
|
||||
return other if other.is_a?(self)
|
||||
other = other.to_sym if other.is_a?(String)
|
||||
|
||||
if other.to_s.match?(/\AB\d+H\d+\z/)
|
||||
species = GameData::FusedSpecies.new(other)
|
||||
return species
|
||||
end
|
||||
|
||||
if other.is_a?(Integer) && self == GameData::Species
|
||||
if other > Settings::NB_POKEMON
|
||||
body_id = getBodyID(other)
|
||||
head_id = getHeadID(other, body_id)
|
||||
pokemon_id = getFusedPokemonIdFromDexNum(body_id, head_id)
|
||||
return GameData::FusedSpecies.new(pokemon_id)
|
||||
else
|
||||
species_id = GameData::Species.keys[other-1]
|
||||
return GameData::Species.get(species_id) if species_id
|
||||
end
|
||||
end
|
||||
|
||||
raise "Unknown ID #{other}." unless self::DATA.has_key?(other)
|
||||
return self::DATA[other]
|
||||
end
|
||||
|
||||
|
||||
def try_get(other)
|
||||
return nil if other.nil?
|
||||
validate other => [Symbol, self, String, Integer]
|
||||
return other if other.is_a?(self)
|
||||
other = other.to_sym if other.is_a?(String)
|
||||
return (self::DATA.has_key?(other)) ? self::DATA[other] : nil
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
38
Data/Scripts/998_InfiniteFusion/Fusion/FusionAnim.rb
Normal file
38
Data/Scripts/998_InfiniteFusion/Fusion/FusionAnim.rb
Normal file
@@ -0,0 +1,38 @@
|
||||
# class PokemonFusionScene
|
||||
# HEAD_SPRITE_STARTING_POS = Graphics.width / 2
|
||||
#
|
||||
#
|
||||
# def pbStartScreen(pokemon_head,pokemon_body,pokemon_fused)
|
||||
#
|
||||
# @pokemon_head = pokemon_head
|
||||
# @pokemon_body = pokemon_body
|
||||
#
|
||||
# @pokemon_fused = pokemon_fused
|
||||
#
|
||||
# @sprites = {}
|
||||
# @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
|
||||
# @viewport.z = 99999
|
||||
#
|
||||
# initialize_background()
|
||||
# initialize_sprites()
|
||||
# end
|
||||
#
|
||||
# def initialize_background()
|
||||
# addBackgroundOrColoredPlane(@sprites, "background", "DNAbg",
|
||||
# Color.new(248, 248, 248), @viewport)
|
||||
# end
|
||||
#
|
||||
# def initialize_sprites()
|
||||
# pokeHead_number = GameData::Species.get(@pokemon_head.species).id_number
|
||||
# pokeBody_number = GameData::Species.get(@pokemon_body.species).id_number
|
||||
#
|
||||
# @sprites["poke_head"] = PokemonSprite.new(@viewport)
|
||||
# @sprites["poke_head"].setPokemonBitmapFromId(pokeHead_number, false, @pokemon_head.shiny?)
|
||||
#
|
||||
# @sprites["poke_head"].ox = @sprites["rsprite1"].bitmap.width / 2
|
||||
# @sprites["poke_head"].x = Graphics.width / 2
|
||||
# @sprites["poke_head"].zoom_x = Settings::FRONTSPRITE_SCALE
|
||||
#
|
||||
# end
|
||||
#
|
||||
# end
|
||||
115
Data/Scripts/998_InfiniteFusion/Fusion/FusionMenu.rb
Normal file
115
Data/Scripts/998_InfiniteFusion/Fusion/FusionMenu.rb
Normal file
@@ -0,0 +1,115 @@
|
||||
class FusionSelectOptionsScene < PokemonOption_Scene
|
||||
attr_accessor :selectedAbility
|
||||
attr_accessor :selectedNature
|
||||
attr_accessor :hasNickname
|
||||
attr_accessor :nickname
|
||||
|
||||
|
||||
def initialize(abilityList,natureList, pokemon1, pokemon2)
|
||||
@abilityList = abilityList
|
||||
@natureList = natureList
|
||||
@selectedAbility=nil
|
||||
@selectedNature=nil
|
||||
@selBaseColor = Color.new(48,96,216)
|
||||
@selShadowColor = Color.new(32,32,32)
|
||||
@show_frame=false
|
||||
@hasNickname = false
|
||||
@nickname = nil
|
||||
|
||||
@pokemon1=pokemon1
|
||||
@pokemon2=pokemon2
|
||||
end
|
||||
|
||||
|
||||
def initUIElements
|
||||
@sprites["title"] = Window_UnformattedTextPokemon.newWithSize(
|
||||
_INTL("Select your Pokémon's ability and nature"), 0, 0, Graphics.width, 64, @viewport)
|
||||
@sprites["textbox"] = pbCreateMessageWindow
|
||||
@sprites["textbox"].letterbyletter = false
|
||||
pbSetSystemFont(@sprites["textbox"].contents)
|
||||
@sprites["title"].opacity=0
|
||||
end
|
||||
|
||||
def pbStartScene(inloadscreen = nil)
|
||||
super
|
||||
@sprites["option"].opacity=0
|
||||
end
|
||||
|
||||
|
||||
def getAbilityName(ability)
|
||||
return GameData::Ability.get(ability.id).real_name
|
||||
end
|
||||
|
||||
def getAbilityDescription(ability)
|
||||
return GameData::Ability.get(ability.id).real_description
|
||||
end
|
||||
|
||||
def getNatureName(nature)
|
||||
return GameData::Nature.get(nature.id).real_name
|
||||
end
|
||||
|
||||
def getNatureDescription(nature)
|
||||
change= GameData::Nature.get(nature.id).stat_changes
|
||||
return "Neutral nature" if change.empty?
|
||||
positiveChange = change[0]
|
||||
negativeChange = change[1]
|
||||
return _INTL("+ {1}\n- {2}",GameData::Stat.get(positiveChange[0]).name,GameData::Stat.get(negativeChange[0]).name)
|
||||
end
|
||||
|
||||
def shouldSelectNickname
|
||||
if @pokemon1.nicknamed? && @pokemon2.nicknamed?
|
||||
@hasNickname=true
|
||||
return true
|
||||
end
|
||||
if @pokemon1.nicknamed? && !@pokemon2.nicknamed?
|
||||
@hasNickname=true
|
||||
@nickname = @pokemon1.name
|
||||
return false
|
||||
end
|
||||
if !@pokemon1.nicknamed? && @pokemon2.nicknamed?
|
||||
@hasNickname=true
|
||||
@nickname = @pokemon2.name
|
||||
return false
|
||||
end
|
||||
@hasNickname=false
|
||||
return false
|
||||
end
|
||||
|
||||
def pbGetOptions(inloadscreen = false)
|
||||
|
||||
options = []
|
||||
if shouldSelectNickname
|
||||
options << EnumOption.new(_INTL("Nickname"), [_INTL(@pokemon1.name), _INTL(@pokemon2.name)],
|
||||
proc { 0 },
|
||||
proc { |value|
|
||||
if value ==0
|
||||
@nickname = @pokemon1.name
|
||||
else
|
||||
@nickname = @pokemon2.name
|
||||
end
|
||||
}, "Select the Pokémon's nickname")
|
||||
end
|
||||
|
||||
options << EnumOption.new(_INTL("Ability"), [_INTL(getAbilityName(@abilityList[0])), _INTL(getAbilityName(@abilityList[1]))],
|
||||
proc { 0 },
|
||||
proc { |value|
|
||||
@selectedAbility=@abilityList[value]
|
||||
}, [getAbilityDescription(@abilityList[0]), getAbilityDescription(@abilityList[1])]
|
||||
)
|
||||
|
||||
options << EnumOption.new(_INTL("Nature"), [_INTL(getNatureName(@natureList[0])), _INTL(getNatureName(@natureList[1]))],
|
||||
proc { 0 },
|
||||
proc { |value|
|
||||
@selectedNature=@natureList[value]
|
||||
}, [getNatureDescription(@natureList[0]), getNatureDescription(@natureList[1])]
|
||||
)
|
||||
return options
|
||||
end
|
||||
|
||||
|
||||
def isConfirmedOnKeyPress
|
||||
return true
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
class FusionPreviewScreen < DoublePreviewScreen
|
||||
attr_reader :poke1
|
||||
attr_reader :poke2
|
||||
attr_reader :fusedPokemon
|
||||
attr_reader :fusedPokemon
|
||||
|
||||
attr_writer :draw_types
|
||||
attr_writer :draw_level
|
||||
|
||||
BACKGROUND_PATH = "Graphics/Pictures/DNAbg"
|
||||
|
||||
|
||||
def initialize(poke1,poke2, usingSuperSplicers=false)
|
||||
super(poke1,poke2)
|
||||
@draw_types = true
|
||||
@draw_level = true
|
||||
@draw_sprite_info=true
|
||||
|
||||
#@viewport = viewport
|
||||
@poke1 = poke1
|
||||
@poke2 = poke2
|
||||
@fusedPokemon=nil
|
||||
new_level = calculateFusedPokemonLevel(poke1.level, poke2.level, usingSuperSplicers)
|
||||
|
||||
fusion_left = (poke1.species_data.id_number) * Settings::NB_POKEMON + poke2.species_data.id_number
|
||||
fusion_right = (poke2.species_data.id_number) * Settings::NB_POKEMON + poke1.species_data.id_number
|
||||
|
||||
@picture1 = draw_window(fusion_left,new_level,20,30)
|
||||
@picture2 = draw_window(fusion_right,new_level,270,30)
|
||||
|
||||
@sprites["picture1"] = @picture1
|
||||
@sprites["picture2"] = @picture2
|
||||
|
||||
end
|
||||
|
||||
def getBackgroundPicture
|
||||
super
|
||||
end
|
||||
end
|
||||
453
Data/Scripts/998_InfiniteFusion/Fusion/PIF_Pokemon.rb
Normal file
453
Data/Scripts/998_InfiniteFusion/Fusion/PIF_Pokemon.rb
Normal file
@@ -0,0 +1,453 @@
|
||||
class Pokemon
|
||||
attr_accessor :exp_when_fused_head
|
||||
attr_accessor :exp_when_fused_body
|
||||
attr_accessor :exp_gained_since_fused
|
||||
|
||||
attr_accessor :hat
|
||||
attr_accessor :hat_x
|
||||
attr_accessor :hat_y
|
||||
|
||||
attr_accessor :glitter
|
||||
attr_accessor :head_shiny
|
||||
attr_accessor :body_shiny
|
||||
attr_accessor :debug_shiny
|
||||
attr_accessor :natural_shiny
|
||||
|
||||
attr_writer :ability_index
|
||||
attr_accessor :body_original_ability_index
|
||||
attr_accessor :head_original_ability_index
|
||||
|
||||
# @return [Array<Symbol>] All the move (ids) ever learned by this Pokémon
|
||||
attr_accessor :learned_moves
|
||||
|
||||
attr_accessor :force_disobey
|
||||
|
||||
|
||||
def print_all_attributes
|
||||
instance_variables.each do |var|
|
||||
begin
|
||||
value = instance_variable_get(var)
|
||||
echoln("#{var}: #{value.inspect}")
|
||||
rescue => e
|
||||
echoln("#{var}: [Error reading value: #{e.message}]")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def id_number
|
||||
return species_data.id_number
|
||||
end
|
||||
|
||||
def hiddenPower=(type)
|
||||
@hiddenPowerType = type
|
||||
end
|
||||
|
||||
def sprite_scale()
|
||||
@sprite_scale = 1 if !@sprite_scale
|
||||
return @sprite_scale
|
||||
end
|
||||
|
||||
def sprite_scale=(scale)
|
||||
@sprite_scale = scale
|
||||
end
|
||||
|
||||
|
||||
def size_category()
|
||||
@size_category = :AVERAGE if !@size_category
|
||||
return @size_category
|
||||
end
|
||||
|
||||
def size_category=(category)
|
||||
@size_category = category
|
||||
end
|
||||
|
||||
def hasBodyOf?(check_species)
|
||||
if !self.isFusion?
|
||||
return isSpecies?(check_species)
|
||||
end
|
||||
bodySpecies = getBodyID(species)
|
||||
checkSpeciesId = getID(nil, check_species)
|
||||
return bodySpecies == checkSpeciesId
|
||||
end
|
||||
|
||||
def hasHeadOf?(check_species)
|
||||
if !self.isFusion?
|
||||
return isSpecies?(check_species)
|
||||
end
|
||||
headSpecies = getHeadID(species)
|
||||
checkSpeciesId = getID(nil, check_species)
|
||||
return headSpecies == checkSpeciesId
|
||||
end
|
||||
|
||||
def head_id()
|
||||
return get_head_id_from_symbol(@species)
|
||||
end
|
||||
|
||||
def body_id()
|
||||
return get_body_id_from_symbol(@species)
|
||||
end
|
||||
|
||||
def shiny=(value)
|
||||
@shiny = value
|
||||
if value && Settings::SHINY_POKEMON_CHANCE != S_CHANCE_VALIDATOR
|
||||
@debug_shiny = true
|
||||
end
|
||||
end
|
||||
|
||||
def isShiny?()
|
||||
return @shiny || @body_shiny || @head_shiny
|
||||
end
|
||||
|
||||
def naturalShiny?
|
||||
return @natural_shiny
|
||||
end
|
||||
|
||||
def debugShiny?
|
||||
return !@natural_shiny || @debug_shiny
|
||||
end
|
||||
|
||||
def bodyShiny?
|
||||
return @body_shiny
|
||||
end
|
||||
|
||||
def headShiny?
|
||||
return @head_shiny
|
||||
end
|
||||
|
||||
|
||||
def isFusionOf(check_species)
|
||||
return hasBodyOf?(check_species) || hasHeadOf?(check_species)
|
||||
end
|
||||
|
||||
|
||||
def dexNum
|
||||
return species_data.id_number
|
||||
end
|
||||
|
||||
def isSelfFusion?
|
||||
return isFusion? && getHeadID(species) == getBodyID(species)
|
||||
end
|
||||
|
||||
def isFusion?
|
||||
return species_data.id_number > NB_POKEMON && !self.isTripleFusion?
|
||||
end
|
||||
|
||||
def isTripleFusion?
|
||||
return species_data.id_number >= Settings::ZAPMOLCUNO_NB
|
||||
end
|
||||
|
||||
def changeFormSpecies(oldForm, newForm)
|
||||
|
||||
is_already_old_form = self.isFusionOf(oldForm) #A 466
|
||||
is_already_new_form = self.isFusionOf(newForm) #P
|
||||
|
||||
#reverse the fusion if it's a meloA and meloP fusion
|
||||
# There's probably a smarter way to do this but laziness lol
|
||||
if is_already_old_form && is_already_new_form
|
||||
body_id = self.species_data.get_body_species()
|
||||
body_species = GameData::Species.get(body_id)
|
||||
|
||||
if body_species == oldForm
|
||||
changeSpeciesSpecific(self, getFusedPokemonIdFromSymbols(newForm, oldForm))
|
||||
else
|
||||
changeSpeciesSpecific(self, getFusedPokemonIdFromSymbols(oldForm, newForm))
|
||||
end
|
||||
else
|
||||
echoln "changing species...."
|
||||
changeSpecies(self, oldForm, newForm) if is_already_old_form
|
||||
changeSpecies(self, newForm, oldForm) if is_already_new_form
|
||||
end
|
||||
|
||||
calc_stats
|
||||
end
|
||||
|
||||
def changeSpecies(pokemon, speciesToReplace, newSpecies)
|
||||
if pokemon.isFusion?()
|
||||
replaceFusionSpecies(pokemon, speciesToReplace, newSpecies)
|
||||
else
|
||||
changeSpeciesSpecific(pokemon, newSpecies)
|
||||
end
|
||||
$Trainer.pokedex.set_seen(pokemon.species)
|
||||
$Trainer.pokedex.set_owned(pokemon.species)
|
||||
end
|
||||
|
||||
def type1
|
||||
if @ability == :MULTITYPE && species_data.type1 == :NORMAL
|
||||
return getHeldPlateType()
|
||||
end
|
||||
return @type1 if @type1
|
||||
return species_data.type1
|
||||
end
|
||||
|
||||
# @return [Symbol] this Pokémon's second type, or the first type if none is defined
|
||||
def type2
|
||||
if @ability == :MULTITYPE && species_data.type2 == :NORMAL
|
||||
return getHeldPlateType()
|
||||
end
|
||||
sp_data = species_data
|
||||
return sp_data.type2 || sp_data.type1
|
||||
end
|
||||
|
||||
|
||||
def type1=(value)
|
||||
@type1 = value
|
||||
end
|
||||
|
||||
def type2=(value)
|
||||
@type2 = value
|
||||
end
|
||||
|
||||
def getHeldPlateType()
|
||||
return getArceusPlateType(@item)
|
||||
end
|
||||
|
||||
def makeMale
|
||||
@gender = 0
|
||||
end
|
||||
|
||||
# Makes this Pokémon female.
|
||||
def makeFemale
|
||||
@gender = 1
|
||||
end
|
||||
|
||||
# @return [Boolean] whether this Pokémon is male
|
||||
def male?
|
||||
return self.gender == 0;
|
||||
end
|
||||
|
||||
# @return [Boolean] whether this Pokémon is female
|
||||
def female?
|
||||
return self.gender == 1;
|
||||
end
|
||||
|
||||
# @return [Boolean] whether this Pokémon is genderless
|
||||
def genderless?
|
||||
return self.gender == 2;
|
||||
end
|
||||
|
||||
def add_learned_move(move)
|
||||
@learned_moves = [] if !@learned_moves
|
||||
if move.is_a?(Symbol)
|
||||
@learned_moves << move unless @learned_moves.include?(move)
|
||||
else
|
||||
move_id = move.id
|
||||
if move_id
|
||||
@learned_moves << move_id unless @learned_moves.include?(move_id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
alias pokemonEssentials_Pokemon_learn_move learn_move
|
||||
def learn_move(move)
|
||||
pokemonEssentials_Pokemon_learn_move(move)
|
||||
add_learned_move(move)
|
||||
end
|
||||
|
||||
alias pokemonEssentials_Pokemon_forget_move forget_move
|
||||
def forget_move(move_id)
|
||||
pokemonEssentials_Pokemon_forget_move(move_id)
|
||||
add_learned_move(move_id)
|
||||
end
|
||||
|
||||
def forget_move_at_index(index)
|
||||
move_id = @moves[index].id
|
||||
add_learned_move(move_id)
|
||||
@moves.delete_at(index)
|
||||
end
|
||||
|
||||
# Deletes all moves from the Pokémon.
|
||||
def forget_all_moves
|
||||
for move in @moves
|
||||
add_learned_move(move)
|
||||
end
|
||||
@moves.clear
|
||||
end
|
||||
|
||||
def compatible_with_move?(move_id)
|
||||
move_data = GameData::Move.try_get(move_id)
|
||||
if isFusion?()
|
||||
head_species_id = getBasePokemonID(species, false)
|
||||
body_species_id = getBasePokemonID(species)
|
||||
head_species = GameData::Species.get(head_species_id)
|
||||
body_species = GameData::Species.get(body_species_id)
|
||||
return move_data && (pokemon_can_learn_move(head_species, move_data) || pokemon_can_learn_move(body_species, move_data))
|
||||
else
|
||||
return move_data && pokemon_can_learn_move(species_data, move_data)
|
||||
end
|
||||
end
|
||||
|
||||
def pokemon_can_learn_move(species_data, move_data)
|
||||
moveset = species_data.moves.map { |pair| pair[1] }
|
||||
return species_data.tutor_moves.include?(move_data.id) ||
|
||||
species_data.moves.include?(move_data.id) || ##this is formatted as such [[1, :PECK],[etc.]] so it never finds anything when move_data is just the symbol. Leaving it there in case something depends on that for some reason.
|
||||
moveset.include?(move_data.id) ||
|
||||
species_data.egg_moves.include?(move_data.id)
|
||||
end
|
||||
|
||||
def has_egg_move?
|
||||
return false if egg? || shadowPokemon?
|
||||
baby = pbGetBabySpecies(self.species)
|
||||
moves = pbGetSpeciesEggMoves(baby)
|
||||
return true if moves.size >= 1
|
||||
end
|
||||
|
||||
def foreign?(trainer)
|
||||
return @owner.id != trainer.id# || @owner.name != trainer.name
|
||||
end
|
||||
|
||||
def always_disobey(value)
|
||||
@force_disobey = value
|
||||
end
|
||||
|
||||
#=============================================================================
|
||||
# Evolution checks
|
||||
#=============================================================================
|
||||
# Checks whether this Pokemon can evolve because of levelling up.
|
||||
# @return [Symbol, nil] the ID of the species to evolve into
|
||||
def prompt_evolution_choice(body_evolution, head_evolution)
|
||||
current_body = @species_data.body_pokemon
|
||||
current_head = @species_data.head_pokemon
|
||||
|
||||
choices = [
|
||||
#_INTL("Evolve both!"),
|
||||
_INTL("Evolve head!"),
|
||||
_INTL("Evolve body!"),
|
||||
_INTL("Don't evolve")
|
||||
]
|
||||
choice = pbMessage(_INTL('Both halves of {1} are ready to evolve!', self.name), choices, 0)
|
||||
# if choice == 0 #EVOLVE BOTH
|
||||
# newspecies = getFusionSpecies(body_evolution,head_evolution)
|
||||
if choice == 0 #EVOLVE HEAD
|
||||
newspecies = getFusionSpecies(current_body, head_evolution)
|
||||
elsif choice == 1 #EVOLVE BODY
|
||||
newspecies = getFusionSpecies(body_evolution, current_head)
|
||||
else
|
||||
newspecies = nil
|
||||
end
|
||||
return newspecies
|
||||
end
|
||||
|
||||
def check_evolution_on_level_up(prompt_choice=true)
|
||||
if @species_data.is_a?(GameData::FusedSpecies)
|
||||
body = self.species_data.body_pokemon
|
||||
head = self.species_data.head_pokemon
|
||||
|
||||
body_evolution = check_evolution_internal(@species_data.body_pokemon) { |pkmn, new_species, method, parameter|
|
||||
success = GameData::Evolution.get(method).call_level_up(pkmn, parameter)
|
||||
next (success) ? new_species : nil
|
||||
}
|
||||
head_evolution = check_evolution_internal(@species_data.head_pokemon) { |pkmn, new_species, method, parameter|
|
||||
success = GameData::Evolution.get(method).call_level_up(pkmn, parameter)
|
||||
next (success) ? new_species : nil
|
||||
}
|
||||
if body_evolution && head_evolution
|
||||
return prompt_evolution_choice(body_evolution, head_evolution) if prompt_choice
|
||||
return [body_evolution,head_evolution].sample
|
||||
end
|
||||
end
|
||||
|
||||
return check_evolution_internal { |pkmn, new_species, method, parameter|
|
||||
success = GameData::Evolution.get(method).call_level_up(pkmn, parameter)
|
||||
next (success) ? new_species : nil
|
||||
}
|
||||
end
|
||||
def getBaseStatsFormException()
|
||||
if @species == :PUMPKABOO
|
||||
case @size_category
|
||||
when :SMALL
|
||||
return { :HP => 44, :ATTACK => 66, :DEFENSE => 70, :SPECIAL_ATTACK => 44, :SPECIAL_DEFENSE => 55, :SPEED => 56}
|
||||
when :AVERAGE
|
||||
return nil
|
||||
when :LARGE
|
||||
return { :HP => 54, :ATTACK => 66, :DEFENSE => 70, :SPECIAL_ATTACK => 44, :SPECIAL_DEFENSE => 55, :SPEED => 46}
|
||||
when :SUPER
|
||||
return { :HP => 59, :ATTACK => 66, :DEFENSE => 70, :SPECIAL_ATTACK => 44, :SPECIAL_DEFENSE => 55, :SPEED => 41}
|
||||
end
|
||||
end
|
||||
if @species == :GOURGEIST
|
||||
case @size_category
|
||||
when :SMALL
|
||||
return { :HP => 55, :ATTACK => 85, :DEFENSE => 122, :SPECIAL_ATTACK => 58, :SPECIAL_DEFENSE => 75, :SPEED => 99}
|
||||
when :AVERAGE
|
||||
return nil
|
||||
when :LARGE
|
||||
return { :HP => 75, :ATTACK => 95, :DEFENSE => 122, :SPECIAL_ATTACK => 58, :SPECIAL_DEFENSE => 75, :SPEED => 69}
|
||||
when :SUPER
|
||||
return { :HP => 85, :ATTACK => 100, :DEFENSE => 122, :SPECIAL_ATTACK => 58, :SPECIAL_DEFENSE => 75, :SPEED => 54}
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
def adjust_level_for_base_stats_mode()
|
||||
nb_badges = $Trainer.badge_count
|
||||
this_level = ((nb_badges * Settings::NO_LEVEL_MODE_LEVEL_INCR) + Settings::NO_LEVEL_MODE_LEVEL_BASE).ceil
|
||||
if this_level > Settings::MAXIMUM_LEVEL
|
||||
this_level = Settings::MAXIMUM_LEVEL
|
||||
end
|
||||
return this_level
|
||||
end
|
||||
|
||||
def adjustHPForWonderGuard(stats)
|
||||
return self.ability == :WONDERGUARD ? 1 : stats[:HP]
|
||||
end
|
||||
|
||||
def checkHPRelatedFormChange()
|
||||
if @ability == :SHIELDSDOWN
|
||||
return if $game_temp.in_battle #handled in battlers class in-battle
|
||||
if isFusionOf(:MINIOR_M)
|
||||
if @hp <= (@totalhp / 2)
|
||||
changeFormSpecies(:MINIOR_M, :MINIOR_C)
|
||||
end
|
||||
end
|
||||
if isFusionOf(:MINIOR_C)
|
||||
if @hp > (@totalhp / 2)
|
||||
changeFormSpecies(:MINIOR_C, :MINIOR_M)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def determine_scale
|
||||
return :AVERAGE if !@size_category
|
||||
size_roll = rand(100) # Random number between 0-99
|
||||
if @size_category == :SMALL
|
||||
return 0.75
|
||||
elsif @size_category == :AVERAGE
|
||||
return 1
|
||||
elsif @size_category == :LARGE
|
||||
return 1 + (1.0 /3) #"Large Size"
|
||||
elsif @size_category == :SUPER
|
||||
return 1 + (2.0 /3) #"Super Size"
|
||||
end
|
||||
return 1
|
||||
end
|
||||
|
||||
def determine_size_category
|
||||
return :AVERAGE if !(Kernel.isPartPokemon(self,:PUMPKABOO) || Kernel.isPartPokemon(self,:GOURGEIST))
|
||||
size_roll = rand(100) # Random number between 0-99
|
||||
if size_roll < 10
|
||||
return :SMALL
|
||||
elsif size_roll < 50
|
||||
return :AVERAGE
|
||||
elsif size_roll < 90
|
||||
return :LARGE
|
||||
else
|
||||
return :SUPER
|
||||
end
|
||||
end
|
||||
|
||||
def species=(species_id)
|
||||
new_species_data = GameData::Species.get(species_id)
|
||||
return if @species == new_species_data.species
|
||||
@species = new_species_data.species
|
||||
@forced_form = nil
|
||||
@gender = nil if singleGendered?
|
||||
@level = nil # In case growth rate is different for the new species
|
||||
@ability = nil
|
||||
calc_stats
|
||||
end
|
||||
|
||||
end
|
||||
1160
Data/Scripts/998_InfiniteFusion/Fusion/PokemonFusion.rb
Normal file
1160
Data/Scripts/998_InfiniteFusion/Fusion/PokemonFusion.rb
Normal file
File diff suppressed because it is too large
Load Diff
@@ -38,14 +38,14 @@ end
|
||||
|
||||
def species_is_fusion(species_id)
|
||||
dex_number = get_dex_number(species_id)
|
||||
return dex_number > NB_POKEMON && dex_number < Settings::ZAPMOLCUNO_NB
|
||||
return dex_number > Settings::NB_POKEMON && dex_number < Settings::ZAPMOLCUNO_NB
|
||||
end
|
||||
|
||||
def get_dex_number(species_id)
|
||||
return GameData::Species.get(species_id).id_number
|
||||
end
|
||||
|
||||
def getBodyID(species, nb_pokemon = NB_POKEMON)
|
||||
def getBodyID(species, nb_pokemon = Settings::NB_POKEMON)
|
||||
if species.is_a?(Integer)
|
||||
dexNum = species
|
||||
else
|
||||
@@ -57,7 +57,7 @@ def getBodyID(species, nb_pokemon = NB_POKEMON)
|
||||
return (dexNum / nb_pokemon).round
|
||||
end
|
||||
|
||||
def getHeadID(species, bodyId = nil, nb_pokemon = NB_POKEMON)
|
||||
def getHeadID(species, bodyId = nil, nb_pokemon = Settings::NB_POKEMON)
|
||||
if species.is_a?(Integer)
|
||||
fused_dexNum = species
|
||||
else
|
||||
@@ -408,3 +408,13 @@ def get_triple_fusion_components(species_id)
|
||||
|
||||
end
|
||||
|
||||
def reverseFusionSpecies(species)
|
||||
dexId = getDexNumberForSpecies(species)
|
||||
return species if dexId <= NB_POKEMON
|
||||
return species if dexId > (NB_POKEMON * NB_POKEMON) + NB_POKEMON
|
||||
body = getBasePokemonID(dexId, true)
|
||||
head = getBasePokemonID(dexId, false)
|
||||
newspecies = (head) * NB_POKEMON + body
|
||||
return getPokemon(newspecies)
|
||||
end
|
||||
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module GameData
|
||||
class TerrainTag
|
||||
attr_reader :flowerRed
|
||||
attr_reader :flowerPink
|
||||
attr_reader :flowerYellow
|
||||
attr_reader :flowerBlue
|
||||
attr_reader :flower
|
||||
attr_reader :trashcan
|
||||
attr_reader :sharpedoObstacle
|
||||
|
||||
alias original_TerrainTag_init initialize
|
||||
def initialize(hash)
|
||||
original_TerrainTag_init(hash)
|
||||
@waterCurrent = hash[:waterCurrent] || false
|
||||
@flowerRed = hash[:flowerRed] || false
|
||||
@flowerYellow = hash[:flowerYellow] || false
|
||||
@flowerPink = hash[:flowerPink] || false
|
||||
@flowerBlue = hash[:flowerBlue] || false
|
||||
@flower = hash[:flower] || false
|
||||
@trashcan = hash[:trashcan] || false
|
||||
@sharpedoObstacle = hash[:sharpedoObstacle] || false
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
GameData::TerrainTag.register({
|
||||
:id => :WaterCurrent,
|
||||
:id_number => 6,
|
||||
:can_surf => true,
|
||||
:can_fish => true,
|
||||
:waterCurrent => true,
|
||||
:battle_environment => :MovingWater
|
||||
})
|
||||
|
||||
|
||||
GameData::TerrainTag.register({
|
||||
:id => :FlowerRed,
|
||||
:id_number => 17,
|
||||
:flowerRed => true,
|
||||
:flower => true
|
||||
})
|
||||
GameData::TerrainTag.register({
|
||||
:id => :FlowerYellow,
|
||||
:id_number => 18,
|
||||
:flowerYellow => true,
|
||||
:flower => true
|
||||
})
|
||||
GameData::TerrainTag.register({
|
||||
:id => :FlowerPink,
|
||||
:id_number => 19,
|
||||
:flowerPink => true,
|
||||
:flower => true
|
||||
})
|
||||
GameData::TerrainTag.register({
|
||||
:id => :FlowerBlue,
|
||||
:id_number => 20,
|
||||
:flowerBlue => true,
|
||||
:flower => true
|
||||
})
|
||||
GameData::TerrainTag.register({
|
||||
:id => :FlowerOther,
|
||||
:id_number => 21,
|
||||
:flower => true
|
||||
})
|
||||
GameData::TerrainTag.register({
|
||||
:id => :Trashcan,
|
||||
:id_number => 22,
|
||||
:trashcan => true
|
||||
})
|
||||
|
||||
GameData::TerrainTag.register({
|
||||
:id => :SharpedoObstacle,
|
||||
:id_number => 23,
|
||||
:sharpedoObstacle => true
|
||||
})
|
||||
|
||||
GameData::TerrainTag.register({
|
||||
:id => :Grass_alt1,
|
||||
:id_number => 24,
|
||||
:shows_grass_rustle => true,
|
||||
:land_wild_encounters => true,
|
||||
:battle_environment => :Grass
|
||||
})
|
||||
|
||||
GameData::TerrainTag.register({
|
||||
:id => :Grass_alt2,
|
||||
:id_number => 25,
|
||||
:shows_grass_rustle => true,
|
||||
:land_wild_encounters => true,
|
||||
:battle_environment => :Grass
|
||||
})
|
||||
|
||||
GameData::TerrainTag.register({
|
||||
:id => :Grass_alt3,
|
||||
:id_number => 26,
|
||||
:shows_grass_rustle => true,
|
||||
:land_wild_encounters => true,
|
||||
:battle_environment => :Grass
|
||||
})
|
||||
|
||||
GameData::TerrainTag.register({
|
||||
:id => :StillWater,
|
||||
:id_number => 27,
|
||||
:can_surf => true,
|
||||
:can_fish => true,
|
||||
:battle_environment => :StillWater,
|
||||
:shows_reflections => true
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
GameData::TerrainTag.register({
|
||||
:id => :NoEffect,
|
||||
:id_number => 99
|
||||
})
|
||||
@@ -561,3 +561,29 @@ def fossilsGuyBattle(level = 20, end_message = "")
|
||||
)
|
||||
|
||||
end
|
||||
|
||||
def isOnPinkanIsland()
|
||||
return false
|
||||
end
|
||||
|
||||
def generateSimpleTrainerParty(teamSpecies, level)
|
||||
team = []
|
||||
for species in teamSpecies
|
||||
poke = Pokemon.new(species, level)
|
||||
team << poke
|
||||
end
|
||||
return team
|
||||
end
|
||||
|
||||
def generateEggGroupTeam(eggGroup)
|
||||
teamComplete = false
|
||||
generatedTeam = []
|
||||
while !teamComplete
|
||||
species = rand(PBSpecies.maxValue)
|
||||
if getPokemonEggGroups(species).include?(eggGroup)
|
||||
generatedTeam << species
|
||||
end
|
||||
teamComplete = generatedTeam.length == 3
|
||||
end
|
||||
return generatedTeam
|
||||
end
|
||||
@@ -47,3 +47,57 @@ def playAnimation(animationId, x, y)
|
||||
return if !$scene.is_a?(Scene_Map)
|
||||
$scene.spriteset.addUserAnimation(animationId, x, y, true)
|
||||
end
|
||||
|
||||
def get_spritecharacter_for_event(event_id)
|
||||
for sprite in $scene.spriteset.character_sprites
|
||||
if sprite.character.id == event_id
|
||||
return sprite
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def pbBitmap(path)
|
||||
if !pbResolveBitmap(path).nil?
|
||||
bmp = RPG::Cache.load_bitmap_path(path)
|
||||
bmp.storedPath = path
|
||||
else
|
||||
p "Image located at '#{path}' was not found!" if $DEBUG
|
||||
bmp = Bitmap.new(1, 1)
|
||||
end
|
||||
return bmp
|
||||
end
|
||||
|
||||
def addShinyStarsToGraphicsArray(imageArray, xPos, yPos, shinyBody, shinyHead, debugShiny, srcx = nil, srcy = nil, width = nil, height = nil,
|
||||
showSecondStarUnder = false, showSecondStarAbove = false)
|
||||
color = debugShiny ? Color.new(0, 0, 0, 255) : nil
|
||||
imageArray.push(["Graphics/Pictures/shiny", xPos, yPos, srcx, srcy, width, height, color])
|
||||
if shinyBody && shinyHead
|
||||
if showSecondStarUnder
|
||||
yPos += 15
|
||||
elsif showSecondStarAbove
|
||||
yPos -= 15
|
||||
else
|
||||
xPos -= 15
|
||||
end
|
||||
imageArray.push(["Graphics/Pictures/shiny", xPos, yPos, srcx, srcy, width, height, color])
|
||||
end
|
||||
end
|
||||
|
||||
def pbCheckPokemonIconFiles(speciesID, egg = false, dna = false)
|
||||
if egg
|
||||
bitmapFileName = sprintf("Graphics/Icons/iconEgg")
|
||||
return pbResolveBitmap(bitmapFileName)
|
||||
else
|
||||
bitmapFileName = _INTL("Graphics/Pokemon/Icons/{1}", speciesID)
|
||||
ret = pbResolveBitmap(bitmapFileName)
|
||||
return ret if ret
|
||||
end
|
||||
ret = pbResolveBitmap("Graphics/Icons/iconDNA.png")
|
||||
return ret if ret
|
||||
return pbResolveBitmap("Graphics/Icons/iconDNA.png")
|
||||
end
|
||||
|
||||
def pbPokemonIconFile(pokemon)
|
||||
bitmapFileName = pbCheckPokemonIconFiles(pokemon.species, pokemon.isEgg?)
|
||||
return bitmapFileName
|
||||
end
|
||||
@@ -165,3 +165,16 @@ def swapReleaseCaughtPokemon(caughtPokemon)
|
||||
$player.party[-1] = tmp
|
||||
return true
|
||||
end
|
||||
|
||||
def Kernel.getItemNamesAsString(list)
|
||||
strList = ""
|
||||
for i in 0..list.length - 1
|
||||
id = list[i]
|
||||
name = PBItems.getName(id)
|
||||
strList += name
|
||||
if i != list.length - 1 && list.length > 1
|
||||
strList += ","
|
||||
end
|
||||
end
|
||||
return strList
|
||||
end
|
||||
@@ -6,3 +6,5 @@ def isPlayerFemale()
|
||||
return pbGet(VAR_TRAINER_GENDER) == GENDER_FEMALE
|
||||
end# frozen_string_literal: true
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -245,3 +245,271 @@ def oricorioEventPickFlower(flower_color)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
# frozen_string_literal: true
|
||||
|
||||
def isInKantoGeneration(dexNumber)
|
||||
return dexNumber <= 151
|
||||
end
|
||||
|
||||
def isKantoPokemon(species)
|
||||
dexNum = getDexNumberForSpecies(species)
|
||||
poke = getPokemon(species)
|
||||
head_dex = getDexNumberForSpecies(poke.get_head_species())
|
||||
body_dex = getDexNumberForSpecies(poke.get_body_species())
|
||||
return isInKantoGeneration(dexNum) || isInKantoGeneration(head_dex) || isInKantoGeneration(body_dex)
|
||||
end
|
||||
|
||||
def isInJohtoGeneration(dexNumber)
|
||||
return dexNumber > 151 && dexNumber <= 251
|
||||
end
|
||||
|
||||
def isJohtoPokemon(species)
|
||||
dexNum = getDexNumberForSpecies(species)
|
||||
poke = getPokemon(species)
|
||||
head_dex = getDexNumberForSpecies(poke.get_head_species())
|
||||
body_dex = getDexNumberForSpecies(poke.get_body_species())
|
||||
return isInJohtoGeneration(dexNum) || isInJohtoGeneration(head_dex) || isInJohtoGeneration(body_dex)
|
||||
end
|
||||
|
||||
def isAlolaPokemon(species)
|
||||
dexNum = getDexNumberForSpecies(species)
|
||||
poke = getPokemon(species)
|
||||
head_dex = getDexNumberForSpecies(poke.get_head_species())
|
||||
body_dex = getDexNumberForSpecies(poke.get_body_species())
|
||||
list = [
|
||||
370, 373, 430, 431, 432, 433, 450, 451, 452,
|
||||
453, 454, 455, 459, 460, 463, 464, 465, 469, 470,
|
||||
471, 472, 473, 474, 475, 476, 477, 498, 499,
|
||||
]
|
||||
return list.include?(dexNum) || list.include?(head_dex) || list.include?(body_dex)
|
||||
end
|
||||
|
||||
def isKalosPokemon(species)
|
||||
dexNum = getDexNumberForSpecies(species)
|
||||
poke = getPokemon(species)
|
||||
head_dex = getDexNumberForSpecies(poke.get_head_species())
|
||||
body_dex = getDexNumberForSpecies(poke.get_body_species())
|
||||
list =
|
||||
[327, 328, 329, 339, 371, 372, 417, 418,
|
||||
425, 426, 438, 439, 440, 441, 444, 445, 446,
|
||||
456, 461, 462, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487,
|
||||
489, 490, 491, 492, 500,
|
||||
|
||||
]
|
||||
return list.include?(dexNum) || list.include?(head_dex) || list.include?(body_dex)
|
||||
end
|
||||
|
||||
def isUnovaPokemon(species)
|
||||
dexNum = getDexNumberForSpecies(species)
|
||||
poke = getPokemon(species)
|
||||
head_dex = getDexNumberForSpecies(poke.get_head_species())
|
||||
body_dex = getDexNumberForSpecies(poke.get_body_species())
|
||||
list =
|
||||
[
|
||||
330, 331, 337, 338, 348, 349, 350, 351, 359, 360, 361,
|
||||
362, 363, 364, 365, 366, 367, 368, 369, 374, 375, 376, 377,
|
||||
397, 398, 399, 406, 407, 408, 409, 410, 411, 412, 413, 414,
|
||||
415, 416, 419, 420,
|
||||
422, 423, 424, 434, 345,
|
||||
466, 467, 494, 493,
|
||||
]
|
||||
return list.include?(dexNum) || list.include?(head_dex) || list.include?(body_dex)
|
||||
end
|
||||
|
||||
def isSinnohPokemon(species)
|
||||
dexNum = getDexNumberForSpecies(species)
|
||||
poke = getPokemon(species)
|
||||
head_dex = getDexNumberForSpecies(poke.get_head_species())
|
||||
body_dex = getDexNumberForSpecies(poke.get_body_species())
|
||||
list =
|
||||
[254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
|
||||
266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 288, 294,
|
||||
295, 296, 297, 298, 299, 305, 306, 307, 308, 315, 316, 317,
|
||||
318, 319, 320, 321, 322, 323, 324, 326, 332, 343, 344, 345,
|
||||
346, 347, 352, 353, 354, 358, 383, 384, 388, 389, 400, 402,
|
||||
403, 429, 468]
|
||||
|
||||
return list.include?(dexNum) || list.include?(head_dex) || list.include?(body_dex)
|
||||
end
|
||||
|
||||
def isHoennPokemon(species)
|
||||
dexNum = getDexNumberForSpecies(species)
|
||||
poke = getPokemon(species)
|
||||
head_dex = getDexNumberForSpecies(poke.get_head_species())
|
||||
body_dex = getDexNumberForSpecies(poke.get_body_species())
|
||||
list = [252, 253, 276, 277, 278, 279, 280, 281, 282, 283, 284,
|
||||
285, 286, 287, 289, 290, 291, 292, 293, 300, 301, 302, 303,
|
||||
304, 309, 310, 311, 312, 313, 314, 333, 334, 335, 336, 340,
|
||||
341, 342, 355, 356, 357, 378, 379, 380, 381, 382, 385, 386,
|
||||
387, 390, 391, 392, 393, 394, 395, 396, 401, 404, 405, 421,
|
||||
427, 428, 436, 437, 442, 443, 447, 448, 449, 457, 458, 488,
|
||||
495, 496, 497, 501, 502, 503, 504, 505, 506, 507, 508, 509,
|
||||
510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521,
|
||||
522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533,
|
||||
534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545,
|
||||
546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557,
|
||||
558, 559, 560, 561, 562, 563, 564, 565
|
||||
]
|
||||
return list.include?(dexNum) || list.include?(head_dex) || list.include?(body_dex)
|
||||
end
|
||||
|
||||
def Kernel.getRoamingMap(roamingArrayPos)
|
||||
curmap = $PokemonGlobal.roamPosition[roamingArrayPos]
|
||||
mapinfos = $RPGVX ? load_data("Data/MapInfos.rvdata") : load_data("Data/MapInfos.rxdata")
|
||||
text = mapinfos[curmap].name #,(curmap==$game_map.map_id) ? _INTL("(this map)") : "")
|
||||
return text
|
||||
end
|
||||
|
||||
def get_default_moves_at_level(species, level)
|
||||
moveset = GameData::Species.get(species).moves
|
||||
knowable_moves = []
|
||||
moveset.each { |m| knowable_moves.push(m[1]) if m[0] <= level }
|
||||
# Remove duplicates (retaining the latest copy of each move)
|
||||
knowable_moves = knowable_moves.reverse
|
||||
knowable_moves |= []
|
||||
knowable_moves = knowable_moves.reverse
|
||||
# Add all moves
|
||||
moves = []
|
||||
first_move_index = knowable_moves.length - MAX_MOVES
|
||||
first_move_index = 0 if first_move_index < 0
|
||||
for i in first_move_index...knowable_moves.length
|
||||
#moves.push(Pokemon::Move.new(knowable_moves[i]))
|
||||
moves << knowable_moves[i]
|
||||
end
|
||||
return moves
|
||||
end
|
||||
|
||||
def listPokemonIDs()
|
||||
for id in 0..Settings::NB_POKEMON
|
||||
pokemon = GameData::Species.get(id).species
|
||||
echoln id.to_s + ": " + "\"" + pokemon.to_s + "\"" + ", "
|
||||
end
|
||||
end
|
||||
|
||||
def getAllNonLegendaryPokemon()
|
||||
list = []
|
||||
for i in 1..143
|
||||
list.push(i)
|
||||
end
|
||||
for i in 147..149
|
||||
list.push(i)
|
||||
end
|
||||
for i in 152..242
|
||||
list.push(i)
|
||||
end
|
||||
list.push(246)
|
||||
list.push(247)
|
||||
list.push(248)
|
||||
for i in 252..314
|
||||
list.push(i)
|
||||
end
|
||||
for i in 316..339
|
||||
list.push(i)
|
||||
end
|
||||
for i in 352..377
|
||||
list.push(i)
|
||||
end
|
||||
for i in 382..420
|
||||
list.push(i)
|
||||
end
|
||||
return list
|
||||
end
|
||||
|
||||
def getPokemonEggGroups(species)
|
||||
return GameData::Species.get(species).egg_groups
|
||||
end
|
||||
|
||||
def getAbilityIndexFromID(abilityID, fusedPokemon)
|
||||
abilityList = fusedPokemon.getAbilityList
|
||||
for abilityArray in abilityList #ex: [:CHLOROPHYLL, 0]
|
||||
ability = abilityArray[0]
|
||||
index = abilityArray[1]
|
||||
return index if ability == abilityID
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
def getSpecies(dexnum)
|
||||
return getPokemon(dexnum.species) if dexnum.is_a?(Pokemon)
|
||||
return getPokemon(dexnum)
|
||||
end
|
||||
|
||||
def getPokemon(dexNum)
|
||||
if dexNum.is_a?(Integer)
|
||||
if dexNum > Settings::NB_POKEMON
|
||||
body_id = getBodyID(dexNum)
|
||||
head_id = getHeadID(dexNum, body_id)
|
||||
pokemon_id = getFusedPokemonIdFromDexNum(body_id, head_id)
|
||||
else
|
||||
pokemon_id = dexNum
|
||||
end
|
||||
else
|
||||
pokemon_id = dexNum
|
||||
end
|
||||
|
||||
return GameData::Species.get(pokemon_id)
|
||||
end
|
||||
|
||||
def CanLearnMove(pokemon, move)
|
||||
species = getID(PBSpecies, pokemon)
|
||||
return false if species <= 0
|
||||
data = load_data("Data/tm.dat")
|
||||
return false if !data[move]
|
||||
return data[move].any? { |item| item == species }
|
||||
end
|
||||
|
||||
def getID(pbspecies_unused, species)
|
||||
if species.is_a?(String)
|
||||
return nil
|
||||
elsif species.is_a?(Symbol)
|
||||
return GameData::Species.get(species).id_number
|
||||
elsif species.is_a?(Pokemon)
|
||||
id = species.dexNum
|
||||
end
|
||||
end
|
||||
|
||||
def pbAddPokemonID(pokemon_id, level = 1, see_form = true, skip_randomize = false)
|
||||
return false if !pokemon_id
|
||||
skip_randomize = true if $game_switches[SWITCH_CHOOSING_STARTER] #when choosing starters
|
||||
if pbBoxesFull?
|
||||
pbMessage(_INTL("There's no more room for Pokémon!\1"))
|
||||
pbMessage(_INTL("The Pokémon Boxes are full and can't accept any more!"))
|
||||
return false
|
||||
end
|
||||
if pokemon_id.is_a?(Integer) && level.is_a?(Integer)
|
||||
pokemon = Pokemon.new(pokemon_id, level)
|
||||
species_name = pokemon.speciesName
|
||||
end
|
||||
|
||||
#random species if randomized gift pokemon & wild poke
|
||||
if $game_switches[SWITCH_RANDOM_GIFT_POKEMON] && $game_switches[SWITCH_RANDOM_WILD] && !skip_randomize
|
||||
tryRandomizeGiftPokemon(pokemon, skip_randomize)
|
||||
end
|
||||
|
||||
pbMessage(_INTL("{1} obtained {2}!\\me[Pkmn get]\\wtnp[80]\1", $Trainer.name, species_name))
|
||||
pbNicknameAndStore(pokemon)
|
||||
$Trainer.pokedex.register(pokemon) if see_form
|
||||
return true
|
||||
end
|
||||
|
||||
def pbHasSpecies?(species)
|
||||
if species.is_a?(String) || species.is_a?(Symbol)
|
||||
id = getID(PBSpecies, species)
|
||||
elsif species.is_a?(Pokemon)
|
||||
id = species.dexNum
|
||||
end
|
||||
for pokemon in $Trainer.party
|
||||
next if pokemon.isEgg?
|
||||
return true if pokemon.dexNum == id
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
def pbPlayCry(pkmn, volume = 90, pitch = nil)
|
||||
GameData::Species.play_cry(pkmn, volume, pitch)
|
||||
end
|
||||
|
||||
def pbCryFrameLength(species, form = 0, pitch = 100)
|
||||
return GameData::Species.cry_length(species, form, pitch)
|
||||
end
|
||||
@@ -3,5 +3,5 @@
|
||||
# setForcedAltSprites(forced_sprites)
|
||||
#
|
||||
def setForcedAltSprites(forcedSprites_map)
|
||||
$PokemonTemp.forced_alt_sprites = forcedSprites_map
|
||||
$game_temp.forced_alt_sprites = forcedSprites_map
|
||||
end
|
||||
@@ -143,3 +143,68 @@ def change_game_difficulty(down_only = false)
|
||||
message = "The game is currently on " + get_difficulty_text() + " difficulty."
|
||||
pbMessage(message)
|
||||
end
|
||||
|
||||
def find_newer_available_version
|
||||
latest_Version = fetch_latest_game_version
|
||||
return nil if !latest_Version
|
||||
return nil if is_higher_version(Settings::GAME_VERSION_NUMBER, latest_Version)
|
||||
return latest_Version
|
||||
end
|
||||
|
||||
def is_higher_version(gameVersion, latestVersion)
|
||||
gameVersion_parts = gameVersion.split('.').map(&:to_i)
|
||||
latestVersion_parts = latestVersion.split('.').map(&:to_i)
|
||||
|
||||
# Compare each part of the version numbers from left to right
|
||||
gameVersion_parts.each_with_index do |part, i|
|
||||
return true if (latestVersion_parts[i].nil? || part > latestVersion_parts[i])
|
||||
return false if part < latestVersion_parts[i]
|
||||
end
|
||||
return latestVersion_parts.length <= gameVersion_parts.length
|
||||
end
|
||||
|
||||
def get_current_game_difficulty
|
||||
return :EASY if $game_switches[SWITCH_GAME_DIFFICULTY_EASY]
|
||||
return :HARD if $game_switches[SWITCH_GAME_DIFFICULTY_HARD]
|
||||
return :NORMAL
|
||||
end
|
||||
|
||||
def get_difficulty_text
|
||||
if $game_switches[SWITCH_GAME_DIFFICULTY_EASY]
|
||||
return "Easy"
|
||||
elsif $game_switches[SWITCH_GAME_DIFFICULTY_HARD]
|
||||
return "Hard"
|
||||
else
|
||||
return "Normal"
|
||||
end
|
||||
end
|
||||
|
||||
def getCurrentLevelCap()
|
||||
current_max_level = Settings::LEVEL_CAPS[$Trainer.badge_count]
|
||||
current_max_level *= Settings::HARD_MODE_LEVEL_MODIFIER if $game_switches[SWITCH_GAME_DIFFICULTY_HARD]
|
||||
return current_max_level
|
||||
end
|
||||
|
||||
def pokemonExceedsLevelCap(pokemon)
|
||||
return false if $Trainer.badge_count >= Settings::NB_BADGES
|
||||
current_max_level = getCurrentLevelCap()
|
||||
return pokemon.level >= current_max_level
|
||||
end
|
||||
|
||||
def getLatestSpritepackDate()
|
||||
return Time.new(Settings::NEWEST_SPRITEPACK_YEAR, Settings::NEWEST_SPRITEPACK_MONTH)
|
||||
end
|
||||
|
||||
def new_spritepack_was_released()
|
||||
current_spritepack_date = $PokemonGlobal.current_spritepack_date
|
||||
latest_spritepack_date = getLatestSpritepackDate()
|
||||
if !current_spritepack_date || (current_spritepack_date < latest_spritepack_date)
|
||||
$PokemonGlobal.current_spritepack_date = latest_spritepack_date
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
def pbGetSelfSwitch(eventId, switch)
|
||||
return $game_self_switches[[@map_id, eventId, switch]]
|
||||
end
|
||||
@@ -7,6 +7,9 @@ class TilemapRenderer
|
||||
|
||||
|
||||
# Examples:
|
||||
#
|
||||
# Normal tile IDs start at 384
|
||||
#
|
||||
# 1 => [["Sand shore"], ["Flowers2"]],
|
||||
# 2 => [[], ["Flowers2", "Waterfall", "Waterfall crest", "Waterfall bottom"]],
|
||||
# 6 => [["Water rock", "Sea deep"], []]
|
||||
@@ -30,7 +33,11 @@ class TilemapRenderer
|
||||
1023 => "flowers_red[10]",
|
||||
1031 => "flowers_grey[10]",
|
||||
1039 => "flowers_white[10]",
|
||||
}
|
||||
},
|
||||
3 => { #interior
|
||||
385 => "tv_flicker_left",
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
def add_extra_autotiles(tileset_id)
|
||||
@@ -94,5 +101,18 @@ class TilemapRenderer
|
||||
refresh_tile_src_rect(tile, tile_id)
|
||||
end
|
||||
|
||||
|
||||
def refresh_tile_z(tile, map, y, layer, tile_id)
|
||||
if false#tile.shows_reflection
|
||||
tile.z = -2000
|
||||
elsif tile.bridge && $PokemonGlobal.bridge > 0
|
||||
tile.z = 0
|
||||
else
|
||||
priority = tile.priority
|
||||
tile.z = (priority == 0) ? 0 : (y * SOURCE_TILE_HEIGHT) + (priority * SOURCE_TILE_HEIGHT) + SOURCE_TILE_HEIGHT + 1
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ module Settings
|
||||
FUSION_ICON_SPRITE_OFFSET = 10
|
||||
|
||||
#Infinite fusion settings
|
||||
NB_POKEMON = 501
|
||||
NB_POKEMON = 565
|
||||
CUSTOM_BASE_SPRITES_FOLDER = "Graphics/CustomBattlers/local_sprites/BaseSprites/"
|
||||
CUSTOM_BATTLERS_FOLDER = "Graphics/CustomBattlers/"
|
||||
CUSTOM_SPRITES_TO_IMPORT_FOLDER = "Graphics/CustomBattlers/Sprites to import/"
|
||||
|
||||
@@ -114,79 +114,9 @@ ItemHandlers::UseFromBag.add(:LANTERN, proc { |item|
|
||||
next true
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:TRANSGENDERSTONE, proc { |item, pokemon, scene|
|
||||
if pokemon.gender == 0
|
||||
pokemon.makeFemale
|
||||
scene.pbRefresh
|
||||
scene.pbDisplay(_INTL("The Pokémon became female!"))
|
||||
next true
|
||||
elsif pokemon.gender == 1
|
||||
pokemon.makeMale
|
||||
scene.pbRefresh
|
||||
scene.pbDisplay(_INTL("The Pokémon became male!"))
|
||||
|
||||
next true
|
||||
else
|
||||
scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
next false
|
||||
end
|
||||
})
|
||||
|
||||
# NOT FULLY IMPLEMENTED
|
||||
ItemHandlers::UseOnPokemon.add(:SECRETCAPSULE, proc { |item, poke, scene|
|
||||
abilityList = poke.getAbilityList
|
||||
numAbilities = abilityList[0].length
|
||||
|
||||
if numAbilities <= 2
|
||||
scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
next false
|
||||
elsif abilityList[0].length <= 3
|
||||
if changeHiddenAbility1(abilityList, scene, poke)
|
||||
next true
|
||||
end
|
||||
next false
|
||||
else
|
||||
if changeHiddenAbility2(abilityList, scene, poke)
|
||||
next true
|
||||
end
|
||||
next false
|
||||
end
|
||||
})
|
||||
|
||||
def changeHiddenAbility1(abilityList, scene, poke)
|
||||
abID1 = abilityList[0][2]
|
||||
msg = _INTL("Change {1}'s ability to {2}?", poke.name, PBAbilities.getName(abID1))
|
||||
if Kernel.pbConfirmMessage(_INTL(msg))
|
||||
poke.setAbility(2)
|
||||
abilName1 = PBAbilities.getName(abID1)
|
||||
scene.pbDisplay(_INTL("{1}'s ability was changed to {2}!", poke.name, PBAbilities.getName(abID1)))
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
def changeHiddenAbility2(abilityList, scene, poke)
|
||||
return false if !Kernel.pbConfirmMessage(_INTL("Change {1}'s ability?", poke.name))
|
||||
|
||||
abID1 = abilityList[0][2]
|
||||
abID2 = abilityList[0][3]
|
||||
|
||||
abilName2 = PBAbilities.getName(abID1)
|
||||
abilName3 = PBAbilities.getName(abID2)
|
||||
|
||||
if (Kernel.pbMessage("Choose an ability.", [_INTL("{1}", abilName2), _INTL("{1}", abilName3)], 2)) == 0
|
||||
poke.setAbility(2)
|
||||
scene.pbDisplay(_INTL("{1}'s ability was changed to {2}!", poke.name, abilName2))
|
||||
else
|
||||
return false
|
||||
end
|
||||
poke.setAbility(3)
|
||||
scene.pbDisplay(_INTL("{1}'s ability was changed to {2}!", poke.name, abilName3))
|
||||
return true
|
||||
end
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:ROCKETMEAL, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:ROCKETMEAL, proc { |item, quantity, pokemon, scene|
|
||||
next pbHPItem(pokemon, 100, scene)
|
||||
})
|
||||
|
||||
@@ -194,7 +124,7 @@ ItemHandlers::BattleUseOnPokemon.add(:ROCKETMEAL, proc { |item, pokemon, battler
|
||||
next pbBattleHPItem(pokemon, battler, 100, scene)
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:FANCYMEAL, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:FANCYMEAL, proc { |item, quantity, pokemon, scene|
|
||||
next pbHPItem(pokemon, 100, scene)
|
||||
})
|
||||
|
||||
@@ -202,7 +132,7 @@ ItemHandlers::BattleUseOnPokemon.add(:FANCYMEAL, proc { |item, pokemon, battler,
|
||||
next pbBattleHPItem(pokemon, battler, 100, scene)
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:COFFEE, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:COFFEE, proc { |item, quantity, pokemon, scene|
|
||||
next pbHPItem(pokemon, 50, scene)
|
||||
})
|
||||
|
||||
@@ -210,7 +140,7 @@ ItemHandlers::BattleUseOnPokemon.add(:COFFEE, proc { |item, pokemon, battler, sc
|
||||
next pbBattleHPItem(pokemon, battler, 50, scene)
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:RAGECANDYBAR, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:RAGECANDYBAR, proc { |item, quantity, pokemon, scene|
|
||||
if pokemon.level <= 1
|
||||
scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
next false
|
||||
@@ -221,7 +151,7 @@ ItemHandlers::UseOnPokemon.add(:RAGECANDYBAR, proc { |item, pokemon, scene|
|
||||
end
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:INCUBATOR, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:INCUBATOR, proc { |item, quantity, pokemon, scene|
|
||||
if pokemon.egg?
|
||||
if pokemon.eggsteps <= 1
|
||||
scene.pbDisplay(_INTL("The egg is already ready to hatch!"))
|
||||
@@ -240,7 +170,7 @@ ItemHandlers::UseOnPokemon.add(:INCUBATOR, proc { |item, pokemon, scene|
|
||||
end
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:MISTSTONE, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:MISTSTONE, proc { |item, quantity, pokemon, scene|
|
||||
next false if pokemon.egg?
|
||||
if pbForceEvo(pokemon)
|
||||
next true
|
||||
@@ -610,7 +540,7 @@ def useSplicerFromField(item)
|
||||
return fusion_success
|
||||
end
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:DNAREVERSER, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:DNAREVERSER, proc { |item, quantity, pokemon, scene|
|
||||
if !pokemon.isFusion?
|
||||
scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
next false
|
||||
@@ -651,7 +581,7 @@ def reverseFusion(pokemon)
|
||||
}
|
||||
end
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:INFINITEREVERSERS, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:INFINITEREVERSERS, proc { |item, quantity, pokemon, scene|
|
||||
if !pokemon.isFusion?
|
||||
scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
next false
|
||||
@@ -682,127 +612,6 @@ ItemHandlers::UseOnPokemon.add(:INFINITEREVERSERS, proc { |item, pokemon, scene|
|
||||
next false
|
||||
})
|
||||
|
||||
#
|
||||
# def pbDNASplicing(pokemon, scene, supersplicers = false, superSplicer = false)
|
||||
# if (pokemon.species <= NB_POKEMON)
|
||||
# if pokemon.fused != nil
|
||||
# if $player.party.length >= 6
|
||||
# scene.pbDisplay(_INTL("Your party is full! You can't unfuse {1}.", pokemon.name))
|
||||
# return false
|
||||
# else
|
||||
# $player.party[$player.party.length] = pokemon.fused
|
||||
# pokemon.fused = nil
|
||||
# pokemon.form = 0
|
||||
# scene.pbHardRefresh
|
||||
# scene.pbDisplay(_INTL("{1} changed Forme!", pokemon.name))
|
||||
# return true
|
||||
# end
|
||||
# else
|
||||
# chosen = scene.pbChoosePokemon(_INTL("Fuse with which Pokémon?"))
|
||||
# if chosen >= 0
|
||||
# poke2 = $player.party[chosen]
|
||||
# if (poke2.species <= NB_POKEMON) && poke2 != pokemon
|
||||
# #check if fainted
|
||||
# if pokemon.hp == 0 || poke2.hp == 0
|
||||
# scene.pbDisplay(_INTL("A fainted Pokémon cannot be fused!"))
|
||||
# return false
|
||||
# end
|
||||
# if pbFuse(pokemon, poke2, supersplicers)
|
||||
# pbRemovePokemonAt(chosen)
|
||||
# end
|
||||
# elsif pokemon == poke2
|
||||
# scene.pbDisplay(_INTL("{1} can't be fused with itself!", pokemon.name))
|
||||
# return false
|
||||
# else
|
||||
# scene.pbDisplay(_INTL("{1} can't be fused with {2}.", poke2.name, pokemon.name))
|
||||
# return false
|
||||
#
|
||||
# end
|
||||
#
|
||||
# else
|
||||
# return false
|
||||
# end
|
||||
# end
|
||||
# else
|
||||
# return true if pbUnfuse(pokemon, scene, supersplicers)
|
||||
#
|
||||
# #unfuse
|
||||
# end
|
||||
# end
|
||||
#
|
||||
# def pbUnfuse(pokemon, scene, supersplicers, pcPosition = nil)
|
||||
# #pcPosition nil : unfusing from party
|
||||
# #pcPosition [x,x] : unfusing from pc
|
||||
# #
|
||||
#
|
||||
# if (pokemon.obtain_method == 2 || pokemon.ot != $player.name) # && !canunfuse
|
||||
# scene.pbDisplay(_INTL("You can't unfuse a Pokémon obtained in a trade!"))
|
||||
# return false
|
||||
# else
|
||||
# if Kernel.pbConfirmMessageSerious(_INTL("Should {1} be unfused?", pokemon.name))
|
||||
# if pokemon.species > (NB_POKEMON * NB_POKEMON) + NB_POKEMON #triple fusion
|
||||
# scene.pbDisplay(_INTL("{1} cannot be unfused.", pokemon.name))
|
||||
# return false
|
||||
# elsif $player.party.length >= 6 && !pcPosition
|
||||
# scene.pbDisplay(_INTL("Your party is full! You can't unfuse {1}.", pokemon.name))
|
||||
# return false
|
||||
# else
|
||||
# scene.pbDisplay(_INTL("Unfusing ... "))
|
||||
# scene.pbDisplay(_INTL(" ... "))
|
||||
# scene.pbDisplay(_INTL(" ... "))
|
||||
#
|
||||
# bodyPoke = getBasePokemonID(pokemon.species, true)
|
||||
# headPoke = getBasePokemonID(pokemon.species, false)
|
||||
#
|
||||
#
|
||||
# if pokemon.exp_when_fused_head == nil || pokemon.exp_when_fused_body == nil
|
||||
# new_level = calculateUnfuseLevelOldMethod(pokemon, supersplicers)
|
||||
# body_level = new_level
|
||||
# head_level = new_level
|
||||
# poke1 = Pokemon.new(bodyPoke, body_level)
|
||||
# poke2 = Pokemon.new(headPoke, head_level)
|
||||
# else
|
||||
# exp_body = pokemon.exp_when_fused_body + pokemon.exp_gained_since_fused
|
||||
# exp_head = pokemon.exp_when_fused_head + pokemon.exp_gained_since_fused
|
||||
#
|
||||
# poke1 = Pokemon.new(bodyPoke, pokemon.level)
|
||||
# poke2 = Pokemon.new(headPoke, pokemon.level)
|
||||
# poke1.exp = exp_body
|
||||
# poke2.exp = exp_head
|
||||
# end
|
||||
#
|
||||
# #poke1 = PokeBattle_Pokemon.new(bodyPoke, lev, $player)
|
||||
# #poke2 = PokeBattle_Pokemon.new(headPoke, lev, $player)
|
||||
#
|
||||
# if pcPosition == nil
|
||||
# box = pcPosition[0]
|
||||
# index = pcPosition[1]
|
||||
# $PokemonStorage.pbStoreToBox(poke2, box, index)
|
||||
# else
|
||||
# Kernel.pbAddPokemonSilent(poke2, poke2.level)
|
||||
# end
|
||||
# #On ajoute l'autre dans le pokedex aussi
|
||||
# $player.seen[poke1.species] = true
|
||||
# $player.owned[poke1.species] = true
|
||||
# $player.seen[poke2.species] = true
|
||||
# $player.owned[poke2.species] = true
|
||||
#
|
||||
# pokemon.species = poke1.species
|
||||
# pokemon.level = poke1.level
|
||||
# pokemon.name = poke1.name
|
||||
# pokemon.moves = poke1.moves
|
||||
# pokemon.obtain_method = 0
|
||||
# poke1.obtain_method = 0
|
||||
#
|
||||
# #scene.pbDisplay(_INTL(p1.to_s + " " + p2.to_s))
|
||||
# scene.pbHardRefresh
|
||||
# scene.pbDisplay(_INTL("Your Pokémon were successfully unfused! "))
|
||||
# return true
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
|
||||
def calculateUnfuseLevelOldMethod(pokemon, supersplicers)
|
||||
if pokemon.level > 1
|
||||
if supersplicers
|
||||
@@ -847,9 +656,7 @@ def drawPokemonType(pokemon_id, x_pos = 192, y_pos = 264)
|
||||
return viewport
|
||||
end
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:SUPERSPLICERS, proc { |item, pokemon, scene|
|
||||
next true if pbDNASplicing(pokemon, scene, item)
|
||||
})
|
||||
|
||||
|
||||
def returnItemsToBag(pokemon, poke2)
|
||||
|
||||
@@ -865,120 +672,9 @@ def returnItemsToBag(pokemon, poke2)
|
||||
poke2.item = nil
|
||||
end
|
||||
|
||||
# A AJOUTER: l'attribut dmgup ne modifie presentement pas
|
||||
# le damage d'une attaque
|
||||
#
|
||||
ItemHandlers::UseOnPokemon.add(:DAMAGEUP, proc { |item, pokemon, scene|
|
||||
move = scene.pbChooseMove(pokemon, _INTL("Boost Damage of which move?"))
|
||||
if move >= 0
|
||||
# if pokemon.moves[move].damage==0 || pokemon.moves[move].accuracy<=5 || pokemon.moves[move].dmgup >=3
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# else
|
||||
# pokemon.moves[move].dmgup+=1
|
||||
# pokemon.moves[move].damage +=5
|
||||
# pokemon.moves[move].accuracy -=5
|
||||
|
||||
# movename=PBMoves.getName(pokemon.moves[move].id)
|
||||
# scene.pbDisplay(_INTL("{1}'s damage increased.",movename))
|
||||
# next true
|
||||
scene.pbDisplay(_INTL("This item has not been implemented into the game yet. It had no effect."))
|
||||
next false
|
||||
# end
|
||||
end
|
||||
})
|
||||
|
||||
##New "stones"
|
||||
# ItemHandlers::UseOnPokemon.add(:UPGRADE, proc { |item, pokemon, scene|
|
||||
# if (pokemon.isShadow? rescue false)
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# end
|
||||
# newspecies = pbCheckEvolution(pokemon, item)
|
||||
# if newspecies <= 0
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# else
|
||||
# pbFadeOutInWithMusic(99999) {
|
||||
# evo = PokemonEvolutionScene.new
|
||||
# evo.pbStartScreen(pokemon, newspecies)
|
||||
# evo.pbEvolution(false)
|
||||
# evo.pbEndScreen
|
||||
# scene.pbRefreshAnnotations(proc { |p| pbCheckEvolution(p, item) > 0 })
|
||||
# scene.pbRefresh
|
||||
# }
|
||||
# next true
|
||||
# end
|
||||
# })
|
||||
#
|
||||
# ItemHandlers::UseOnPokemon.add(:DUBIOUSDISC, proc { |item, pokemon, scene|
|
||||
# if (pokemon.isShadow? rescue false)
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# end
|
||||
# newspecies = pbCheckEvolution(pokemon, item)
|
||||
# if newspecies <= 0
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# else
|
||||
# pbFadeOutInWithMusic(99999) {
|
||||
# evo = PokemonEvolutionScene.new
|
||||
# evo.pbStartScreen(pokemon, newspecies)
|
||||
# evo.pbEvolution(false)
|
||||
# evo.pbEndScreen
|
||||
# scene.pbRefreshAnnotations(proc { |p| pbCheckEvolution(p, item) > 0 })
|
||||
# scene.pbRefresh
|
||||
# }
|
||||
# next true
|
||||
# end
|
||||
# })
|
||||
#
|
||||
# ItemHandlers::UseOnPokemon.add(:ICESTONE, proc { |item, pokemon, scene|
|
||||
# if (pokemon.isShadow? rescue false)
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# end
|
||||
# newspecies = pbCheckEvolution(pokemon, item)
|
||||
# if newspecies <= 0
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# else
|
||||
# pbFadeOutInWithMusic(99999) {
|
||||
# evo = PokemonEvolutionScene.new
|
||||
# evo.pbStartScreen(pokemon, newspecies)
|
||||
# evo.pbEvolution(false)
|
||||
# evo.pbEndScreen
|
||||
# scene.pbRefreshAnnotations(proc { |p| pbCheckEvolution(p, item) > 0 })
|
||||
# scene.pbRefresh
|
||||
# }
|
||||
# next true
|
||||
# end
|
||||
# })
|
||||
# #
|
||||
# ItemHandlers::UseOnPokemon.add(:MAGNETSTONE, proc { |item, pokemon, scene|
|
||||
# if (pokemon.isShadow? rescue false)
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# end
|
||||
# newspecies = pbCheckEvolution(pokemon, item)
|
||||
# if newspecies <= 0
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# else
|
||||
# pbFadeOutInWithMusic(99999) {
|
||||
# evo = PokemonEvolutionScene.new
|
||||
# evo.pbStartScreen(pokemon, newspecies)
|
||||
# evo.pbEvolution(false)
|
||||
# evo.pbEndScreen
|
||||
# scene.pbRefreshAnnotations(proc { |p| pbCheckEvolution(p, item) > 0 })
|
||||
# scene.pbRefresh
|
||||
# }
|
||||
# next true
|
||||
# end
|
||||
# })
|
||||
|
||||
# easter egg for evolving shellder into slowbro's tail
|
||||
ItemHandlers::UseOnPokemon.add(:SLOWPOKETAIL, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:SLOWPOKETAIL, proc { |item, quantity, pokemon, scene|
|
||||
echoln pokemon.species
|
||||
next false if pokemon.species != :SHELLDER
|
||||
pbFadeOutInWithMusic(99999) {
|
||||
@@ -992,51 +688,8 @@ ItemHandlers::UseOnPokemon.add(:SLOWPOKETAIL, proc { |item, pokemon, scene|
|
||||
next true
|
||||
|
||||
})
|
||||
#
|
||||
# ItemHandlers::UseOnPokemon.add(:SHINYSTONE, proc { |item, pokemon, scene|
|
||||
# if (pokemon.isShadow? rescue false)
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# end
|
||||
# newspecies = pbCheckEvolution(pokemon, item)
|
||||
# if newspecies <= 0
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# else
|
||||
# pbFadeOutInWithMusic(99999) {
|
||||
# evo = PokemonEvolutionScene.new
|
||||
# evo.pbStartScreen(pokemon, newspecies)
|
||||
# evo.pbEvolution(false)
|
||||
# evo.pbEndScreen
|
||||
# scene.pbRefreshAnnotations(proc { |p| pbCheckEvolution(p, item) > 0 })
|
||||
# scene.pbRefresh
|
||||
# }
|
||||
# next true
|
||||
# end
|
||||
# })
|
||||
#
|
||||
# ItemHandlers::UseOnPokemon.add(:DAWNSTONE, proc { |item, pokemon, scene|
|
||||
# if (pokemon.isShadow? rescue false)
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# end
|
||||
# newspecies = pbCheckEvolution(pokemon, item)
|
||||
# if newspecies <= 0
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# else
|
||||
# pbFadeOutInWithMusic(99999) {
|
||||
# evo = PokemonEvolutionScene.new
|
||||
# evo.pbStartScreen(pokemon, newspecies)
|
||||
# evo.pbEvolution(false)
|
||||
# evo.pbEndScreen
|
||||
# scene.pbRefreshAnnotations(proc { |p| pbCheckEvolution(p, item) > 0 })
|
||||
# scene.pbRefresh
|
||||
# }
|
||||
# next true
|
||||
# end
|
||||
# })
|
||||
ItemHandlers::UseOnPokemon.add(:POISONMUSHROOM, proc { |item, pkmn, scene|
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:POISONMUSHROOM, proc { |item, quantity, pokemon, scene|
|
||||
if pkmn.status != :POISON
|
||||
pkmn.status = :POISON
|
||||
scene.pbRefresh
|
||||
@@ -1053,74 +706,25 @@ ItemHandlers::BattleUseOnPokemon.add(:POISONMUSHROOM, proc { |item, pokemon, bat
|
||||
pbBattleHPItem(pokemon, battler, 10, scene)
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:TINYMUSHROOM, proc { |item, pkmn, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:TINYMUSHROOM, proc { |item, quantity, pokemon, scene|
|
||||
next pbHPItem(pkmn, 10, scene)
|
||||
})
|
||||
ItemHandlers::BattleUseOnPokemon.add(:TINYMUSHROOM, proc { |item, pokemon, battler, choices, scene|
|
||||
next pbBattleHPItem(pokemon, battler, 50, scene)
|
||||
})
|
||||
ItemHandlers::UseOnPokemon.add(:BIGMUSHROOM, proc { |item, pkmn, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:BIGMUSHROOM, proc { |item, quantity, pokemon, scene|
|
||||
next pbHPItem(pkmn, 10, scene)
|
||||
})
|
||||
ItemHandlers::BattleUseOnPokemon.add(:BIGMUSHROOM, proc { |item, pokemon, battler, choices, scene|
|
||||
next pbBattleHPItem(pokemon, battler, 50, scene)
|
||||
})
|
||||
ItemHandlers::UseOnPokemon.add(:BALMMUSHROOM, proc { |item, pkmn, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:BALMMUSHROOM, proc { |item, quantity, pokemon, scene|
|
||||
next pbHPItem(pkmn, 999, scene)
|
||||
})
|
||||
ItemHandlers::BattleUseOnPokemon.add(:BALMMUSHROOM, proc { |item, pokemon, battler, choices, scene|
|
||||
next pbBattleHPItem(pokemon, battler, 999, scene)
|
||||
})
|
||||
|
||||
#
|
||||
# #TRACKER (for roaming legendaries)
|
||||
# ItemHandlers::UseInField.add(:REVEALGLASS, proc { |item|
|
||||
# if Settings::ROAMING_SPECIES.length == 0
|
||||
# Kernel.pbMessage(_INTL("No roaming Pokémon defined."))
|
||||
# else
|
||||
# text = "\\l[8]"
|
||||
# min = $game_switches[350] ? 0 : 1
|
||||
# for i in min...Settings::ROAMING_SPECIES.length
|
||||
# poke = Settings::ROAMING_SPECIES[i]
|
||||
# next if poke == PBSPecies::FEEBAS
|
||||
# if $game_switches[poke[2]]
|
||||
# status = $PokemonGlobal.roamPokemon[i]
|
||||
# if status == true
|
||||
# if $PokemonGlobal.roamPokemonCaught[i]
|
||||
# text += _INTL("{1} has been caught.",
|
||||
# PBSpecies.getName(getID(PBSpecies, poke[0])))
|
||||
# else
|
||||
# text += _INTL("{1} has been defeated.",
|
||||
# PBSpecies.getName(getID(PBSpecies, poke[0])))
|
||||
# end
|
||||
# else
|
||||
# curmap = $PokemonGlobal.roamPosition[i]
|
||||
# if curmap
|
||||
# mapinfos = $RPGVX ? load_data("Data/MapInfos.rvdata") : load_data("Data/MapInfos.rxdata")
|
||||
#
|
||||
# if curmap == $game_map.map_id
|
||||
# text += _INTL("Beep beep! {1} appears to be nearby!",
|
||||
# PBSpecies.getName(getID(PBSpecies, poke[0])))
|
||||
# else
|
||||
# text += _INTL("{1} is roaming around {3}",
|
||||
# PBSpecies.getName(getID(PBSpecies, poke[0])), curmap,
|
||||
# mapinfos[curmap].name, (curmap == $game_map.map_id) ? _INTL("(this route!)") : "")
|
||||
# end
|
||||
# else
|
||||
# text += _INTL("{1} is roaming in an unknown area.",
|
||||
# PBSpecies.getName(getID(PBSpecies, poke[0])), poke[1])
|
||||
# end
|
||||
# end
|
||||
# else
|
||||
# #text+=_INTL("{1} does not appear to be roaming.",
|
||||
# # PBSpecies.getName(getID(PBSpecies,poke[0])),poke[1],poke[2])
|
||||
# end
|
||||
# text += "\n" if i < Settings::ROAMING_SPECIES.length - 1
|
||||
# end
|
||||
# Kernel.pbMessage(text)
|
||||
# end
|
||||
# })
|
||||
|
||||
####EXP. ALL
|
||||
# Methodes relative a l'exp sont pas encore la et pas compatibles
|
||||
# avec cette version de essentials donc
|
||||
@@ -1142,18 +746,18 @@ ItemHandlers::UseFromBag.add(:EXPALLOFF, proc { |item|
|
||||
ItemHandlers::BattleUseOnPokemon.add(:BANANA, proc { |item, pokemon, battler, scene|
|
||||
next pbBattleHPItem(pokemon, battler, 30, scene)
|
||||
})
|
||||
ItemHandlers::UseOnPokemon.add(:BANANA, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:BANANA, proc { |item, quantity, pokemon, scene|
|
||||
next pbHPItem(pokemon, 30, scene)
|
||||
})
|
||||
|
||||
ItemHandlers::BattleUseOnPokemon.add(:GOLDENBANANA, proc { |item, pokemon, battler, scene|
|
||||
next pbBattleHPItem(pokemon, battler, 50, scene)
|
||||
})
|
||||
ItemHandlers::UseOnPokemon.add(:GOLDENBANANA, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:GOLDENBANANA, proc { |item, quantity, pokemon, scene|
|
||||
next pbHPItem(pokemon, 50, scene)
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:TRANSGENDERSTONE, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:TRANSGENDERSTONE, proc { |item, quantity, pokemon, scene|
|
||||
if pokemon.gender == 0
|
||||
pokemon.makeFemale
|
||||
scene.pbRefresh
|
||||
@@ -1198,7 +802,7 @@ ItemHandlers::UseOnPokemon.add(:TRANSGENDERSTONE, proc { |item, pokemon, scene|
|
||||
# })
|
||||
|
||||
# NOT FULLY IMPLEMENTED
|
||||
ItemHandlers::UseOnPokemon.add(:SECRETCAPSULE, proc { |item, poke, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:SECRETCAPSULE,proc { |item, quantity, pokemon, scene|
|
||||
abilityList = poke.getAbilityList
|
||||
numAbilities = abilityList[0].length
|
||||
|
||||
@@ -1251,23 +855,23 @@ def changeHiddenAbility2(abilityList, scene, poke)
|
||||
return true
|
||||
end
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:ROCKETMEAL, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:ROCKETMEAL,proc { |item, quantity, pokemon, scene|
|
||||
next pbHPItem(pokemon, 100, scene)
|
||||
})
|
||||
|
||||
ItemHandlers::BattleUseOnPokemon.add(:ROCKETMEAL, proc { |item, pokemon, battler, scene|
|
||||
ItemHandlers::BattleUseOnPokemon.add(:ROCKETMEAL, proc { |item, pokemon, battler, choices, scene|
|
||||
next pbBattleHPItem(pokemon, battler, 100, scene)
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:FANCYMEAL, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:FANCYMEAL, proc { |item, quantity, pokemon, scene|
|
||||
next pbHPItem(pokemon, 100, scene)
|
||||
})
|
||||
|
||||
ItemHandlers::BattleUseOnPokemon.add(:FANCYMEAL, proc { |item, pokemon, battler, scene|
|
||||
ItemHandlers::BattleUseOnPokemon.add(:FANCYMEAL,proc { |item, pokemon, battler, choices, scene|
|
||||
next pbBattleHPItem(pokemon, battler, 100, scene)
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:RAGECANDYBAR, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:RAGECANDYBAR, proc { |item, quantity, pokemon, scene|
|
||||
if pokemon.level <= 1
|
||||
scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
next false
|
||||
@@ -1278,7 +882,7 @@ ItemHandlers::UseOnPokemon.add(:RAGECANDYBAR, proc { |item, pokemon, scene|
|
||||
end
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:INCUBATOR, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:INCUBATOR, proc { |item, quantity, pokemon, scene|
|
||||
if pokemon.egg?
|
||||
if pokemon.steps_to_hatch <= 1
|
||||
scene.pbDisplay(_INTL("The egg is already ready to hatch!"))
|
||||
@@ -1297,7 +901,7 @@ ItemHandlers::UseOnPokemon.add(:INCUBATOR, proc { |item, pokemon, scene|
|
||||
end
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:INCUBATOR_NORMAL, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:INCUBATOR_NORMAL, proc { |item, quantity, pokemon, scene|
|
||||
if pokemon.egg?
|
||||
steps = pokemon.steps_to_hatch
|
||||
steps = (steps / 1.5).ceil
|
||||
@@ -1336,7 +940,7 @@ ItemHandlers::UseOnPokemon.add(:INCUBATOR_NORMAL, proc { |item, pokemon, scene|
|
||||
end
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:MISTSTONE, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:MISTSTONE, proc { |item, quantity, pokemon, scene|
|
||||
next false if pokemon.egg?
|
||||
if pbForceEvo(pokemon)
|
||||
next true
|
||||
@@ -1394,50 +998,27 @@ end
|
||||
## DNA SPLICERS #######
|
||||
#########################
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:INFINITESPLICERS, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:INFINITESPLICERS, proc { |item, quantity, pokemon, scene|
|
||||
next true if pbDNASplicing(pokemon, scene, item)
|
||||
next false
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:INFINITESPLICERS2, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:INFINITESPLICERS2,proc { |item, quantity, pokemon, scene|
|
||||
next true if pbDNASplicing(pokemon, scene, item)
|
||||
next false
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:DNASPLICERS, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:DNASPLICERS, proc { |item, quantity, pokemon, scene|
|
||||
next true if pbDNASplicing(pokemon, scene, item)
|
||||
next false
|
||||
})
|
||||
|
||||
ItemHandlers::UseOnPokemon.add(:SUPERSPLICERS, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:SUPERSPLICERS, proc { |item, quantity, pokemon, scene|
|
||||
next true if pbDNASplicing(pokemon, scene, item)
|
||||
})
|
||||
|
||||
|
||||
|
||||
# A AJOUTER: l'attribut dmgup ne modifie presentement pas
|
||||
# le damage d'une attaque
|
||||
#
|
||||
ItemHandlers::UseOnPokemon.add(:DAMAGEUP, proc { |item, pokemon, scene|
|
||||
move = scene.pbChooseMove(pokemon, _INTL("Boost Damage of which move?"))
|
||||
if move >= 0
|
||||
# if pokemon.moves[move].damage==0 || pokemon.moves[move].accuracy<=5 || pokemon.moves[move].dmgup >=3
|
||||
# scene.pbDisplay(_INTL("It won't have any effect."))
|
||||
# next false
|
||||
# else
|
||||
# pokemon.moves[move].dmgup+=1
|
||||
# pokemon.moves[move].damage +=5
|
||||
# pokemon.moves[move].accuracy -=5
|
||||
|
||||
# movename=PBMoves.getName(pokemon.moves[move].id)
|
||||
# scene.pbDisplay(_INTL("{1}'s damage increased.",movename))
|
||||
# next true
|
||||
scene.pbDisplay(_INTL("This item has not been implemented into the game yet. It had no effect."))
|
||||
next false
|
||||
# end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
ItemHandlers::UseFromBag.add(:DEVONSCOPE, proc { |item|
|
||||
pbQuestlog()
|
||||
@@ -1480,7 +1061,7 @@ ItemHandlers::UseFromBag.add(:EXPALLOFF, proc { |item|
|
||||
ItemHandlers::BattleUseOnPokemon.add(:BANANA, proc { |item, pokemon, battler, scene|
|
||||
next pbBattleHPItem(pokemon, battler, 30, scene)
|
||||
})
|
||||
ItemHandlers::UseOnPokemon.add(:BANANA, proc { |item, pokemon, scene|
|
||||
ItemHandlers::UseOnPokemon.add(:BANANA, proc { |item, quantity, pokemon, scene|
|
||||
next pbHPItem(pokemon, 30, scene)
|
||||
})
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Game_Map
|
||||
|
||||
alias pokemonEssentials_GameMap_setup setup
|
||||
def scroll_direction
|
||||
return 0 if @scroll_distance_x == 0 && @scroll_distance_y == 0
|
||||
if @scroll_distance_x < 0
|
||||
return DIRECTION_LEFT
|
||||
elsif @scroll_distance_x > 0
|
||||
return DIRECTION_RIGHT
|
||||
elsif @scroll_distance_y < 0
|
||||
return DIRECTION_UP
|
||||
elsif @scroll_distance_y > 0
|
||||
return DIRECTION_DOWN
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
end
|
||||
@@ -86,8 +86,98 @@ class Sprite_Character
|
||||
end
|
||||
end
|
||||
|
||||
def refresh_graphic
|
||||
return if !should_update?
|
||||
@manual_refresh=false
|
||||
@tile_id = @character.tile_id
|
||||
@character_name = @character.character_name
|
||||
@character_hue = @character.character_hue
|
||||
@oldbushdepth = @character.bush_depth
|
||||
@charbitmap&.dispose
|
||||
@charbitmap = nil
|
||||
@bushbitmap&.dispose
|
||||
@bushbitmap = nil
|
||||
|
||||
if @tile_id >= 384
|
||||
@charbitmap = pbGetTileBitmap(@character.map.tileset_name, @tile_id,
|
||||
@character_hue, @character.width, @character.height)
|
||||
@charbitmapAnimated = false
|
||||
@spriteoffset = false
|
||||
@cw = Game_Map::TILE_WIDTH * @character.width
|
||||
@ch = Game_Map::TILE_HEIGHT * @character.height
|
||||
self.src_rect.set(0, 0, @cw, @ch)
|
||||
self.ox = @cw / 2
|
||||
self.oy = @ch
|
||||
elsif @character_name != ""
|
||||
|
||||
@charbitmap = updateCharacterBitmap()
|
||||
|
||||
RPG::Cache.retain("Graphics/Characters/", @character_name, @character_hue) if @character == $game_player
|
||||
@charbitmapAnimated = true
|
||||
|
||||
@spriteoffset = @character_name[/fish/i] || @character_name[/dive/i] || @character_name[/surf/i]
|
||||
|
||||
@cw = @charbitmap.width / 4
|
||||
@ch = @charbitmap.height / 4
|
||||
self.ox = @cw / 2
|
||||
else
|
||||
self.bitmap = nil
|
||||
@cw = 0
|
||||
@ch = 0
|
||||
@reflection&.update
|
||||
end
|
||||
@character.sprite_size = [@cw, @ch]
|
||||
end
|
||||
def update
|
||||
if self.pending_bitmap
|
||||
self.bitmap = self.pending_bitmap
|
||||
self.pending_bitmap = nil
|
||||
end
|
||||
return if @character.is_a?(Game_Event) && !@character.should_update?
|
||||
super
|
||||
refresh_graphic
|
||||
return if !@charbitmap
|
||||
@charbitmap.update if @charbitmapAnimated
|
||||
bushdepth = @character.bush_depth
|
||||
if bushdepth == 0
|
||||
if @character == $game_player
|
||||
self.bitmap = getClothedPlayerSprite()
|
||||
else
|
||||
self.bitmap = (@charbitmapAnimated) ? @charbitmap.bitmap : @charbitmap
|
||||
end
|
||||
else
|
||||
@bushbitmap = BushBitmap.new(@charbitmap, (@tile_id >= 384), bushdepth) if !@bushbitmap
|
||||
self.bitmap = @bushbitmap.bitmap
|
||||
end
|
||||
|
||||
self.visible = !@character.transparent
|
||||
if @tile_id == 0
|
||||
sx = @character.pattern * @cw
|
||||
sy = ((@character.direction - 2) / 2) * @ch
|
||||
self.src_rect.set(sx, sy, @cw, @ch)
|
||||
self.oy = (@spriteoffset rescue false) ? @ch - 16 : @ch
|
||||
self.oy -= @character.bob_height
|
||||
end
|
||||
if self.visible
|
||||
applyDayNightTone()
|
||||
end
|
||||
this_x = @character.screen_x
|
||||
this_x = ((this_x - (Graphics.width / 2)) * TilemapRenderer::ZOOM_X) + (Graphics.width / 2) if TilemapRenderer::ZOOM_X != 1
|
||||
self.x = this_x
|
||||
this_y = @character.screen_y
|
||||
this_y = ((this_y - (Graphics.height / 2)) * TilemapRenderer::ZOOM_Y) + (Graphics.height / 2) if TilemapRenderer::ZOOM_Y != 1
|
||||
self.y = this_y
|
||||
self.z = @character.screen_z(@ch)
|
||||
self.opacity = @character.opacity
|
||||
self.blend_type = @character.blend_type
|
||||
if @character.animation_id && @character.animation_id != 0
|
||||
animation = $data_animations[@character.animation_id]
|
||||
animation(animation, true, @character.animation_height || 3, @character.animation_regular_tone || false)
|
||||
@character.animation_id = 0
|
||||
end
|
||||
@reflection&.update
|
||||
@surfbase&.update
|
||||
end
|
||||
# def update
|
||||
# if self.pending_bitmap
|
||||
# self.bitmap = self.pending_bitmap
|
||||
@@ -0,0 +1,35 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Sprite_SurfBase
|
||||
|
||||
def initialize(parent_sprite, viewport = nil)
|
||||
@parent_sprite = parent_sprite
|
||||
@sprite = nil
|
||||
@viewport = viewport
|
||||
@disposed = false
|
||||
|
||||
@surfbitmap = update_surf_bitmap(:SURF)
|
||||
@divebitmap = update_surf_bitmap(:DIVE)
|
||||
|
||||
@cws = @surfbitmap.width / 4
|
||||
@chs = @surfbitmap.height / 4
|
||||
@cwd = @divebitmap.width / 4
|
||||
@chd = @divebitmap.height / 4
|
||||
update
|
||||
end
|
||||
|
||||
def update_surf_bitmap(type)
|
||||
species = $Trainer.surfing_pokemon
|
||||
path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "surfmon_board" if type == :SURF
|
||||
path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER + "divemon_Head" if type == :DIVE
|
||||
if species
|
||||
shape = species.shape
|
||||
basePath = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_SURFBASE_FOLDER
|
||||
action = "divemon" if type == :DIVE
|
||||
action = "surfmon" if type == :SURF
|
||||
path = "#{basePath}#{action}_#{shape.to_s}"
|
||||
end
|
||||
return AnimatedBitmap.new(path)
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,52 @@
|
||||
|
||||
class TrainerWalkingCharSprite
|
||||
|
||||
alias pokemonEssentials_TrainerWalkingCharSprite_initialize initialize
|
||||
def initialize(charset,viewport=nil,trainer=nil)
|
||||
@trainer=trainer
|
||||
pokemonEssentials_TrainerWalkingCharSprite_initialize(charset,viewport)
|
||||
|
||||
end
|
||||
def charset=(value)
|
||||
isPlayerCharacter = value == "walk" #todo: passe de l'ours à corriger
|
||||
echoln value
|
||||
@animbitmap&.dispose
|
||||
@animbitmap = nil
|
||||
bitmapFileName = sprintf("Graphics/Characters/%s", value)
|
||||
@charset = pbResolveBitmap(bitmapFileName)
|
||||
if @charset
|
||||
if isPlayerCharacter
|
||||
outfit_bitmap = _INTL("Graphics/Characters/players/outfits/{1}_{2}",value,$Trainer.outfit) if $Trainer && $Trainer.outfit
|
||||
@trainer = $Trainer if !@trainer
|
||||
@animbitmap = AnimatedBitmap.new(@charset)
|
||||
@animbitmap.bitmap = generateClothedBitmapStatic(@trainer)
|
||||
@animbitmap.bitmap.blt(0, 0, outfit_bitmap, outfit_bitmap.rect) if pbResolveBitmap(outfit_bitmap)
|
||||
else
|
||||
@animbitmap = AnimatedBitmap.new(@charset)
|
||||
end
|
||||
self.bitmap = @animbitmap.bitmap
|
||||
self.src_rect.set(0, 0, self.bitmap.width / 4, self.bitmap.height / 4)
|
||||
else
|
||||
self.bitmap = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
class UI::LoadContinuePanel
|
||||
def initialize_player_sprite
|
||||
meta = GameData::PlayerMetadata.get(@save_data[:player].character_ID)
|
||||
filename = pbGetPlayerCharset(meta.walk_charset, @save_data[:player], true)
|
||||
@sprites[:player] = TrainerWalkingCharSprite.new(filename, @viewport,@save_data[:player])
|
||||
if !@sprites[:player].bitmap
|
||||
raise _INTL("Overrides character {1}'s walking charset was not found (filename: \"{2}\").",
|
||||
@save_data[:player].character_ID, filename)
|
||||
end
|
||||
@sprites[:player].x = 48 - (@sprites[:player].bitmap.width / 8)
|
||||
@sprites[:player].y = 72 - (@sprites[:player].bitmap.height / 8)
|
||||
@sprites[:player].z = 1
|
||||
record_values(:player)
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,35 @@
|
||||
|
||||
#[FRAME1 [x,y]],[FRAME2 [x,y], etc.]
|
||||
#
|
||||
# exact number of pixels that the sprite needs to be moved for each frame
|
||||
# add 2 pixels on even frames
|
||||
module Outfit_Offsets
|
||||
BASE_OFFSET = [[0, 0], [0, 0], [0, 0], [0, 0]]
|
||||
|
||||
|
||||
RUN_OFFSETS_DOWN = [[0, 2], [0, 6], [0, 2], [0, 6]]
|
||||
RUN_OFFSETS_LEFT = [[-2, -2], [-2, -2], [-2, -2], [-2, -2]]
|
||||
RUN_OFFSETS_RIGHT = [[2, -2], [2, -2], [2, -2], [2, -2]]
|
||||
RUN_OFFSETS_UP = [[0, -2], [0, -2], [0, -2], [0, -2]]
|
||||
|
||||
SURF_OFFSETS_DOWN = [[0, -6], [0, -4], [0, -6], [0, -4]]
|
||||
SURF_OFFSETS_LEFT = [[-2, -10], [-2, -8], [-2, -10], [-2, -8]]
|
||||
SURF_OFFSETS_RIGHT = [[4, -10], [4, -8], [4, -10], [4, -8]]
|
||||
#SURF_OFFSETS_UP = [[0, -6], [0, -4], [0, -6], [0, -4]]
|
||||
SURF_OFFSETS_UP = [[0, -10], [0, -8], [0, -10], [0, -8]]
|
||||
|
||||
DIVE_OFFSETS_DOWN = [[0, -6], [0, -4], [0, -6], [0, -4]]
|
||||
DIVE_OFFSETS_LEFT = [[6, -8], [6, -6], [6, -8], [6, -6]]
|
||||
DIVE_OFFSETS_RIGHT = [[-6, -8], [-6, -6], [-6, -8], [-6, -6]]
|
||||
DIVE_OFFSETS_UP = [[0, -2], [0, 0], [0, -2], [0, 0]]
|
||||
|
||||
BIKE_OFFSETS_DOWN = [[0, -2], [2, 0], [0, -2], [-2, 0]]
|
||||
BIKE_OFFSETS_LEFT = [[-4, -4], [-2, -2], [-4, -4], [-6, -2]]
|
||||
BIKE_OFFSETS_RIGHT = [[4, -4], [2, -2], [4, -4], [6, -2]]
|
||||
BIKE_OFFSETS_UP = [[0, -2], [-2, 0], [0, -2], [2, 0]]
|
||||
|
||||
FISH_OFFSETS_DOWN = [[0, -6], [0, -2], [0, -8], [2, -6]]
|
||||
FISH_OFFSETS_LEFT = [[0, -8], [-6, -6], [0, -8], [2, -8]]
|
||||
FISH_OFFSETS_RIGHT = [[0, -8], [6, -6], [0, -8], [-2, -8]]
|
||||
FISH_OFFSETS_UP = [[0, -6], [0, -6], [0, -6], [2, -4]]
|
||||
end
|
||||
@@ -42,11 +42,17 @@ module Input
|
||||
$PokemonSystem.speedup_speed = 0 if !$PokemonSystem.speedup_speed || $PokemonSystem.speedup_speed == 0
|
||||
$GameSpeed = $PokemonSystem.speedup_speed
|
||||
$PokemonSystem.battle_speed = $GameSpeed
|
||||
|
||||
# Allow input to work during animations
|
||||
if $PokemonSystem.only_speedup_battles == 1
|
||||
Battle::AnimationHandler.process_speedup
|
||||
end
|
||||
else
|
||||
$GameSpeed = 0
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def self.speed_up_toggle
|
||||
$PokemonSystem.speedup_enabled = !$PokemonSystem.speedup_enabled
|
||||
pbPlayDecisionSE
|
||||
@@ -195,29 +201,37 @@ end
|
||||
# Fix for animation index crash
|
||||
#===============================================================================#
|
||||
class SpriteAnimation
|
||||
def update_animation
|
||||
new_index = ((System.uptime - @_animation_timer_start) / @_animation_time_per_frame).to_i
|
||||
if new_index >= @_animation_duration
|
||||
dispose_animation
|
||||
return
|
||||
end
|
||||
quick_update = (@_animation_index == new_index)
|
||||
@_animation_index = new_index
|
||||
frame_index = @_animation_index
|
||||
current_frame = @_animation.frames[frame_index]
|
||||
unless current_frame
|
||||
dispose_animation
|
||||
return
|
||||
end
|
||||
cell_data = current_frame.cell_data
|
||||
position = @_animation.position
|
||||
animation_set_sprites(@_animation_sprites, cell_data, position, quick_update)
|
||||
return if quick_update
|
||||
@_animation.timings.each do |timing|
|
||||
next if timing.frame != frame_index
|
||||
animation_process_timing(timing, @_animation_hit)
|
||||
class SpriteAnimation
|
||||
def update_animation
|
||||
# Speed up the animation by reducing the wait time between frames
|
||||
if $PokemonSystem.speedup_enabled && $GameSpeed > 1
|
||||
@_animation_time_per_frame *= 1.0 / $GameSpeed
|
||||
end
|
||||
|
||||
new_index = ((System.uptime - @_animation_timer_start) / @_animation_time_per_frame).to_i
|
||||
if new_index >= @_animation_duration
|
||||
dispose_animation
|
||||
return
|
||||
end
|
||||
quick_update = (@_animation_index == new_index)
|
||||
@_animation_index = new_index
|
||||
frame_index = @_animation_index
|
||||
current_frame = @_animation.frames[frame_index]
|
||||
unless current_frame
|
||||
dispose_animation
|
||||
return
|
||||
end
|
||||
cell_data = current_frame.cell_data
|
||||
position = @_animation.position
|
||||
animation_set_sprites(@_animation_sprites, cell_data, position, quick_update)
|
||||
return if quick_update
|
||||
@_animation.timings.each do |timing|
|
||||
next if timing.frame != frame_index
|
||||
animation_process_timing(timing, @_animation_hit)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
#===============================================================================#
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
class SpritesBitmapCache
|
||||
@@cache = {} # Cache storage for individual sprites
|
||||
@@usage_order = [] # Tracks usage order for LRU eviction
|
||||
|
||||
def getCache()
|
||||
return @@cache
|
||||
end
|
||||
|
||||
def get_bitmap(pif_sprite)
|
||||
sprite_key = get_cache_key(pif_sprite)
|
||||
if @@cache.key?(sprite_key)
|
||||
mark_key_as_recently_used(sprite_key)
|
||||
return @@cache[sprite_key].clone
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
def mark_key_as_recently_used(sprite_key)
|
||||
@@usage_order.delete(sprite_key)
|
||||
@@usage_order << sprite_key
|
||||
end
|
||||
|
||||
#Keys format: [type]_B[body]H[head]_letter
|
||||
# ex:
|
||||
# AUTOGEN_B12H12_
|
||||
# CUSTOM_B12H12_a
|
||||
# BASE_BH12_a
|
||||
# etc.
|
||||
def get_cache_key(pif_sprite)
|
||||
return "#{pif_sprite.type.to_s}_B#{pif_sprite.body_id}H#{pif_sprite.head_id}_#{pif_sprite.alt_letter}".to_sym
|
||||
end
|
||||
|
||||
#Keys format: AUTOGEN_B12H12_a
|
||||
def add(pif_sprite,bitmap)
|
||||
sprite_key = get_cache_key(pif_sprite)
|
||||
echoln "adding key #{sprite_key} to cache"
|
||||
@@cache[sprite_key] = bitmap.clone
|
||||
|
||||
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 sprite cache"
|
||||
end
|
||||
@@usage_order << sprite_key
|
||||
end
|
||||
|
||||
def clear
|
||||
@@cache = {}
|
||||
@@usage_order = []
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,98 @@
|
||||
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
|
||||
bitmap = @@spritesheet_cache.get_bitmap(pif_sprite)
|
||||
loaded_from_spritesheet=false
|
||||
|
||||
if !bitmap
|
||||
download_new_spritesheet(pif_sprite) if should_update_spritesheet?(pif_sprite) && download_allowed
|
||||
if pbResolveBitmap(getSpritesheetPath(pif_sprite))
|
||||
bitmap = load_bitmap_from_spritesheet(pif_sprite)
|
||||
loaded_from_spritesheet=true
|
||||
@@spritesheet_cache.add(pif_sprite, bitmap)
|
||||
else
|
||||
return nil
|
||||
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"
|
||||
return sprite_bitmap
|
||||
rescue Exception
|
||||
e = $!
|
||||
echoln "Error loading sprite: #{e}" if bitmap
|
||||
end
|
||||
end
|
||||
|
||||
def download_new_spritesheet(pif_sprite)
|
||||
spritesheet_file = getSpritesheetPath(pif_sprite)
|
||||
if download_spritesheet(pif_sprite,spritesheet_file)
|
||||
$updated_spritesheets << spritesheet_file
|
||||
update_downloaded_spritesheets_list()
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
def update_downloaded_spritesheets_list()
|
||||
File.open(Settings::UPDATED_SPRITESHEETS_CACHE, "w") do |file|
|
||||
$updated_spritesheets.each { |line| file.puts(line) }
|
||||
end
|
||||
end
|
||||
|
||||
def get_sprite_position_on_spritesheet(body_id,sprite_size,nb_column)
|
||||
row = body_id / nb_column
|
||||
col = body_id % nb_column
|
||||
# echoln "(#{col},#{row})"
|
||||
# Define the area of the sprite on the spritesheet
|
||||
sprite_x_position = col * sprite_size
|
||||
sprite_y_position = row * sprite_size
|
||||
return sprite_x_position, sprite_y_position
|
||||
end
|
||||
|
||||
|
||||
def extract_bitmap_to_file(pif_sprite, dest_folder)
|
||||
# Create the directory if it doesn't exist
|
||||
Dir.mkdir(dest_folder) unless Dir.exist?(dest_folder)
|
||||
single_sprite_bitmap=load_sprite(pif_sprite)
|
||||
|
||||
# Save the single sprite bitmap to a file
|
||||
file_path = "#{dest_folder}/#{head_id}.#{body_id}.png"
|
||||
single_sprite_bitmap.save_to_png(file_path)
|
||||
|
||||
# Dispose of the single sprite bitmap
|
||||
single_sprite_bitmap.dispose
|
||||
|
||||
# Return the path to the saved PNG file
|
||||
return file_path
|
||||
end
|
||||
|
||||
#Implemented for base and custom, not autogen
|
||||
def should_update_spritesheet?(spritesheet_file)
|
||||
return false
|
||||
end
|
||||
|
||||
def getSpritesheetPath(pif_sprite)
|
||||
return nil #implement in subclasses
|
||||
end
|
||||
|
||||
def clear_cache()
|
||||
@@spritesheet_cache.clear
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class PokemonGlobalMetadata
|
||||
attr_accessor :current_spritepack_date
|
||||
end
|
||||
160
Data/Scripts/998_InfiniteFusion/Sprites/AutogenExtracter.rb
Normal file
160
Data/Scripts/998_InfiniteFusion/Sprites/AutogenExtracter.rb
Normal file
@@ -0,0 +1,160 @@
|
||||
class AutogenExtracter < PIFSpriteExtracter
|
||||
SPRITESHEET_FOLDER_PATH = "Graphics\\Battlers\\spritesheets_autogen\\"
|
||||
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
|
||||
|
||||
@instance = new
|
||||
def self.instance
|
||||
@@instance ||= new # If @@instance is nil, create a new instance
|
||||
@@instance # Return the existing or new instance
|
||||
end
|
||||
|
||||
def load_bitmap_from_spritesheet(pif_sprite)
|
||||
body_id = pif_sprite.body_id
|
||||
spritesheet_file = getSpritesheetPath(pif_sprite)
|
||||
spritesheet_bitmap = AnimatedBitmap.new(spritesheet_file).bitmap
|
||||
|
||||
# Extract individual sprite
|
||||
sprite_x_position, sprite_y_position = get_sprite_position_on_spritesheet(body_id, SPRITE_SIZE, COLUMNS)
|
||||
src_rect = Rect.new(sprite_x_position, sprite_y_position, SPRITE_SIZE, SPRITE_SIZE)
|
||||
|
||||
bitmap = Bitmap.new(SPRITE_SIZE, SPRITE_SIZE)
|
||||
bitmap.blt(0, 0, spritesheet_bitmap, src_rect)
|
||||
|
||||
# Dispose of spritesheet if it's no longer needed
|
||||
spritesheet_bitmap.dispose
|
||||
return bitmap
|
||||
end
|
||||
|
||||
def getSpritesheetPath(pif_sprite)
|
||||
head_id = pif_sprite.head_id
|
||||
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
|
||||
# # Load spritesheet from disk if necessary
|
||||
# echoln "Loading spritesheet from disk: #{spritesheet_file}"
|
||||
# spritesheet_bitmap = AnimatedBitmap.new(spritesheet_file).bitmap
|
||||
#
|
||||
# # Extract individual sprite
|
||||
# sprite_x_position, sprite_y_position = get_sprite_position_on_spritesheet(body_id, SPRITE_SIZE, COLUMNS)
|
||||
# src_rect = Rect.new(sprite_x_position, sprite_y_position, SPRITE_SIZE, SPRITE_SIZE)
|
||||
#
|
||||
# sprite = Bitmap.new(SPRITE_SIZE, SPRITE_SIZE)
|
||||
# sprite.blt(0, 0, spritesheet_bitmap, src_rect)
|
||||
#
|
||||
# # Dispose of spritesheet if it's no longer needed
|
||||
# spritesheet_bitmap.dispose
|
||||
#
|
||||
# sprite
|
||||
# end
|
||||
# animatedBitmap = AnimatedBitmap.from_bitmap(sprite_bitmap)
|
||||
#
|
||||
# end_time = Time.now
|
||||
# echoln "finished load sprite in #{end_time - start_time} seconds"
|
||||
# echoln animatedBitmap
|
||||
# return animatedBitmap
|
||||
# end
|
||||
|
||||
def load_sprite_with_spritesheet_cache(pif_sprite)
|
||||
start_time = Time.now
|
||||
head_id = pif_sprite.head_id
|
||||
body_id = pif_sprite.body_id
|
||||
spritesheet_file = "#{SPRITESHEET_FOLDER_PATH}#{head_id}.png"
|
||||
|
||||
# Check cache before loading from disk
|
||||
spritesheet_bitmap = @@spritesheet_cache.fetch(spritesheet_file) do
|
||||
echoln "Loading spritesheet from disk: #{spritesheet_file}"
|
||||
AnimatedBitmap.new(spritesheet_file).bitmap
|
||||
end
|
||||
|
||||
sprite_x_position, sprite_y_position = get_sprite_position_on_spritesheet(body_id, SPRITE_SIZE, COLUMNS)
|
||||
src_rect = Rect.new(sprite_x_position, sprite_y_position, SPRITE_SIZE, SPRITE_SIZE)
|
||||
|
||||
sprite_bitmap = Bitmap.new(SPRITE_SIZE, SPRITE_SIZE)
|
||||
sprite_bitmap.blt(0, 0, spritesheet_bitmap, src_rect)
|
||||
|
||||
#spritesheet_bitmap.dispose # Dispose since not needed
|
||||
|
||||
animatedBitmap = AnimatedBitmap.from_bitmap(sprite_bitmap)
|
||||
|
||||
end_time = Time.now
|
||||
echoln "finished load sprite in #{end_time - start_time} seconds"
|
||||
|
||||
return animatedBitmap
|
||||
end
|
||||
end
|
||||
|
||||
# def extract_bitmap_to_file(head_id, body_id, folder)
|
||||
# # Create the directory if it doesn't exist
|
||||
# Dir.mkdir(folder) unless Dir.exist?(folder)
|
||||
#
|
||||
# # Load the entire spritesheet
|
||||
# spritesheet_file = "#{SPRITESHEET_FOLDER_PATH}#{head_id}.png"
|
||||
# spritesheet_bitmap = AnimatedBitmap.new(spritesheet_file).bitmap
|
||||
#
|
||||
# # Calculate the 0-based row and column from the sprite index
|
||||
# zero_index = body_id - 1
|
||||
# row = zero_index / COLUMNS
|
||||
# col = zero_index % COLUMNS
|
||||
#
|
||||
# # Define the area of the sprite on the spritesheet
|
||||
# sprite_x_position = col * SPRITE_SIZE
|
||||
# sprite_y_position = row * SPRITE_SIZE
|
||||
#
|
||||
# # Create a new bitmap for the single sprite
|
||||
# single_sprite_bitmap = Bitmap.new(SPRITE_SIZE, SPRITE_SIZE)
|
||||
# single_sprite_bitmap.blt(0, 0, spritesheet_bitmap, Rect.new(sprite_x_position, sprite_y_position, SPRITE_SIZE, SPRITE_SIZE))
|
||||
#
|
||||
# # Dispose of the spritesheet bitmap if it’s no longer needed
|
||||
# spritesheet_bitmap.dispose
|
||||
#
|
||||
# # Save the single sprite bitmap to a file
|
||||
# file_path = "#{folder}/#{head_id}.#{body_id}.png"
|
||||
# single_sprite_bitmap.save_to_png(file_path)
|
||||
#
|
||||
# # Dispose of the single sprite bitmap
|
||||
# single_sprite_bitmap.dispose
|
||||
#
|
||||
# # Return the path to the saved PNG file
|
||||
# return file_path
|
||||
# end
|
||||
#end
|
||||
#
|
||||
#
|
||||
# class SpritesBitmapCache
|
||||
# @@cache = {} # Cache storage for individual sprites
|
||||
# @@usage_order = [] # Tracks usage order for LRU eviction
|
||||
#
|
||||
# def self.fetch(pif_sprite)
|
||||
# sprite_key = "B#{pif_sprite.body_id}H#{pif_sprite.head_id}".to_sym
|
||||
# if @@cache.key?(sprite_key)
|
||||
# # Move key to the end to mark it as recently used
|
||||
# @@usage_order.delete(sprite_key)
|
||||
# @@usage_order << sprite_key
|
||||
# return @@cache[sprite_key]
|
||||
# end
|
||||
#
|
||||
# # Load sprite via block if not found in cache
|
||||
# sprite_bitmap = 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 sprite cache"
|
||||
# end
|
||||
#
|
||||
# # Add new sprite to cache and track its usage
|
||||
# @@cache[sprite_key] = sprite_bitmap
|
||||
# @@usage_order << sprite_key
|
||||
# sprite_bitmap
|
||||
# echoln @@cache
|
||||
# end
|
||||
# end
|
||||
@@ -0,0 +1,61 @@
|
||||
class BaseSpriteExtracter < PIFSpriteExtracter
|
||||
@instance = new
|
||||
|
||||
def self.instance
|
||||
@@instance ||= new # If @@instance is nil, create a new instance
|
||||
@@instance # Return the existing or new instance
|
||||
end
|
||||
|
||||
SPRITESHEET_FOLDER_PATH = "Graphics/CustomBattlers/spritesheets/spritesheets_base/"
|
||||
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)
|
||||
alt_letter = pif_sprite.alt_letter
|
||||
spritesheet_file = getSpritesheetPath(pif_sprite)
|
||||
spritesheet_bitmap = AnimatedBitmap.new(spritesheet_file).bitmap
|
||||
|
||||
letter_index = letters_to_index(alt_letter)
|
||||
sprite_x_position, sprite_y_position = get_sprite_position_on_spritesheet(letter_index, SPRITE_SIZE, NB_COLUMNS_BASESPRITES)
|
||||
src_rect = Rect.new(sprite_x_position, sprite_y_position, SPRITE_SIZE, SPRITE_SIZE)
|
||||
|
||||
sprite_bitmap = Bitmap.new(SPRITE_SIZE, SPRITE_SIZE)
|
||||
sprite_bitmap.blt(0, 0, spritesheet_bitmap, src_rect)
|
||||
spritesheet_bitmap.dispose # Dispose since not needed
|
||||
|
||||
return sprite_bitmap
|
||||
end
|
||||
|
||||
def letters_to_index(letters)
|
||||
letters = letters.downcase # Ensure input is case-insensitive
|
||||
index = 0
|
||||
letters.each_char do |char|
|
||||
index = index * 26 + (char.ord - 'a'.ord + 1)
|
||||
end
|
||||
#echoln "index: #{index}"
|
||||
return index
|
||||
end
|
||||
|
||||
def load_sprite_directly(head_id, body_id, alt_letter = "")
|
||||
load_sprite(PIFSprite.new(:CUSTOM, head_id, body_id, alt_letter))
|
||||
end
|
||||
|
||||
def getSpritesheetPath(pif_sprite)
|
||||
dex_number = getDexNumberForSpecies(pif_sprite.head_id)
|
||||
return "#{SPRITESHEET_FOLDER_PATH}#{dex_number}.png"
|
||||
end
|
||||
|
||||
def should_update_spritesheet?(pif_sprite)
|
||||
return false if !$updated_spritesheets
|
||||
return false if !downloadAllowed?()
|
||||
return false if requestRateExceeded?(Settings::CUSTOMSPRITES_RATE_LOG_FILE,Settings::CUSTOMSPRITES_ENTRIES_RATE_TIME_WINDOW,Settings::CUSTOMSPRITES_RATE_MAX_NB_REQUESTS,false)
|
||||
spritesheet_file = getSpritesheetPath(pif_sprite)
|
||||
return true if !pbResolveBitmap(spritesheet_file)
|
||||
|
||||
return !$updated_spritesheets.include?(spritesheet_file)
|
||||
end
|
||||
|
||||
def get_resize_scale
|
||||
return 3
|
||||
end
|
||||
end
|
||||
275
Data/Scripts/998_InfiniteFusion/Sprites/BattleSpriteLoader.rb
Normal file
275
Data/Scripts/998_InfiniteFusion/Sprites/BattleSpriteLoader.rb
Normal file
@@ -0,0 +1,275 @@
|
||||
class BattleSpriteLoader
|
||||
def initialize
|
||||
@download_allowed = true
|
||||
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
|
||||
|
||||
#random alt
|
||||
def load_pif_sprite(pif_sprite)
|
||||
case pif_sprite.type
|
||||
when :CUSTOM, :AUTOGEN
|
||||
load_fusion_sprite(pif_sprite.head_id, pif_sprite.body_id)
|
||||
when :BASE
|
||||
load_base_sprite(pif_sprite.head_id)
|
||||
end
|
||||
end
|
||||
|
||||
# Only preloads if the pokemon's sprite has been assigned an alt letter
|
||||
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
|
||||
pif_sprite = $PokemonGlobal.alt_sprite_substitutions[substitution_id] if $PokemonGlobal
|
||||
if !pif_sprite
|
||||
pif_sprite = get_pif_sprite_from_species(pokemon.species)
|
||||
end
|
||||
preload(pif_sprite)
|
||||
end
|
||||
|
||||
#loads a sprite into cache without actually returning it
|
||||
# Does not download spritesheet
|
||||
def preload(pif_sprite)
|
||||
echoln "preloading"
|
||||
previous_download_allowed = @download_allowed
|
||||
@download_allowed = false
|
||||
load_pif_sprite(pif_sprite)
|
||||
@download_allowed = previous_download_allowed
|
||||
end
|
||||
|
||||
def clear_sprites_cache(type)
|
||||
extractor = get_sprite_extractor_instance(type)
|
||||
extractor.clear_cache
|
||||
end
|
||||
|
||||
def load_from_dex_number(dex_number)
|
||||
if dex_number > NB_POKEMON
|
||||
if dex_number > ZAPMOLCUNO_NB #Triple Fusion
|
||||
return load_triple_fusion_sprite(dex_number)
|
||||
else
|
||||
#Regular fusion
|
||||
body_id = getBodyID(dex_number)
|
||||
head_id = getHeadID(dex_number, body_id)
|
||||
return load_fusion_sprite(head_id, body_id)
|
||||
end
|
||||
else
|
||||
#base pokemon
|
||||
return load_base_sprite(dex_number)
|
||||
end
|
||||
end
|
||||
|
||||
def obtain_fusion_pif_sprite(head_id,body_id)
|
||||
$PokemonGlobal.alt_sprite_substitutions = {} unless $PokemonGlobal.alt_sprite_substitutions
|
||||
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)
|
||||
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)
|
||||
if !loaded_sprite
|
||||
loaded_sprite = handle_unloaded_sprites(extractor,pif_sprite)
|
||||
end
|
||||
return loaded_sprite
|
||||
end
|
||||
|
||||
def load_base_sprite(dex_number)
|
||||
substitution_id = get_sprite_substitution_id_from_dex_number(dex_number)
|
||||
pif_sprite = $PokemonGlobal.alt_sprite_substitutions[substitution_id] if $PokemonGlobal
|
||||
if !pif_sprite
|
||||
pif_sprite = select_new_pif_base_sprite(dex_number)
|
||||
$PokemonGlobal.alt_sprite_substitutions[substitution_id] = pif_sprite if $PokemonGlobal
|
||||
end
|
||||
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)
|
||||
if !loaded_sprite
|
||||
loaded_sprite = handle_unloaded_sprites(extractor,pif_sprite)
|
||||
end
|
||||
return loaded_sprite
|
||||
end
|
||||
|
||||
def handle_unloaded_sprites(extractor,pif_sprite)
|
||||
if(extractor.is_a?(CustomSpriteExtracter)) #Custom failed to load, load an autogen (which should always be there)
|
||||
new_extractor = get_sprite_extractor_instance(:AUTOGEN)
|
||||
return new_extractor.load_sprite(pif_sprite)
|
||||
else
|
||||
$Trainer.seen_qmarks_sprite=true if $Trainer
|
||||
#If autogen or base sprite aren't able to load a sprite then we have nothing else to load -> show a ? instead.
|
||||
return AnimatedBitmap.new(Settings::DEFAULT_SPRITE_PATH)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
#Always loaded from local individual sprites
|
||||
def load_triple_fusion_sprite(dex_number)
|
||||
sprite_path = getSpecialSpriteName(dex_number)
|
||||
return AnimatedBitmap.new(sprite_path)
|
||||
end
|
||||
|
||||
def get_sprite_extractor_instance(type)
|
||||
case type
|
||||
when :AUTOGEN
|
||||
return AutogenExtracter.instance
|
||||
when :CUSTOM
|
||||
return CustomSpriteExtracter.instance
|
||||
when :BASE
|
||||
return BaseSpriteExtracter.instance
|
||||
else
|
||||
raise ArgumentError, "Unknown sprite type: #{type}"
|
||||
end
|
||||
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
|
||||
sprite_path = "#{Settings::CUSTOM_BATTLERS_FOLDER_INDEXED}#{pif_sprite.head_id}/#{pif_sprite.head_id}.#{pif_sprite.body_id}#{pif_sprite.alt_letter}.png"
|
||||
end
|
||||
return pbResolveBitmap(sprite_path)
|
||||
end
|
||||
|
||||
def get_pif_sprite_from_species(species)
|
||||
substitution_id = get_sprite_substitution_id_from_dex_number(species)
|
||||
pif_sprite = $PokemonGlobal.alt_sprite_substitutions[substitution_id] if $PokemonGlobal
|
||||
return pif_sprite if pif_sprite
|
||||
species_data = GameData::Species.get(species)
|
||||
if species_data.id_number <= NB_POKEMON #base pokemon
|
||||
return select_new_pif_base_sprite(species_data.id_number)
|
||||
else #isFusion
|
||||
return select_new_pif_fusion_sprite(species_data.get_head_species, species_data.get_body_species)
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Flow:
|
||||
# # if none found, look for custom sprite in custom spritesheet (download if can't find spritesheet or new spritepack released)
|
||||
# if none found, load from autogen spritesheet
|
||||
|
||||
def select_new_pif_fusion_sprite(head_id, body_id)
|
||||
species_symbol = "B#{body_id}H#{head_id}".to_sym
|
||||
spritename = get_fusion_spritename(head_id,body_id)
|
||||
customSpritesList = $game_temp.custom_sprites_list[species_symbol]
|
||||
alt_letter = ""
|
||||
if customSpritesList
|
||||
alt_letter = get_random_alt_letter_for_custom(head_id,body_id,true)
|
||||
type = :CUSTOM
|
||||
type = :AUTOGEN if !alt_letter
|
||||
else
|
||||
type = :AUTOGEN
|
||||
end
|
||||
if $game_temp.forced_alt_sprites && $game_temp.forced_alt_sprites.include?(spritename)
|
||||
alt_letter = $game_temp.forced_alt_sprites[spritename]
|
||||
end
|
||||
return PIFSprite.new(type, head_id, body_id, alt_letter)
|
||||
end
|
||||
|
||||
def select_new_pif_base_sprite(dex_number)
|
||||
random_alt = get_random_alt_letter_for_unfused(dex_number, true) #nil if no main
|
||||
random_alt = "" if !random_alt
|
||||
return PIFSprite.new(:BASE, dex_number, nil, random_alt)
|
||||
end
|
||||
|
||||
#todo refactor by using get_triple_fusion_components()
|
||||
def getSpecialSpriteName(dexNum)
|
||||
base_path = "Graphics/Battlers/special/"
|
||||
case dexNum
|
||||
when Settings::ZAPMOLCUNO_NB
|
||||
return sprintf(base_path + "144.145.146")
|
||||
when Settings::ZAPMOLCUNO_NB + 1
|
||||
return sprintf(base_path + "144.145.146")
|
||||
when Settings::ZAPMOLCUNO_NB + 2
|
||||
return sprintf(base_path + "243.244.245")
|
||||
when Settings::ZAPMOLCUNO_NB + 3
|
||||
return sprintf(base_path +"340.341.342")
|
||||
when Settings::ZAPMOLCUNO_NB + 4
|
||||
return sprintf(base_path +"343.344.345")
|
||||
when Settings::ZAPMOLCUNO_NB + 5
|
||||
return sprintf(base_path +"349.350.351")
|
||||
when Settings::ZAPMOLCUNO_NB + 6
|
||||
return sprintf(base_path +"151.251.381")
|
||||
when Settings::ZAPMOLCUNO_NB + 11
|
||||
return sprintf(base_path +"150.348.380")
|
||||
#starters
|
||||
when Settings::ZAPMOLCUNO_NB + 7
|
||||
return sprintf(base_path +"3.6.9")
|
||||
when Settings::ZAPMOLCUNO_NB + 8
|
||||
return sprintf(base_path +"154.157.160")
|
||||
when Settings::ZAPMOLCUNO_NB + 9
|
||||
return sprintf(base_path +"278.281.284")
|
||||
when Settings::ZAPMOLCUNO_NB + 10
|
||||
return sprintf(base_path +"318.321.324")
|
||||
#starters prevos
|
||||
when Settings::ZAPMOLCUNO_NB + 12
|
||||
return sprintf(base_path +"1.4.7")
|
||||
when Settings::ZAPMOLCUNO_NB + 13
|
||||
return sprintf(base_path +"2.5.8")
|
||||
when Settings::ZAPMOLCUNO_NB + 14
|
||||
return sprintf(base_path +"152.155.158")
|
||||
when Settings::ZAPMOLCUNO_NB + 15
|
||||
return sprintf(base_path +"153.156.159")
|
||||
when Settings::ZAPMOLCUNO_NB + 16
|
||||
return sprintf(base_path +"276.279.282")
|
||||
when Settings::ZAPMOLCUNO_NB + 17
|
||||
return sprintf(base_path +"277.280.283")
|
||||
when Settings::ZAPMOLCUNO_NB + 18
|
||||
return sprintf(base_path +"316.319.322")
|
||||
when Settings::ZAPMOLCUNO_NB + 19
|
||||
return sprintf(base_path +"317.320.323")
|
||||
when Settings::ZAPMOLCUNO_NB + 20 #birdBoss Left
|
||||
return sprintf(base_path +"invisible")
|
||||
when Settings::ZAPMOLCUNO_NB + 21 #birdBoss middle
|
||||
return sprintf(base_path + "144.145.146")
|
||||
when Settings::ZAPMOLCUNO_NB + 22 #birdBoss right
|
||||
return sprintf(base_path +"invisible")
|
||||
when Settings::ZAPMOLCUNO_NB + 23 #sinnohboss left
|
||||
return sprintf(base_path +"invisible")
|
||||
when Settings::ZAPMOLCUNO_NB + 24 #sinnohboss middle
|
||||
return sprintf(base_path +"343.344.345")
|
||||
when Settings::ZAPMOLCUNO_NB + 25 #sinnohboss right
|
||||
return sprintf(base_path +"invisible")
|
||||
when Settings::ZAPMOLCUNO_NB + 25 #cardboard
|
||||
return sprintf(base_path +"invisible")
|
||||
when Settings::ZAPMOLCUNO_NB + 26 #cardboard
|
||||
return sprintf(base_path + "cardboard")
|
||||
when Settings::ZAPMOLCUNO_NB + 27 #Triple regi
|
||||
return sprintf(base_path + "447.448.449")
|
||||
#Triple Kalos 1
|
||||
when Settings::ZAPMOLCUNO_NB + 28
|
||||
return sprintf(base_path + "479.482.485")
|
||||
when Settings::ZAPMOLCUNO_NB + 29
|
||||
return sprintf(base_path + "480.483.486")
|
||||
when Settings::ZAPMOLCUNO_NB + 30
|
||||
return sprintf(base_path + "481.484.487")
|
||||
else
|
||||
return sprintf(base_path + "000")
|
||||
end
|
||||
end
|
||||
end
|
||||
106
Data/Scripts/998_InfiniteFusion/Sprites/CustomSpriteExtracter.rb
Normal file
106
Data/Scripts/998_InfiniteFusion/Sprites/CustomSpriteExtracter.rb
Normal file
@@ -0,0 +1,106 @@
|
||||
class CustomSpriteExtracter < PIFSpriteExtracter
|
||||
@instance = new
|
||||
def self.instance
|
||||
@@instance ||= new # If @@instance is nil, create a new instance
|
||||
@@instance # Return the existing or new instance
|
||||
end
|
||||
|
||||
SPRITESHEET_FOLDER_PATH = "Graphics/CustomBattlers/spritesheets/spritesheets_custom/"
|
||||
SPRITE_SIZE = 96 # Original sprite size
|
||||
SHEET_WIDTH = SPRITE_SIZE * COLUMNS # 2880 pixels wide spritesheet
|
||||
|
||||
def load_bitmap_from_spritesheet(pif_sprite)
|
||||
body_id = pif_sprite.body_id
|
||||
spritesheet_file = getSpritesheetPath(pif_sprite)
|
||||
spritesheet_bitmap = AnimatedBitmap.new(spritesheet_file).bitmap
|
||||
|
||||
sprite_x_position,sprite_y_position =get_sprite_position_on_spritesheet(body_id,SPRITE_SIZE,COLUMNS)
|
||||
src_rect = Rect.new(sprite_x_position, sprite_y_position, SPRITE_SIZE, SPRITE_SIZE)
|
||||
|
||||
sprite_bitmap = Bitmap.new(SPRITE_SIZE, SPRITE_SIZE)
|
||||
sprite_bitmap.blt(0, 0, spritesheet_bitmap, src_rect)
|
||||
spritesheet_bitmap.dispose # Dispose since not needed
|
||||
|
||||
return sprite_bitmap
|
||||
end
|
||||
|
||||
def load_sprite_to_file(pif_sprite)
|
||||
head_id = pif_sprite.head_id
|
||||
body_id = pif_sprite.body_id
|
||||
alt_letter = pif_sprite.alt_letter
|
||||
base_folder = "#{Settings::CUSTOM_BATTLERS_FOLDER_INDEXED}#{head_id}/"
|
||||
|
||||
individualSpriteFile = "#{base_folder}#{head_id}.#{body_id}#{alt_letter}.png"
|
||||
if !pbResolveBitmap(individualSpriteFile)
|
||||
animatedBitmap = load_sprite_from_spritesheet(pif_sprite)
|
||||
Dir.mkdir(base_folder) unless Dir.exist?(base_folder)
|
||||
animatedBitmap.bitmap.save_to_png(individualSpriteFile)
|
||||
end
|
||||
return AnimatedBitmap.new(individualSpriteFile)
|
||||
end
|
||||
|
||||
def getSpritesheetPath(pif_sprite)
|
||||
alt_letter = pif_sprite.alt_letter
|
||||
head_id = pif_sprite.head_id
|
||||
return "#{SPRITESHEET_FOLDER_PATH}#{head_id}/#{head_id}#{alt_letter}.png"
|
||||
end
|
||||
|
||||
def should_update_spritesheet?(pif_sprite)
|
||||
return false if !$updated_spritesheets
|
||||
return false if !downloadAllowed?()
|
||||
return false if requestRateExceeded?(Settings::CUSTOMSPRITES_RATE_LOG_FILE,Settings::CUSTOMSPRITES_ENTRIES_RATE_TIME_WINDOW,Settings::CUSTOMSPRITES_RATE_MAX_NB_REQUESTS,false)
|
||||
spritesheet_file = getSpritesheetPath(pif_sprite)
|
||||
return true if !pbResolveBitmap(spritesheet_file)
|
||||
return !$updated_spritesheets.include?(spritesheet_file)
|
||||
end
|
||||
|
||||
|
||||
def load_sprite_directly(head_id,body_id,alt_letter="")
|
||||
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
|
||||
# Dir.mkdir(folder) unless Dir.exist?(folder)
|
||||
#
|
||||
# # Load the entire spritesheet
|
||||
# spritesheet_file = "#{SPRITESHEET_FOLDER_PATH}#{head_id}\\#{head_id}#{alt_letter}.png"
|
||||
# spritesheet_bitmap = AnimatedBitmap.new(spritesheet_file).bitmap
|
||||
#
|
||||
# # Calculate the 0-based row and column from the sprite index
|
||||
# index = body_id
|
||||
# row = index / COLUMNS
|
||||
# col = index % COLUMNS
|
||||
#
|
||||
# # Define the area of the sprite on the spritesheet
|
||||
# sprite_x_position = col * SPRITE_SIZE
|
||||
# sprite_y_position = row * SPRITE_SIZE
|
||||
#
|
||||
# # Create a new bitmap for the sprite at its original size
|
||||
# sprite_bitmap = Bitmap.new(SPRITE_SIZE, SPRITE_SIZE)
|
||||
#
|
||||
# # Copy the sprite from the spritesheet to the new bitmap
|
||||
# src_rect = Rect.new(sprite_x_position, sprite_y_position, SPRITE_SIZE, SPRITE_SIZE)
|
||||
# sprite_bitmap.blt(0, 0, spritesheet_bitmap, src_rect)
|
||||
#
|
||||
# # Dispose of the spritesheet bitmap if it’s no longer needed
|
||||
# spritesheet_bitmap.dispose
|
||||
#
|
||||
# # Save the sprite bitmap to a file
|
||||
# file_path = "#{folder}/#{head_id}.#{body_id}.png"
|
||||
# sprite_bitmap.save_to_png(file_path)
|
||||
#
|
||||
# # Dispose of the sprite bitmap
|
||||
# sprite_bitmap.dispose
|
||||
#
|
||||
# # Return the path to the saved PNG file
|
||||
# return file_path
|
||||
# end
|
||||
|
||||
end
|
||||
406
Data/Scripts/998_InfiniteFusion/Sprites/FusionSprites.rb
Normal file
406
Data/Scripts/998_InfiniteFusion/Sprites/FusionSprites.rb
Normal file
@@ -0,0 +1,406 @@
|
||||
module GameData
|
||||
class Species
|
||||
def self.sprite_bitmap_from_pokemon(pkmn, back = false, species = nil)
|
||||
species = pkmn.species if !species
|
||||
species = GameData::Species.get(species).id_number # Just to be sure it's a number
|
||||
return self.egg_sprite_bitmap(species, pkmn.form) if pkmn.egg?
|
||||
if back
|
||||
ret = self.back_sprite_bitmap(species, pkmn.shiny?, pkmn.bodyShiny?, pkmn.headShiny?)
|
||||
else
|
||||
ret = self.front_sprite_bitmap(species, pkmn.shiny?, pkmn.bodyShiny?, pkmn.headShiny?)
|
||||
end
|
||||
ret.scale_bitmap(pkmn.sprite_scale) if ret #for pokemon with size differences
|
||||
return ret
|
||||
end
|
||||
|
||||
def self.sprite_bitmap_from_pokemon_id(id, back = false, shiny = false, bodyShiny = false, headShiny = false)
|
||||
if back
|
||||
ret = self.back_sprite_bitmap(id, shiny, bodyShiny, headShiny)
|
||||
else
|
||||
ret = self.front_sprite_bitmap(id, shiny, bodyShiny, headShiny)
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
def self.sprite_bitmap(species, form = 0, gender = 0, shiny = false, shadow = false, back = false, egg = false)
|
||||
return self.egg_sprite_bitmap(species, form) if egg
|
||||
|
||||
dex_number= GameData::Species.get(species).id_number
|
||||
|
||||
return self.back_sprite_bitmap(dex_number, shiny) if back
|
||||
return self.front_sprite_bitmap(dex_number, shiny)
|
||||
end
|
||||
|
||||
|
||||
MAX_SHIFT_VALUE = 360
|
||||
MINIMUM_OFFSET = 40
|
||||
ADDITIONAL_OFFSET_WHEN_TOO_CLOSE = 40
|
||||
MINIMUM_DEX_DIF = 20
|
||||
|
||||
def self.calculateShinyHueOffset(dex_number, isBodyShiny = false, isHeadShiny = false)
|
||||
if dex_number <= NB_POKEMON
|
||||
if SHINY_COLOR_OFFSETS[dex_number]
|
||||
return SHINY_COLOR_OFFSETS[dex_number]
|
||||
end
|
||||
body_number = dex_number
|
||||
head_number = dex_number
|
||||
|
||||
else
|
||||
body_number = getBodyID(dex_number)
|
||||
head_number = getHeadID(dex_number, body_number)
|
||||
end
|
||||
if isBodyShiny && isHeadShiny && SHINY_COLOR_OFFSETS[body_number] && SHINY_COLOR_OFFSETS[head_number]
|
||||
offset = SHINY_COLOR_OFFSETS[body_number] + SHINY_COLOR_OFFSETS[head_number]
|
||||
elsif isHeadShiny && SHINY_COLOR_OFFSETS[head_number]
|
||||
offset = SHINY_COLOR_OFFSETS[head_number]
|
||||
elsif isBodyShiny && SHINY_COLOR_OFFSETS[body_number]
|
||||
offset = SHINY_COLOR_OFFSETS[body_number]
|
||||
else
|
||||
offset = calculateShinyHueOffsetDefaultMethod(body_number, head_number, dex_number, isBodyShiny, isHeadShiny)
|
||||
end
|
||||
return offset
|
||||
end
|
||||
|
||||
def self.calculateShinyHueOffsetDefaultMethod(body_number, head_number, dex_number, isBodyShiny = false, isHeadShiny = false)
|
||||
dex_offset = dex_number
|
||||
#body_number = getBodyID(dex_number)
|
||||
#head_number=getHeadID(dex_number,body_number)
|
||||
dex_diff = (body_number - head_number).abs
|
||||
if isBodyShiny && isHeadShiny
|
||||
dex_offset = dex_number
|
||||
elsif isHeadShiny
|
||||
dex_offset = head_number
|
||||
elsif isBodyShiny
|
||||
dex_offset = dex_diff > MINIMUM_DEX_DIF ? body_number : body_number + ADDITIONAL_OFFSET_WHEN_TOO_CLOSE
|
||||
end
|
||||
offset = dex_offset + Settings::SHINY_HUE_OFFSET
|
||||
offset /= MAX_SHIFT_VALUE if offset > NB_POKEMON
|
||||
offset = MINIMUM_OFFSET if offset < MINIMUM_OFFSET
|
||||
offset = MINIMUM_OFFSET if (MAX_SHIFT_VALUE - offset).abs < MINIMUM_OFFSET
|
||||
offset += pbGet(VAR_SHINY_HUE_OFFSET) #for testing - always 0 during normal gameplay
|
||||
return offset
|
||||
end
|
||||
|
||||
def self.getAutogenSprite(head_id, body_id)
|
||||
|
||||
end
|
||||
|
||||
|
||||
# species can be either a number, a Species objet of a symbol
|
||||
#
|
||||
def self.front_sprite_bitmap(species, isShiny = false, bodyShiny = false, headShiny = false)
|
||||
dex_number = getDexNumberForSpecies(species)
|
||||
if species.is_a?(Species)
|
||||
dex_number = species.id_number
|
||||
end
|
||||
|
||||
spriteLoader = BattleSpriteLoader.new
|
||||
if isFusion(dex_number)
|
||||
body_id = getBodyID(dex_number)
|
||||
head_id = getHeadID(dex_number, body_id)
|
||||
sprite = spriteLoader.load_fusion_sprite(head_id,body_id)
|
||||
else
|
||||
if isTripleFusion?(dex_number)
|
||||
sprite = spriteLoader.load_triple_fusion_sprite(dex_number)
|
||||
else
|
||||
sprite = spriteLoader.load_base_sprite(dex_number)
|
||||
end
|
||||
end
|
||||
if isShiny
|
||||
sprite.shiftColors(self.calculateShinyHueOffset(dex_number, bodyShiny, headShiny))
|
||||
end
|
||||
return sprite
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# def self.front_sprite_bitmap(dex_number, isShiny = false, bodyShiny = false, headShiny = false)
|
||||
# # body_id = getBodyID(dex_number)
|
||||
# # head_id = getHeadID(dex_number, body_id)
|
||||
# # return getAutogenSprite(head_id,body_id)
|
||||
#
|
||||
# #la méthode est utilisé ailleurs avec d'autres arguments (gender, form, etc.) mais on les veut pas
|
||||
# if dex_number.is_a?(Symbol)
|
||||
# dex_number = GameData::Species.get(dex_number).id_number
|
||||
# end
|
||||
# filename = self.sprite_filename(dex_number)
|
||||
# sprite = (filename) ? AnimatedBitmap.new(filename) : nil
|
||||
# if isShiny
|
||||
# sprite.shiftColors(self.calculateShinyHueOffset(dex_number, bodyShiny, headShiny))
|
||||
# end
|
||||
# return sprite
|
||||
# end
|
||||
|
||||
def self.back_sprite_bitmap(dex_number, isShiny = false, bodyShiny = false, headShiny = false)
|
||||
sprite = self.front_sprite_bitmap(dex_number,isShiny,bodyShiny,headShiny)
|
||||
return sprite#.mirror
|
||||
end
|
||||
|
||||
def self.egg_sprite_bitmap(dex_number, form = nil)
|
||||
filename = self.egg_sprite_filename(dex_number, form)
|
||||
return (filename) ? AnimatedBitmap.new(filename) : nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# def self.sprite_filename(dex_number)
|
||||
# #dex_number = GameData::NAT_DEX_MAPPING[dex_number] ? GameData::NAT_DEX_MAPPING[dex_number] : dex_number
|
||||
# if dex_number.is_a?(GameData::Species)
|
||||
# dex_number = dex_number.id_number
|
||||
# end
|
||||
# if dex_number.is_a?(Symbol)
|
||||
# dex_number = getDexNumberForSpecies(dex_number)
|
||||
# end
|
||||
# return nil if dex_number == nil
|
||||
# if dex_number <= Settings::NB_POKEMON
|
||||
# return get_unfused_sprite_path(dex_number)
|
||||
# else
|
||||
# if dex_number >= Settings::ZAPMOLCUNO_NB
|
||||
# specialPath = getSpecialSpriteName(dex_number)
|
||||
# return pbResolveBitmap(specialPath)
|
||||
# head_id = nil
|
||||
# else
|
||||
# body_id = getBodyID(dex_number)
|
||||
# head_id = getHeadID(dex_number, body_id)
|
||||
# return get_fusion_sprite_path(head_id, body_id)
|
||||
# # folder = head_id.to_s
|
||||
# # filename = sprintf("%s.%s.png", head_id, body_id)
|
||||
# end
|
||||
# end
|
||||
# # customPath = pbResolveBitmap(Settings::CUSTOM_BATTLERS_FOLDER_INDEXED + "/" + head_id.to_s + "/" +filename)
|
||||
# # customPath = download_custom_sprite(head_id,body_id)
|
||||
# #
|
||||
# # species = getSpecies(dex_number)
|
||||
# # use_custom = customPath && !species.always_use_generated
|
||||
# # if use_custom
|
||||
# # return customPath
|
||||
# # end
|
||||
# # #return Settings::BATTLERS_FOLDER + folder + "/" + filename
|
||||
# # return download_autogen_sprite(head_id,body_id)
|
||||
# end
|
||||
|
||||
|
||||
# def get_unfused_sprite_path(dex_number_id, localOnly = false)
|
||||
# dex_number = dex_number_id.to_s
|
||||
# folder = dex_number.to_s
|
||||
# substitution_id = _INTL("{1}", dex_number)
|
||||
#
|
||||
# if alt_sprites_substitutions_available && $PokemonGlobal.alt_sprite_substitutions.keys.include?(substitution_id)
|
||||
# substitutionPath = $PokemonGlobal.alt_sprite_substitutions[substitution_id]
|
||||
# return substitutionPath if pbResolveBitmap(substitutionPath)
|
||||
# end
|
||||
# random_alt = get_random_alt_letter_for_unfused(dex_number, true) #nil if no main
|
||||
# random_alt = "" if !random_alt || localOnly
|
||||
#
|
||||
#
|
||||
# filename = _INTL("{1}{2}.png", dex_number,random_alt)
|
||||
#
|
||||
# path = Settings::CUSTOM_BASE_SPRITES_FOLDER + filename
|
||||
# if pbResolveBitmap(path)
|
||||
# record_sprite_substitution(substitution_id,path)
|
||||
# return path
|
||||
# end
|
||||
# echoln "downloading main sprite #{filename}"
|
||||
# downloaded_path = download_unfused_main_sprite(dex_number, random_alt) if !localOnly
|
||||
# if pbResolveBitmap(downloaded_path)
|
||||
# record_sprite_substitution(substitution_id,downloaded_path)
|
||||
# return downloaded_path
|
||||
# end
|
||||
# return path
|
||||
# end
|
||||
|
||||
def alt_sprites_substitutions_available
|
||||
return $PokemonGlobal && $PokemonGlobal.alt_sprite_substitutions
|
||||
end
|
||||
|
||||
def print_stack_trace
|
||||
stack_trace = caller
|
||||
stack_trace.each_with_index do |call, index|
|
||||
echo("#{index + 1}: #{call}")
|
||||
end
|
||||
end
|
||||
|
||||
# def record_sprite_substitution(substitution_id, sprite_name)
|
||||
# return if !$PokemonGlobal
|
||||
# return if !$PokemonGlobal.alt_sprite_substitutions
|
||||
# $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
|
||||
|
||||
#To force a specific sprites before a battle
|
||||
#
|
||||
# ex:
|
||||
# $PokemonTemp.forced_alt_sprites={"20.25" => "20.25a"}
|
||||
#
|
||||
class PokemonTemp
|
||||
attr_accessor :forced_alt_sprites
|
||||
end
|
||||
|
||||
#todo:
|
||||
# DO NOT USE ANYMORE
|
||||
# Replace by BattleSpriteLoader
|
||||
# def get_fusion_sprite_path(head_id, body_id, localOnly=false)
|
||||
# $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 = ""
|
||||
#
|
||||
# #Swap path if alt is selected for this pokemon
|
||||
# dex_num = getSpeciesIdForFusion(head_id, body_id)
|
||||
# substitution_id = dex_num.to_s + form_suffix
|
||||
#
|
||||
# if alt_sprites_substitutions_available && $PokemonGlobal.alt_sprite_substitutions.keys.include?(substitution_id)
|
||||
# substitutionPath= $PokemonGlobal.alt_sprite_substitutions[substitution_id]
|
||||
# return substitutionPath if pbResolveBitmap(substitutionPath)
|
||||
# end
|
||||
#
|
||||
#
|
||||
# pokemon_name = _INTL("{1}.{2}",head_id, body_id)
|
||||
#
|
||||
# #get altSprite letter
|
||||
# random_alt = get_random_alt_letter_for_custom(head_id, body_id) #nil if no main
|
||||
# random_alt = "" if !random_alt
|
||||
# forcingSprite=false
|
||||
# if $PokemonTemp.forced_alt_sprites && $PokemonTemp.forced_alt_sprites.key?(pokemon_name)
|
||||
# random_alt = $PokemonTemp.forced_alt_sprites[pokemon_name]
|
||||
# forcingSprite=true
|
||||
# end
|
||||
#
|
||||
#
|
||||
# filename = _INTL("{1}{2}.png", pokemon_name, random_alt)
|
||||
# #Try local custom sprite
|
||||
# local_custom_path = Settings::CUSTOM_BATTLERS_FOLDER_INDEXED + head_id.to_s + "/" + filename
|
||||
# if pbResolveBitmap(local_custom_path)
|
||||
# record_sprite_substitution(substitution_id, local_custom_path) if !forcingSprite
|
||||
# return local_custom_path
|
||||
# end
|
||||
# #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 && $PokemonGlobal.autogen_sprites_cache[substitution_id]
|
||||
#
|
||||
# #Try to download custom sprite if none found locally
|
||||
# downloaded_custom = download_custom_sprite(head_id, body_id, random_alt) if !localOnly
|
||||
# if downloaded_custom
|
||||
# record_sprite_substitution(substitution_id, downloaded_custom) if !forcingSprite
|
||||
# return downloaded_custom
|
||||
# end
|
||||
#
|
||||
# #Try local generated sprite
|
||||
# local_generated_path = Settings::BATTLERS_FOLDER + head_id.to_s + "/" + filename
|
||||
# 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) if !localOnly
|
||||
# if pbResolveBitmap(autogen_path)
|
||||
# add_to_autogen_cache(substitution_id,autogen_path)
|
||||
# return autogen_path
|
||||
# end
|
||||
#
|
||||
# return Settings::DEFAULT_SPRITE_PATH
|
||||
# end
|
||||
|
||||
def get_random_alt_letter_for_custom(head_id, body_id, onlyMain = true)
|
||||
spriteName = _INTL("{1}.{2}", head_id, body_id)
|
||||
echoln spriteName
|
||||
if onlyMain
|
||||
alts_list = list_main_sprites_letters(spriteName)
|
||||
return nil if alts_list.empty?
|
||||
return alts_list.sample
|
||||
else
|
||||
alts_list = list_all_sprites_letters(spriteName)
|
||||
return nil if alts_list.empty?
|
||||
return alts_list.sample
|
||||
end
|
||||
end
|
||||
|
||||
def get_random_alt_letter_for_unfused(dex_num, onlyMain = true)
|
||||
spriteName = _INTL("{1}", dex_num)
|
||||
if onlyMain
|
||||
letters_list= list_main_sprites_letters(spriteName)
|
||||
else
|
||||
letters_list= list_all_sprites_letters(spriteName)
|
||||
end
|
||||
letters_list << "" #add main sprite
|
||||
return letters_list.sample
|
||||
end
|
||||
|
||||
def list_main_sprites_letters(spriteName)
|
||||
all_sprites = map_alt_sprite_letters_for_pokemon(spriteName)
|
||||
main_sprites = []
|
||||
all_sprites.each do |key, value|
|
||||
main_sprites << key if value == "main"
|
||||
end
|
||||
|
||||
#add temp sprites if no main sprites found
|
||||
if main_sprites.empty?
|
||||
all_sprites.each do |key, value|
|
||||
main_sprites << key if value == "temp"
|
||||
end
|
||||
end
|
||||
return main_sprites
|
||||
end
|
||||
|
||||
def list_all_sprites_letters_head_body(head_id,body_id)
|
||||
spriteName = _INTL("{1}.{2}", head_id, body_id)
|
||||
all_sprites_map = map_alt_sprite_letters_for_pokemon(spriteName)
|
||||
letters = []
|
||||
all_sprites_map.each do |key, value|
|
||||
letters << key
|
||||
end
|
||||
return letters
|
||||
end
|
||||
|
||||
def list_all_sprites_letters(spriteName)
|
||||
all_sprites_map = map_alt_sprite_letters_for_pokemon(spriteName)
|
||||
letters = []
|
||||
all_sprites_map.each do |key, value|
|
||||
letters << key
|
||||
end
|
||||
return letters
|
||||
end
|
||||
|
||||
def list_alt_sprite_letters(spriteName)
|
||||
all_sprites = map_alt_sprite_letters_for_pokemon(spriteName)
|
||||
alt_sprites = []
|
||||
all_sprites.each do |key, value|
|
||||
alt_sprites << key if value == "alt"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
#ex: "1" -> "main"
|
||||
# "1a" -> "alt"
|
||||
def map_alt_sprite_letters_for_pokemon(spriteName)
|
||||
alt_sprites = {}
|
||||
File.foreach(Settings::CREDITS_FILE_PATH) do |line|
|
||||
row = line.split(',')
|
||||
sprite_name = row[0]
|
||||
if sprite_name.start_with?(spriteName)
|
||||
if sprite_name.length > spriteName.length #alt letter
|
||||
letter = sprite_name[spriteName.length]
|
||||
if letter.match?(/[a-zA-Z]/)
|
||||
main_or_alt = row[2] ? row[2] : nil
|
||||
alt_sprites[letter] = main_or_alt
|
||||
end
|
||||
else #letterless
|
||||
main_or_alt = row[2] ? row[2].gsub("\n","") : nil
|
||||
alt_sprites[""] = main_or_alt
|
||||
end
|
||||
end
|
||||
end
|
||||
return alt_sprites
|
||||
end
|
||||
@@ -0,0 +1,13 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class PokemonSprite
|
||||
|
||||
def setPokemonBitmapFromId(id, back = false, shiny = false, bodyShiny = false, headShiny = false,spriteform_body=nil,spriteform_head=nil)
|
||||
@_iconbitmap.dispose if @_iconbitmap
|
||||
@_iconbitmap = GameData::Species.sprite_bitmap_from_pokemon_id(id, back, shiny, bodyShiny, headShiny)
|
||||
self.bitmap = (@_iconbitmap) ? @_iconbitmap.bitmap : nil
|
||||
self.color = Color.new(0, 0, 0, 0)
|
||||
changeOrigin
|
||||
end
|
||||
|
||||
end
|
||||
114
Data/Scripts/998_InfiniteFusion/Sprites/PIFSprite.rb
Normal file
114
Data/Scripts/998_InfiniteFusion/Sprites/PIFSprite.rb
Normal file
@@ -0,0 +1,114 @@
|
||||
# object representing a sprite which saves its position in the tileset
|
||||
class PIFSprite
|
||||
attr_accessor :type
|
||||
attr_accessor :head_id
|
||||
attr_accessor :body_id
|
||||
attr_accessor :alt_letter
|
||||
attr_accessor :local_path
|
||||
|
||||
# types:
|
||||
# :AUTOGEN, :CUSTOM, :BASE
|
||||
def initialize(type, head_id, body_id, alt_letter = "")
|
||||
@type = type
|
||||
@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 exists()
|
||||
filename = get_spritesheet_path()
|
||||
echoln filename
|
||||
return File.file?(filename)
|
||||
end
|
||||
|
||||
def get_spritesheet_path()
|
||||
case @type
|
||||
when :BASE
|
||||
path = "#{BaseSpriteExtracter::SPRITESHEET_FOLDER_PATH}#{@head_id}.png"
|
||||
when :CUSTOM
|
||||
path = "#{CustomSpriteExtracter::SPRITESHEET_FOLDER_PATH}#{@head_id}/#{@head_id}#{@alt_letter}.png"
|
||||
when :AUTOGEN
|
||||
path = "#{AutogenExtracter::SPRITESHEET_FOLDER_PATH}#{@head_id}.png"
|
||||
else
|
||||
return nil
|
||||
end
|
||||
echoln path
|
||||
return path
|
||||
end
|
||||
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()
|
||||
case @type
|
||||
when :CUSTOM
|
||||
return "#{@head_id}.#{@body_id}#{@alt_letter}.png"
|
||||
when :AUTOGEN
|
||||
return "#{@head_id}.#{@body_id}.png"
|
||||
when :BASE
|
||||
return "#{@head_id}#{@alt_letter}.png"
|
||||
end
|
||||
end
|
||||
|
||||
def setup_from_spritename(spritename, type)
|
||||
@type = type
|
||||
cleaned_name = spritename.gsub(".png", "")
|
||||
if cleaned_name =~ /(\d+)\.(\d+)([a-zA-Z]*)/
|
||||
head_id = $1
|
||||
body_id = $2
|
||||
alt_letter = $3
|
||||
end
|
||||
@head_id = head_id
|
||||
@body_id = body_id
|
||||
@alt_letter = alt_letter
|
||||
end
|
||||
|
||||
def self.from_spritename(spritename, type)
|
||||
obj = allocate
|
||||
obj.send(:setup_from_spritename, spritename, type)
|
||||
obj
|
||||
end
|
||||
|
||||
|
||||
|
||||
def new_pif_sprite_from_dex_num(type, dexNum, alt_letter)
|
||||
body_id = getBodyID(dexNum)
|
||||
head_id = getHeadID(dexNum, body_id)
|
||||
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
|
||||
type = :CUSTOM
|
||||
head_id = $1.to_i # Head (e.g., "1" in "1.2.png")
|
||||
body_id = $2.to_i # Body (e.g., "2" in "1.2.png")
|
||||
alt_letter = $3 # Optional trailing letter (e.g., "a" in "1.2a.png")
|
||||
|
||||
elsif spritename =~ /^(\d+)([a-zA-Z]*)$/ # One number with optional letters
|
||||
type = :BASE
|
||||
head_id = $1.to_i # Head (e.g., "1" in "1.png")
|
||||
alt_letter = $2 # Optional trailing letter (e.g., "a" in "1a.png")
|
||||
else
|
||||
echoln "Invalid sprite format: #{spritename}"
|
||||
return nil
|
||||
end
|
||||
type = :AUTOGEN if autogen
|
||||
return PIFSprite.new(type, head_id, body_id, alt_letter)
|
||||
end
|
||||
@@ -0,0 +1,82 @@
|
||||
def setSpriteSubstitution(pif_sprite); end
|
||||
def getSpriteSubstitutionForDex(dex_num); end
|
||||
def setSpriteSubstitution(head,body); end
|
||||
def set_updated_spritesheets; end
|
||||
|
||||
|
||||
class PokemonGlobalMetadata
|
||||
attr_accessor :alt_sprite_substitutions
|
||||
end
|
||||
|
||||
def initialize_alt_sprite_substitutions()
|
||||
$PokemonGlobal.alt_sprite_substitutions = {} if !$PokemonGlobal.alt_sprite_substitutions
|
||||
migrate_sprites_substitutions()
|
||||
end
|
||||
|
||||
def get_sprite_substitution_id_for_fusion(head_id, body_id)
|
||||
species_symbol = "B#{body_id}H#{head_id}".to_sym
|
||||
return get_sprite_substitution_id_from_dex_number(species_symbol)
|
||||
end
|
||||
|
||||
def get_sprite_substitution_id_from_dex_number(species_symbol)
|
||||
species = GameData::Species.get(species_symbol)
|
||||
if species.is_fusion
|
||||
substitution_id = [species.get_head_species,species.get_body_species]
|
||||
else
|
||||
substitution_id= species.id_number
|
||||
end
|
||||
return substitution_id
|
||||
end
|
||||
|
||||
def migrate_sprites_substitutions
|
||||
return if $game_switches[SWITCH_UPDATED_TO_SPRITESHEETS_SPRITES]
|
||||
new_substitutions = {}
|
||||
old_number_pokemon = 470
|
||||
for dex_number_key in $PokemonGlobal.alt_sprite_substitutions.keys
|
||||
if $PokemonGlobal.alt_sprite_substitutions[dex_number_key].is_a?(String) && can_convert_to_int?(dex_number_key)
|
||||
old_dex_number = dex_number_key.to_i
|
||||
if old_dex_number > old_number_pokemon #fusion
|
||||
body_id = getBodyID(old_dex_number,old_number_pokemon)
|
||||
head_id = getHeadID(old_dex_number,body_id,old_number_pokemon)
|
||||
new_id = [head_id,body_id]
|
||||
type = :CUSTOM
|
||||
else
|
||||
new_id = old_dex_number
|
||||
head_id = old_dex_number
|
||||
body_id= nil
|
||||
type = :BASE
|
||||
end
|
||||
file_path = $PokemonGlobal.alt_sprite_substitutions[dex_number_key]
|
||||
alt_letter =get_alt_letter_from_path(file_path)
|
||||
|
||||
pif_sprite = PIFSprite.new(type,head_id,body_id,alt_letter)
|
||||
new_substitutions[new_id] = pif_sprite
|
||||
end
|
||||
end
|
||||
$PokemonGlobal.alt_sprite_substitutions = new_substitutions
|
||||
$game_switches[SWITCH_UPDATED_TO_SPRITESHEETS_SPRITES] = true
|
||||
end
|
||||
|
||||
def can_convert_to_int?(str)
|
||||
Integer(str)
|
||||
true
|
||||
rescue ArgumentError
|
||||
false
|
||||
end
|
||||
|
||||
def get_alt_letter_from_path(filename)
|
||||
# Remove the extension
|
||||
base_name = filename.sub(/\.png$/, '')
|
||||
|
||||
# Check the last character
|
||||
last_char = base_name[-1]
|
||||
|
||||
if last_char.match?(/\d/) # Check if the last character is a number
|
||||
alt_letter = ""
|
||||
else
|
||||
# Reverse the base name and capture all letters until the first number
|
||||
alt_letter = base_name.reverse[/[a-zA-Z]+/].reverse
|
||||
end
|
||||
|
||||
return alt_letter
|
||||
end
|
||||
@@ -0,0 +1,14 @@
|
||||
# frozen_string_literal: true
|
||||
class IconSprite
|
||||
def setBitmapDirectly(bitmap)
|
||||
oldrc = self.src_rect
|
||||
clearBitmaps()
|
||||
@name = ""
|
||||
return if bitmap == nil
|
||||
@_iconbitmap = bitmap
|
||||
# for compatibility
|
||||
#
|
||||
self.bitmap = @_iconbitmap ? @_iconbitmap.bitmap : nil
|
||||
self.src_rect = oldrc
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,33 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module RPG
|
||||
module Cache
|
||||
def self.load_bitmap_path(path, hue = 0)
|
||||
cached = true
|
||||
ret = fromCache(path)
|
||||
if !ret
|
||||
if path == ""
|
||||
ret = BitmapWrapper.new(32, 32)
|
||||
else
|
||||
ret = BitmapWrapper.new(path)
|
||||
end
|
||||
@cache[path] = ret
|
||||
cached = false
|
||||
end
|
||||
if hue == 0
|
||||
ret.addRef if cached
|
||||
return ret
|
||||
end
|
||||
key = [path, hue]
|
||||
ret2 = fromCache(key)
|
||||
if ret2
|
||||
ret2.addRef
|
||||
else
|
||||
ret2 = ret.copy
|
||||
ret2.hue_change(hue)
|
||||
@cache[key] = ret2
|
||||
end
|
||||
return ret2
|
||||
end
|
||||
end
|
||||
end
|
||||
19
Data/Scripts/998_InfiniteFusion/UI/PIF_PauseMenu.rb
Normal file
19
Data/Scripts/998_InfiniteFusion/UI/PIF_PauseMenu.rb
Normal file
@@ -0,0 +1,19 @@
|
||||
MenuHandlers.add(:pause_menu, :outfit, {
|
||||
"name" => _INTL("Outfit"),
|
||||
"order" => 51,
|
||||
"condition" => proc { $player.can_change_outfit },
|
||||
"effect" => proc { |menu|
|
||||
|
||||
changeOutfit()
|
||||
# pbFadeOutIn do
|
||||
# #pbCommonEvent(COMMON_EVENT_OUTFIT)
|
||||
# #todo give Favorite outfit (used to be done through common event)
|
||||
# changeOutfit()
|
||||
# menu.silent_end_screen
|
||||
# end
|
||||
next false
|
||||
|
||||
|
||||
}
|
||||
})# frozen_string_literal: true
|
||||
|
||||
221
Data/Scripts/998_InfiniteFusion/UI/SpeechBubbles.rb
Normal file
221
Data/Scripts/998_InfiniteFusion/UI/SpeechBubbles.rb
Normal file
@@ -0,0 +1,221 @@
|
||||
PluginManager.register({
|
||||
:name => "Carmaniac's Speech Bubbles",
|
||||
:version => "1.1",
|
||||
:credits => ["Carmaniac","Avery","Boonzeet"],
|
||||
:link => "https://reliccastle.com/resources/461/"
|
||||
})
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Carmaniac's Speech Bubbles for v18
|
||||
# Updated by Avery
|
||||
#-------------------------------------------------------------------------------
|
||||
# To use, call pbCallBub(type, eventID)
|
||||
#
|
||||
# Where type is either 1 or 2:
|
||||
# 1 - floating bubble
|
||||
# 2 - speech bubble with arrow
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Class modifiers
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
class Game_Temp
|
||||
attr_accessor :speechbubble_bubble
|
||||
attr_accessor :speechbubble_vp
|
||||
attr_accessor :speechbubble_arrow
|
||||
attr_accessor :speechbubble_outofrange
|
||||
attr_accessor :speechbubble_talking
|
||||
attr_accessor :speechbubble_alwaysDown
|
||||
attr_accessor :speechbubble_alwaysUp
|
||||
end
|
||||
|
||||
module MessageConfig
|
||||
BUBBLETEXTBASE = Color.new(22,22,22)
|
||||
BUBBLETEXTSHADOW = Color.new(166,160,151)
|
||||
|
||||
|
||||
WindowOpacity = 255
|
||||
end
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Function modifiers
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
class Window_AdvancedTextPokemon
|
||||
|
||||
def text=(value)
|
||||
if value != nil && value != "" && $game_temp.speechbubble_bubble && $game_temp.speechbubble_bubble > 0
|
||||
if $game_temp.speechbubble_bubble == 1
|
||||
$game_temp.speechbubble_bubble = 0
|
||||
resizeToFit2(value,400,100)
|
||||
|
||||
@x = $game_map.events[$game_temp.speechbubble_talking].screen_x
|
||||
@y = $game_map.events[$game_temp.speechbubble_talking].screen_y - (32 + @height)
|
||||
|
||||
if @y>(Graphics.height-@height-2)
|
||||
@y = (Graphics.height-@height)
|
||||
elsif @y<2
|
||||
@y=2
|
||||
end
|
||||
if @x>(Graphics.width-@width-2)
|
||||
@x = ($game_map.events[$game_temp.speechbubble_talking].screen_x-@width)
|
||||
elsif @x<2
|
||||
@x=2
|
||||
end
|
||||
elsif $game_temp.speechbubble_bubble == 3
|
||||
@x=$game_player.x+32
|
||||
@y=$game_player.y+36
|
||||
else
|
||||
$game_temp.speechbubble_bubble = 0
|
||||
end
|
||||
end
|
||||
setText(value)
|
||||
end
|
||||
end
|
||||
|
||||
def pbRepositionMessageWindow(msgwindow, linecount=2)
|
||||
msgwindow.height=32*linecount+msgwindow.borderY
|
||||
msgwindow.y=(Graphics.height)-(msgwindow.height)
|
||||
if $game_temp && $game_temp.in_battle && !$scene.respond_to?("update_basic")
|
||||
msgwindow.y=0
|
||||
elsif $game_system && $game_system.respond_to?("message_position")
|
||||
case $game_system.message_position
|
||||
when 0 # up
|
||||
msgwindow.y=0
|
||||
when 1 # middle
|
||||
msgwindow.y=(Graphics.height/2)-(msgwindow.height/2)
|
||||
when 2
|
||||
if $game_temp.speechbubble_bubble == 1 || $game_temp.speechbubble_bubble == 3
|
||||
msgwindow.setSkin("Graphics/windowskins/frlgtextskin")
|
||||
msgwindow.height = 100
|
||||
msgwindow.width = 400
|
||||
elsif $game_temp.speechbubble_bubble==2
|
||||
msgwindow.setSkin("Graphics/windowskins/frlgtextskin")
|
||||
msgwindow.height = 102
|
||||
msgwindow.width = Graphics.width
|
||||
if ($game_player.direction==8 && !$game_temp.speechbubble_alwaysDown) || $game_temp.speechbubble_alwaysUp
|
||||
$game_temp.speechbubble_vp = Viewport.new(0, 0, Graphics.width, 280)
|
||||
msgwindow.y = 6
|
||||
else
|
||||
$game_temp.speechbubble_vp = Viewport.new(0, 6 + msgwindow.height, Graphics.width, 280)
|
||||
msgwindow.y = (Graphics.height - msgwindow.height) - 6
|
||||
if $game_temp.speechbubble_outofrange==true
|
||||
msgwindow.y = 6
|
||||
end
|
||||
end
|
||||
else
|
||||
msgwindow.height = 102
|
||||
msgwindow.y = Graphics.height - msgwindow.height - 6
|
||||
end
|
||||
end
|
||||
end
|
||||
if $game_system && $game_system.respond_to?("message_frame")
|
||||
if $game_system.message_frame != 0
|
||||
msgwindow.opacity = 0
|
||||
end
|
||||
end
|
||||
if $game_message
|
||||
case $game_message.background
|
||||
when 1 # dim
|
||||
msgwindow.opacity=0
|
||||
when 2 # transparent
|
||||
msgwindow.opacity=0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
SPEECH_BUBBLE_FOLDER_PATH = "Graphics/UI/SpeechBubbles/"
|
||||
def pbCreateMessageWindow(viewport=nil,skin=nil)
|
||||
arrow = nil
|
||||
if $game_temp.speechbubble_bubble==2 && $game_map.events[$game_temp.speechbubble_talking] != nil # Message window set to floating bubble.
|
||||
if ($game_player.direction==8 && !$game_temp.speechbubble_alwaysDown) || $game_temp.speechbubble_alwaysUp# Player facing up, message window top.
|
||||
$game_temp.speechbubble_vp = Viewport.new(0, 104, Graphics.width, 280)
|
||||
$game_temp.speechbubble_vp.z = 999999
|
||||
arrow = Sprite.new($game_temp.speechbubble_vp)
|
||||
arrow.x = $game_map.events[$game_temp.speechbubble_talking].screen_x - Graphics.width
|
||||
arrow.y = ($game_map.events[$game_temp.speechbubble_talking].screen_y - Graphics.height) - 136
|
||||
arrow.z = 999999
|
||||
arrow.bitmap = RPG::Cache.load_bitmap_path(SPEECH_BUBBLE_FOLDER_PATH + "Arrow4")
|
||||
arrow.zoom_x = 2
|
||||
arrow.zoom_y = 2
|
||||
if arrow.x<-230
|
||||
arrow.x = $game_map.events[$game_temp.speechbubble_talking].screen_x
|
||||
arrow.bitmap = RPG::Cache.load_bitmap_path(SPEECH_BUBBLE_FOLDER_PATH + "Arrow3")
|
||||
end
|
||||
else # Player facing left, down, right, message window bottom.
|
||||
$game_temp.speechbubble_vp = Viewport.new(0, 0, Graphics.width, 280)
|
||||
$game_temp.speechbubble_vp.z = 999999
|
||||
arrow = Sprite.new($game_temp.speechbubble_vp)
|
||||
arrow.x = $game_map.events[$game_temp.speechbubble_talking].screen_x
|
||||
arrow.y = $game_map.events[$game_temp.speechbubble_talking].screen_y
|
||||
arrow.z = 999999
|
||||
arrow.bitmap = RPG::Cache.load_bitmap_path(SPEECH_BUBBLE_FOLDER_PATH + "Arrow1")
|
||||
if arrow.y>=Graphics.height-120 # Change arrow direction.
|
||||
$game_temp.speechbubble_outofrange=true
|
||||
$game_temp.speechbubble_vp.rect.y+=104
|
||||
arrow.x = $game_map.events[$game_temp.speechbubble_talking].screen_x - Graphics.width
|
||||
arrow.bitmap = RPG::Cache.load_bitmap_path(SPEECH_BUBBLE_FOLDER_PATH + "Arrow4")
|
||||
arrow.y = ($game_map.events[$game_temp.speechbubble_talking].screen_y - Graphics.height) - 136
|
||||
if arrow.x<-250
|
||||
arrow.x = $game_map.events[$game_temp.speechbubble_talking].screen_x
|
||||
arrow.bitmap = RPG::Cache.load_bitmap_path(SPEECH_BUBBLE_FOLDER_PATH + "Arrow3")
|
||||
end
|
||||
if arrow.x>=256
|
||||
arrow.x-=15# = $game_map.events[$game_temp.speechbubble_talking].screen_x-Graphics.width
|
||||
arrow.bitmap = RPG::Cache.load_bitmap_path(SPEECH_BUBBLE_FOLDER_PATH + "Arrow3")
|
||||
end
|
||||
else
|
||||
$game_temp.speechbubble_outofrange=false
|
||||
end
|
||||
arrow.zoom_x = 2
|
||||
arrow.zoom_y = 2
|
||||
end
|
||||
end
|
||||
$game_temp.speechbubble_arrow = arrow
|
||||
msgwindow=Window_AdvancedTextPokemon.new("")
|
||||
if !viewport
|
||||
msgwindow.z=99999
|
||||
else
|
||||
msgwindow.viewport=viewport
|
||||
end
|
||||
msgwindow.visible=true
|
||||
msgwindow.letterbyletter=true
|
||||
msgwindow.back_opacity=MessageConfig::WindowOpacity
|
||||
pbBottomLeftLines(msgwindow,2)
|
||||
$game_temp.message_window_showing=true if $game_temp
|
||||
$game_message.visible=true if $game_message
|
||||
skin=MessageConfig.pbGetSpeechFrame() if !skin
|
||||
msgwindow.setSkin(skin)
|
||||
return msgwindow
|
||||
end
|
||||
|
||||
def pbDisposeMessageWindow(msgwindow)
|
||||
$game_temp.message_window_showing=false if $game_temp
|
||||
$game_message.visible=false if $game_message
|
||||
msgwindow.dispose
|
||||
$game_temp.speechbubble_arrow.dispose if $game_temp.speechbubble_arrow
|
||||
$game_temp.speechbubble_vp.dispose if $game_temp.speechbubble_vp
|
||||
$game_temp.speechbubble_bubble=nil
|
||||
end
|
||||
|
||||
def pbCallBubUp(status=0,value=0)
|
||||
pbCallBub(status,value,false,true)
|
||||
end
|
||||
|
||||
def pbCallBubDown(status=0,value=0)
|
||||
pbCallBub(status,value,true,false)
|
||||
end
|
||||
|
||||
#always_down, always_up is not ideal but used everywhere in game so too late to change
|
||||
def pbCallBub(status=0,value=0,always_down=false, always_up=false)
|
||||
begin
|
||||
$game_temp.speechbubble_talking=get_character(value).id
|
||||
$game_temp.speechbubble_bubble=status
|
||||
$game_temp.speechbubble_alwaysDown=always_down
|
||||
$game_temp.speechbubble_alwaysUp=always_up
|
||||
|
||||
rescue
|
||||
return #Let's not crash the game if error
|
||||
end
|
||||
end
|
||||
@@ -3,33 +3,27 @@
|
||||
# Necessary dor setting the various events within the pokemart map, uses the numbers as wondertrade
|
||||
def get_city_numerical_id(city_sym)
|
||||
current_city_numerical = {
|
||||
:PEWTER => 1,
|
||||
:CERULEAN => 2,
|
||||
:VERMILLION => 3,
|
||||
:LAVENDER => 4,
|
||||
:CELADON => 5,
|
||||
:FUCHSIA => 6,
|
||||
:SAFFRON => 7,
|
||||
:CINNABAR => 8,
|
||||
:LEAGUE => 9,
|
||||
:VIOLET => 10,
|
||||
:AZALEA => 11,
|
||||
:GOLDENROD => 12,
|
||||
:ECRUTEAK => 13,
|
||||
:MAHOGANY => 14,
|
||||
:BLACKTHORN => 15,
|
||||
:OLIVINE => 16,
|
||||
:CIANWOOD => 17,
|
||||
:KNOTISLAND => 18,
|
||||
:BOONISLAND => 19,
|
||||
:KINISLAND => 20,
|
||||
:CHRONOISLAND => 21,
|
||||
:CRIMSON => 22,
|
||||
:LITTLEROOT => 1,
|
||||
:OLDALE => 2,
|
||||
:PETALBURG => 3,
|
||||
:RUSTBORO => 4,
|
||||
:DEWFORD => 5,
|
||||
:SLATEPORT => 6,
|
||||
:MAUVILLE => 7,
|
||||
:VERDANTURF => 8,
|
||||
:FALLARBOR => 9,
|
||||
:LAVARIDGE => 10,
|
||||
:FORTREE => 11,
|
||||
:LILYCOVE => 12,
|
||||
:MOSSDEEP => 13,
|
||||
:SOOTOPOLIS => 14,
|
||||
:PACIFIDLOG => 15,
|
||||
:EVERGRANDE => 16
|
||||
}
|
||||
return current_city_numerical[city_sym]
|
||||
end
|
||||
|
||||
POKEMART_MAP_ID = 357
|
||||
POKEMART_MAP_ID = 18
|
||||
POKEMART_DOOR_POS = [12, 12]
|
||||
# city -> Symbol
|
||||
def enter_pokemart(city)
|
||||
@@ -48,27 +42,26 @@ end
|
||||
|
||||
def exit_pokemart()
|
||||
pokemart_entrances = {
|
||||
:PEWTER => [380, 43, 24],
|
||||
:CERULEAN => [1, 24, 22],
|
||||
:VERMILLION => [19, 32, 13],
|
||||
:LAVENDER => [50, 20, 23],
|
||||
:CELADON => [95, 18, 15], # not a real pokemart
|
||||
:FUCHSIA => [472, 7, 17],
|
||||
:SAFFRON => [108, 53, 24],
|
||||
:CINNABAR => [98, 30, 30],
|
||||
:CRIMSON => [167, 21, 36],
|
||||
:GOLDENROD => [237, 36, 33], # not a real pokemart
|
||||
:AZALEA => [278, 34, 17],
|
||||
:AZALEA_FLOODED => [338, 34, 17],
|
||||
:VIOLET => [230, 20, 31],
|
||||
:BLACKTHORN => [329, 16, 36],
|
||||
:MAHOGANY => [631, 19, 19], # not a real pokemart
|
||||
:ECRUTEAK => [359, 46, 38],
|
||||
:OLIVINE => [138, 33, 23],
|
||||
:CIANWOOD => [709.8, 46],
|
||||
:LITTLEROOT => [1, 0, 0],
|
||||
:OLDALE => [1, 0, 0],
|
||||
:VERMILLION => [1, 0, 0],
|
||||
:PETALBURG => [7, 32, 19],
|
||||
:RUSTBORO => [1, 0, 0],
|
||||
:DEWFORD => [1, 0, 0],
|
||||
:SLATEPORT => [1, 0, 0],
|
||||
:MAUVILLE => [1, 0, 0],
|
||||
:VERDANTURF => [1, 0, 0],
|
||||
:FALLARBOR => [1, 0, 0],
|
||||
:LAVARIDGE => [1, 0, 0],
|
||||
:FORTREE => [1, 0, 0],
|
||||
:LILYCOVE => [1, 0, 0],
|
||||
:MOSSDEEP => [1, 0, 0],
|
||||
:SOOTOPOLIS => [1, 0, 0],
|
||||
:PACIFIDLOG => [1, 0, 0],
|
||||
:EVERGRANDE => [1, 0, 0],
|
||||
}
|
||||
current_city = pbGet(VAR_CURRENT_MART)
|
||||
current_city = :PEWTER if !current_city.is_a?(Symbol)
|
||||
current_city = :PETALBURG if !current_city.is_a?(Symbol)
|
||||
|
||||
entrance_map = pokemart_entrances[current_city][0]
|
||||
entrance_x = pokemart_entrances[current_city][1]
|
||||
Binary file not shown.
@@ -1,84 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Move,TWINEEDLE]
|
||||
Name = Essentials
|
||||
<User>
|
||||
FoeInvertX = true
|
||||
FoeInvertY = true
|
||||
MoveX = 0,1,28
|
||||
MoveY = 0,1,-16
|
||||
MoveX = 3,1,0
|
||||
MoveY = 3,1,0
|
||||
<Target>
|
||||
FoeInvertX = true
|
||||
MoveX = 9,1,-2
|
||||
MoveColorRed = 9,8,160
|
||||
MoveColorGreen = 9,8,32
|
||||
MoveColorBlue = 9,8,248
|
||||
MoveColorAlpha = 9,8,160
|
||||
MoveX = 10,2,2
|
||||
MoveX = 12,2,-2
|
||||
MoveX = 14,2,2
|
||||
MoveX = 16,1,0
|
||||
MoveColorRed = 19,6,0
|
||||
MoveColorGreen = 19,6,0
|
||||
MoveColorBlue = 19,6,0
|
||||
MoveColorAlpha = 19,6,0
|
||||
<Needle 1>
|
||||
Graphic = Bug/Twineedle needle
|
||||
Focus = UserAndTarget
|
||||
AngleOverride = InitialAngleToFocus
|
||||
SetZ = 4,-50
|
||||
SetZoomX = 4,50
|
||||
SetZoomY = 4,80
|
||||
SetColorRed = 4,160
|
||||
SetColorGreen = 4,32
|
||||
SetColorBlue = 4,192
|
||||
SetColorAlpha = 4,128
|
||||
MoveX = 4,7,200
|
||||
MoveY = 4,7,-180
|
||||
SetVisible = 11,false
|
||||
<Hit 1>
|
||||
Graphic = Bug/Twineedle hit
|
||||
Focus = Target
|
||||
SetY = 11,16
|
||||
SetZ = 11,10
|
||||
SetZoomX = 11,0
|
||||
SetZoomY = 11,0
|
||||
MoveZoomX = 11,3,50
|
||||
MoveZoomY = 11,3,50
|
||||
SetColorRed = 13,248
|
||||
SetColorBlue = 13,248
|
||||
SetColorAlpha = 13,255
|
||||
MoveOpacity = 13,3,0
|
||||
SetVisible = 16,false
|
||||
<Needle 2>
|
||||
Graphic = Bug/Twineedle needle
|
||||
Focus = UserAndTarget
|
||||
AngleOverride = InitialAngleToFocus
|
||||
SetZ = 7,-50
|
||||
SetZoomX = 7,50
|
||||
SetZoomY = 7,80
|
||||
SetColorRed = 7,160
|
||||
SetColorGreen = 7,32
|
||||
SetColorBlue = 7,192
|
||||
SetColorAlpha = 7,128
|
||||
MoveX = 7,6,200
|
||||
MoveY = 7,6,-200
|
||||
SetVisible = 13,false
|
||||
<Hit 2>
|
||||
Graphic = Bug/Twineedle hit
|
||||
Focus = Target
|
||||
SetX = 13,-8
|
||||
SetZ = 13,10
|
||||
SetZoomX = 13,0
|
||||
SetZoomY = 13,0
|
||||
MoveZoomX = 13,3,50
|
||||
MoveZoomY = 13,3,50
|
||||
SetColorRed = 15,248
|
||||
SetColorBlue = 15,248
|
||||
SetColorAlpha = 15,255
|
||||
MoveOpacity = 15,3,0
|
||||
SetVisible = 18,false
|
||||
<SE>
|
||||
Play = 0,Bug/Twineedle
|
||||
@@ -1,118 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Move,BITE]
|
||||
Name = Essentials
|
||||
NoUser = true
|
||||
<Target>
|
||||
FoeInvertX = true
|
||||
MoveX = 7,1,-2
|
||||
MoveX = 8,2,2
|
||||
MoveX = 10,2,-2
|
||||
MoveX = 12,2,2
|
||||
MoveX = 14,1,0
|
||||
<Teeth upper>
|
||||
Graphic = Dark/Bite teeth
|
||||
Focus = Target
|
||||
SetY = 0,-18
|
||||
SetZ = 0,10
|
||||
SetZoomX = 0,125
|
||||
SetZoomY = 0,125
|
||||
SetAngle = 0,180
|
||||
SetOpacity = 0,0
|
||||
MoveOpacity = 0,1,255
|
||||
MoveY = 0,3,-72
|
||||
MoveZoomY = 0,3,200
|
||||
MoveY = 4,3,-10,EaseOut
|
||||
MoveZoomY = 4,3,100
|
||||
MoveY = 7,8,-48
|
||||
MoveZoomY = 7,8,150
|
||||
MoveOpacity = 11,4,0
|
||||
<Teeth lower>
|
||||
Graphic = Dark/Bite teeth
|
||||
Focus = Target
|
||||
SetY = 0,18
|
||||
SetZ = 0,5
|
||||
SetZoomX = 0,125
|
||||
SetZoomY = 0,125
|
||||
SetOpacity = 0,0
|
||||
MoveOpacity = 0,1,255
|
||||
MoveY = 0,3,72
|
||||
MoveZoomY = 0,3,200
|
||||
MoveY = 4,3,10,EaseOut
|
||||
MoveZoomY = 4,3,100
|
||||
MoveY = 7,8,48
|
||||
MoveZoomY = 7,8,150
|
||||
MoveOpacity = 11,4,0
|
||||
<Teeth upper afterimage>
|
||||
Graphic = Dark/Bite teeth
|
||||
Focus = Target
|
||||
SetY = 4,-72
|
||||
SetZ = 4,20
|
||||
SetZoomX = 4,125
|
||||
SetZoomY = 4,200
|
||||
SetAngle = 4,180
|
||||
MoveOpacity = 4,2,0
|
||||
SetVisible = 6,false
|
||||
<Teeth lower afterimage>
|
||||
Graphic = Dark/Bite teeth
|
||||
Focus = Target
|
||||
SetY = 4,72
|
||||
SetZ = 4,15
|
||||
SetZoomX = 4,125
|
||||
SetZoomY = 4,200
|
||||
MoveOpacity = 4,2,0
|
||||
SetVisible = 6,false
|
||||
<Hit left yellow>
|
||||
Graphic = Dark/Bite hit
|
||||
Focus = Target
|
||||
SetX = 4,-64
|
||||
SetZ = 4,30
|
||||
SetZoomX = 4,0
|
||||
SetZoomY = 4,0
|
||||
SetAngle = 4,-20
|
||||
SetColorRed = 4,248
|
||||
SetColorGreen = 4,248
|
||||
SetColorAlpha = 4,255
|
||||
MoveZoomX = 4,5,150
|
||||
MoveZoomY = 4,5,150
|
||||
MoveOpacity = 7,2,0
|
||||
SetVisible = 9,false
|
||||
<Hit left white>
|
||||
Graphic = Dark/Bite hit
|
||||
Focus = Target
|
||||
SetX = 4,-64
|
||||
SetZ = 4,35
|
||||
SetZoomX = 4,0
|
||||
SetZoomY = 4,0
|
||||
SetAngle = 4,-20
|
||||
MoveZoomX = 4,5,130
|
||||
MoveZoomY = 4,5,130
|
||||
MoveOpacity = 7,2,0
|
||||
SetVisible = 9,false
|
||||
<Hit right yellow>
|
||||
Graphic = Dark/Bite hit
|
||||
Focus = Target
|
||||
SetX = 4,64
|
||||
SetZ = 4,30
|
||||
SetZoomX = 4,0
|
||||
SetZoomY = 4,0
|
||||
SetColorRed = 4,248
|
||||
SetColorGreen = 4,248
|
||||
SetColorAlpha = 4,255
|
||||
MoveZoomX = 4,5,150
|
||||
MoveZoomY = 4,5,150
|
||||
MoveOpacity = 7,2,0
|
||||
SetVisible = 9,false
|
||||
<Hit right white>
|
||||
Graphic = Dark/Bite hit
|
||||
Focus = Target
|
||||
SetX = 4,64
|
||||
SetZ = 4,35
|
||||
SetZoomX = 4,0
|
||||
SetZoomY = 4,0
|
||||
MoveZoomX = 4,5,130
|
||||
MoveZoomY = 4,5,130
|
||||
MoveOpacity = 7,2,0
|
||||
SetVisible = 9,false
|
||||
<SE>
|
||||
Play = 4,Dark/Bite
|
||||
@@ -1,130 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Attract]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/poi hear mus
|
||||
Focus = User
|
||||
SetFrame = 7,2
|
||||
SetX = 7,-29
|
||||
SetY = 7,-46
|
||||
SetZ = 7,28
|
||||
SetFrame = 8,3
|
||||
SetX = 8,-43
|
||||
SetY = 8,-31
|
||||
SetFrame = 9,4
|
||||
SetX = 9,-34
|
||||
SetY = 9,-29
|
||||
SetX = 10,-8
|
||||
SetY = 10,-11
|
||||
SetFrame = 11,5
|
||||
SetX = 11,-23
|
||||
SetY = 11,-6
|
||||
SetX = 12,-7
|
||||
SetY = 12,-22
|
||||
SetX = 13,6
|
||||
SetY = 13,-42
|
||||
SetX = 14,20
|
||||
SetY = 14,-69
|
||||
SetY = 15,-77
|
||||
SetOpacity = 15,192
|
||||
SetY = 16,-85
|
||||
SetOpacity = 16,128
|
||||
SetY = 17,-93
|
||||
SetOpacity = 17,64
|
||||
<Particle 3>
|
||||
Graphic = Examples/poi hear mus
|
||||
Focus = User
|
||||
SetFrame = 8,2
|
||||
SetX = 8,-35
|
||||
SetY = 8,-46
|
||||
SetZ = 8,29
|
||||
SetX = 9,-51
|
||||
SetY = 9,-35
|
||||
SetFrame = 10,3
|
||||
SetX = 10,-34
|
||||
SetY = 10,-10
|
||||
SetFrame = 11,4
|
||||
SetX = 11,-23
|
||||
SetY = 11,-8
|
||||
SetFrame = 12,5
|
||||
SetX = 12,-36
|
||||
SetY = 12,-6
|
||||
SetX = 13,-31
|
||||
SetY = 13,-25
|
||||
SetX = 14,-48
|
||||
SetY = 14,-46
|
||||
SetY = 15,-54
|
||||
SetOpacity = 15,192
|
||||
SetY = 16,-62
|
||||
SetOpacity = 16,128
|
||||
SetY = 17,-70
|
||||
SetOpacity = 17,64
|
||||
<Particle 4>
|
||||
Graphic = Examples/poi hear mus
|
||||
Focus = User
|
||||
SetFrame = 12,2
|
||||
SetX = 12,13
|
||||
SetY = 12,-3
|
||||
SetZ = 12,30
|
||||
SetFrame = 13,3
|
||||
SetX = 13,27
|
||||
SetY = 13,-24
|
||||
SetFrame = 14,4
|
||||
SetX = 14,28
|
||||
SetY = 14,-52
|
||||
SetX = 15,30
|
||||
SetY = 15,-56
|
||||
SetOpacity = 15,192
|
||||
SetY = 16,-64
|
||||
SetOpacity = 16,128
|
||||
SetY = 17,-72
|
||||
SetOpacity = 17,64
|
||||
<Particle 1>
|
||||
Graphic = Examples/poi hear mus
|
||||
Focus = User
|
||||
SetFrame = 0,2
|
||||
SetX = 0,-10
|
||||
SetY = 0,-29
|
||||
SetZ = 0,27
|
||||
SetX = 1,23
|
||||
SetY = 1,-31
|
||||
SetFrame = 2,3
|
||||
SetX = 2,48
|
||||
SetY = 2,-36
|
||||
SetX = 3,52
|
||||
SetY = 3,-47
|
||||
SetFrame = 4,4
|
||||
SetX = 4,31
|
||||
SetY = 4,-64
|
||||
SetFrame = 5,5
|
||||
SetX = 5,-36
|
||||
SetY = 5,-60
|
||||
SetX = 6,-59
|
||||
SetY = 6,-54
|
||||
SetX = 7,-76
|
||||
SetY = 7,-28
|
||||
SetFrame = 8,6
|
||||
SetX = 8,-41
|
||||
SetY = 8,-17
|
||||
SetX = 9,-15
|
||||
SetY = 9,-11
|
||||
SetX = 10,-8
|
||||
SetY = 10,-23
|
||||
SetX = 11,-9
|
||||
SetY = 11,-32
|
||||
SetY = 12,-49
|
||||
SetY = 13,-65
|
||||
SetY = 14,-89
|
||||
SetY = 15,-97
|
||||
SetOpacity = 15,192
|
||||
SetY = 16,-105
|
||||
SetOpacity = 16,128
|
||||
SetY = 17,-113
|
||||
SetOpacity = 17,64
|
||||
<SE>
|
||||
Play = 0,infatuated
|
||||
@@ -1,46 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Bind]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/Struggle
|
||||
Focus = User
|
||||
SetFrame = 0,1
|
||||
SetX = 0,56
|
||||
SetY = 0,6
|
||||
SetZ = 0,28
|
||||
SetX = 1,96
|
||||
SetY = 1,-2
|
||||
SetX = 2,104
|
||||
SetY = 2,6
|
||||
SetX = 3,80
|
||||
SetY = 3,-2
|
||||
SetX = 4,48
|
||||
SetX = 5,80
|
||||
SetX = 6,112
|
||||
SetY = 6,6
|
||||
SetX = 7,96
|
||||
<Particle 1>
|
||||
Graphic = Examples/Struggle
|
||||
Focus = User
|
||||
SetX = 0,-64
|
||||
SetY = 0,6
|
||||
SetZ = 0,27
|
||||
SetX = 1,-96
|
||||
SetY = 1,-2
|
||||
SetX = 2,-144
|
||||
SetY = 2,6
|
||||
SetX = 3,-120
|
||||
SetY = 3,-2
|
||||
SetX = 4,-88
|
||||
SetX = 5,-128
|
||||
SetX = 6,-168
|
||||
SetX = 7,-120
|
||||
<SE>
|
||||
Play = 0,Slash10,80
|
||||
Play = 3,Slash10,80
|
||||
Play = 6,Slash10,80
|
||||
@@ -1,27 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Burn]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 1>
|
||||
Graphic = Examples/Flames
|
||||
Focus = User
|
||||
SetFrame = 0,2
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
SetZ = 0,27
|
||||
SetZoomX = 0,200
|
||||
SetZoomY = 0,200
|
||||
SetFrame = 2,1
|
||||
SetFrame = 4,0
|
||||
SetFrame = 6,1
|
||||
SetFrame = 8,0
|
||||
SetFrame = 10,1
|
||||
SetFrame = 11,0
|
||||
SetFrame = 12,1
|
||||
SetFrame = 13,2
|
||||
<SE>
|
||||
Play = 0,Fire2,80
|
||||
@@ -1,63 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Confusion]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 1>
|
||||
Graphic = Examples/confused
|
||||
Focus = User
|
||||
SetX = 0,0
|
||||
SetY = 0,-33
|
||||
SetZ = 0,27
|
||||
SetFrame = 1,1
|
||||
SetY = 1,-32
|
||||
SetFrame = 2,2
|
||||
SetY = 2,-39
|
||||
SetFrame = 3,3
|
||||
SetX = 3,1
|
||||
SetY = 3,-33
|
||||
SetFrame = 4,4
|
||||
SetX = 4,0
|
||||
SetY = 4,-32
|
||||
SetFrame = 5,5
|
||||
SetX = 5,4
|
||||
SetY = 5,-37
|
||||
SetFrame = 6,6
|
||||
SetX = 6,5
|
||||
SetY = 6,-39
|
||||
SetFrame = 7,7
|
||||
SetX = 7,7
|
||||
SetFrame = 8,8
|
||||
SetX = 8,0
|
||||
SetY = 8,-41
|
||||
SetFrame = 9,9
|
||||
SetX = 9,-2
|
||||
SetY = 9,-37
|
||||
SetFrame = 10,10
|
||||
SetX = 10,12
|
||||
SetY = 10,-40
|
||||
SetFrame = 11,11
|
||||
SetX = 11,2
|
||||
SetY = 11,-43
|
||||
SetFrame = 12,12
|
||||
SetX = 12,-1
|
||||
SetFrame = 13,13
|
||||
SetX = 13,2
|
||||
SetY = 13,-44
|
||||
SetFrame = 14,14
|
||||
SetY = 14,-51
|
||||
SetFrame = 15,15
|
||||
SetX = 15,7
|
||||
SetY = 15,-54
|
||||
SetX = 16,8
|
||||
SetY = 16,-55
|
||||
SetOpacity = 16,233
|
||||
SetX = 17,10
|
||||
SetY = 17,-57
|
||||
SetOpacity = 17,154
|
||||
SetVisible = 18,false
|
||||
<SE>
|
||||
Play = 0,throw,80
|
||||
@@ -1,170 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,FireSpin]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 1>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 0,16
|
||||
SetX = 0,-29
|
||||
SetY = 0,40
|
||||
SetZ = 0,27
|
||||
SetVisible = 6,false
|
||||
<Particle 2>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 0,16
|
||||
SetX = 0,9
|
||||
SetY = 0,42
|
||||
SetZ = 0,28
|
||||
SetVisible = 6,false
|
||||
<Particle 3>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 0,16
|
||||
SetX = 0,44
|
||||
SetY = 0,41
|
||||
SetZ = 0,29
|
||||
SetVisible = 6,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 1,16
|
||||
SetX = 1,-29
|
||||
SetY = 1,25
|
||||
SetZ = 1,30
|
||||
SetVisible = 6,false
|
||||
<Particle 5>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 1,16
|
||||
SetX = 1,10
|
||||
SetY = 1,27
|
||||
SetZ = 1,31
|
||||
SetVisible = 6,false
|
||||
<Particle 6>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 1,16
|
||||
SetX = 1,47
|
||||
SetY = 1,26
|
||||
SetZ = 1,32
|
||||
SetVisible = 6,false
|
||||
<Particle 7>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 2,16
|
||||
SetX = 2,-25
|
||||
SetY = 2,12
|
||||
SetZ = 2,33
|
||||
SetVisible = 6,false
|
||||
<Particle 8>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 2,16
|
||||
SetX = 2,11
|
||||
SetY = 2,11
|
||||
SetZ = 2,34
|
||||
SetVisible = 6,false
|
||||
<Particle 9>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 2,16
|
||||
SetX = 2,49
|
||||
SetY = 2,9
|
||||
SetZ = 2,35
|
||||
SetVisible = 6,false
|
||||
<Particle 10>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 3,16
|
||||
SetX = 3,-27
|
||||
SetY = 3,-4
|
||||
SetZ = 3,36
|
||||
SetVisible = 6,false
|
||||
<Particle 11>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 3,16
|
||||
SetX = 3,12
|
||||
SetY = 3,-5
|
||||
SetZ = 3,37
|
||||
SetVisible = 6,false
|
||||
<Particle 12>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 3,16
|
||||
SetX = 3,47
|
||||
SetY = 3,-7
|
||||
SetZ = 3,38
|
||||
SetVisible = 6,false
|
||||
<Particle 13>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 4,16
|
||||
SetX = 4,-28
|
||||
SetY = 4,-19
|
||||
SetZ = 4,39
|
||||
SetVisible = 6,false
|
||||
<Particle 14>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 4,16
|
||||
SetX = 4,13
|
||||
SetY = 4,-18
|
||||
SetZ = 4,40
|
||||
SetVisible = 6,false
|
||||
<Particle 15>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 4,16
|
||||
SetX = 4,51
|
||||
SetY = 4,-20
|
||||
SetZ = 4,41
|
||||
SetVisible = 6,false
|
||||
<Particle 16>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 5,16
|
||||
SetX = 5,-29
|
||||
SetY = 5,-34
|
||||
SetZ = 5,42
|
||||
SetVisible = 6,false
|
||||
<Particle 17>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 5,16
|
||||
SetX = 5,13
|
||||
SetY = 5,-33
|
||||
SetZ = 5,43
|
||||
SetVisible = 6,false
|
||||
<Particle 18>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 5,16
|
||||
SetX = 5,50
|
||||
SetY = 5,-35
|
||||
SetZ = 5,44
|
||||
SetVisible = 6,false
|
||||
<Particle 19>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 5,16
|
||||
SetX = 5,-10
|
||||
SetY = 5,41
|
||||
SetZ = 5,45
|
||||
SetVisible = 6,false
|
||||
<Particle 20>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = User
|
||||
SetFrame = 5,16
|
||||
SetX = 5,31
|
||||
SetY = 5,42
|
||||
SetZ = 5,46
|
||||
SetVisible = 6,false
|
||||
<SE>
|
||||
Play = 0,throw,80
|
||||
@@ -1,94 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Frozen]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/016-Ice01
|
||||
Focus = User
|
||||
SetFrame = 0,6
|
||||
SetX = 0,-56
|
||||
SetY = 0,-82
|
||||
SetZ = 0,28
|
||||
SetX = 1,-24
|
||||
SetY = 1,-66
|
||||
SetFrame = 8,7
|
||||
SetX = 8,0
|
||||
SetY = 8,-58
|
||||
SetX = 9,56
|
||||
SetY = 9,6
|
||||
SetX = 10,72
|
||||
SetY = 10,38
|
||||
SetFrame = 11,8
|
||||
SetX = 11,48
|
||||
SetY = 11,-82
|
||||
SetX = 12,72
|
||||
SetY = 12,-50
|
||||
SetFrame = 13,6
|
||||
SetX = 13,80
|
||||
SetY = 13,-2
|
||||
SetVisible = 14,false
|
||||
<Particle 3>
|
||||
Graphic = Examples/016-Ice01
|
||||
Focus = User
|
||||
SetFrame = 1,9
|
||||
SetX = 1,0
|
||||
SetY = 1,-2
|
||||
SetZ = 1,29
|
||||
SetVisible = 2,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/016-Ice01
|
||||
Focus = User
|
||||
SetFrame = 6,11
|
||||
SetX = 6,0
|
||||
SetY = 6,-2
|
||||
SetZ = 6,29
|
||||
SetOpacity = 6,192
|
||||
SetOpacity = 7,255
|
||||
SetVisible = 8,false
|
||||
<Particle 5>
|
||||
Graphic = Examples/016-Ice01
|
||||
Focus = User
|
||||
SetFrame = 9,8
|
||||
SetX = 9,48
|
||||
SetY = 9,-82
|
||||
SetZ = 9,29
|
||||
SetFrame = 10,6
|
||||
SetX = 10,24
|
||||
SetY = 10,-42
|
||||
SetX = 11,-40
|
||||
SetY = 11,-18
|
||||
SetX = 12,-56
|
||||
SetY = 12,14
|
||||
SetFrame = 13,7
|
||||
SetX = 13,-32
|
||||
SetY = 13,46
|
||||
SetVisible = 14,false
|
||||
<Particle 1>
|
||||
Graphic = Examples/016-Ice01
|
||||
Focus = User
|
||||
SetFrame = 0,9
|
||||
SetX = 0,0
|
||||
SetY = 0,-2
|
||||
SetZ = 0,27
|
||||
SetFrame = 1,10
|
||||
SetOpacity = 1,128
|
||||
SetOpacity = 2,255
|
||||
SetOpacity = 7,192
|
||||
SetFrame = 8,11
|
||||
SetOpacity = 8,255
|
||||
SetFrame = 9,12
|
||||
SetFrame = 10,10
|
||||
SetOpacity = 10,100
|
||||
SetFrame = 11,9
|
||||
SetFrame = 12,11
|
||||
SetFrame = 13,12
|
||||
SetFrame = 14,6
|
||||
SetX = 14,24
|
||||
SetY = 14,38
|
||||
SetOpacity = 14,255
|
||||
<SE>
|
||||
Play = 0,Ice5,80
|
||||
@@ -1,271 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Hail]
|
||||
Name = Example anim
|
||||
NoUser = true
|
||||
NoTarget = true
|
||||
<Particle 0>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,7
|
||||
SetX = 0,37
|
||||
SetY = 0,26
|
||||
SetZ = 0,27
|
||||
SetFrame = 1,8
|
||||
SetX = 1,207
|
||||
SetY = 1,56
|
||||
SetFrame = 2,7
|
||||
SetX = 2,84
|
||||
SetY = 2,43
|
||||
SetFrame = 3,8
|
||||
SetX = 3,171
|
||||
SetY = 3,56
|
||||
SetFrame = 4,9
|
||||
SetX = 4,118
|
||||
SetY = 4,97
|
||||
SetX = 5,357
|
||||
SetY = 5,200
|
||||
SetFrame = 6,8
|
||||
SetX = 6,10
|
||||
SetY = 6,9
|
||||
SetFrame = 7,7
|
||||
SetX = 7,109
|
||||
SetY = 7,105
|
||||
SetX = 8,136
|
||||
SetY = 8,77
|
||||
SetX = 9,69
|
||||
SetY = 9,208
|
||||
SetX = 10,136
|
||||
SetY = 10,107
|
||||
SetVisible = 11,false
|
||||
<Particle 1>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,7
|
||||
SetX = 0,164
|
||||
SetY = 0,136
|
||||
SetZ = 0,28
|
||||
SetX = 1,464
|
||||
SetY = 1,117
|
||||
SetVisible = 2,false
|
||||
<Particle 2>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,8
|
||||
SetX = 0,302
|
||||
SetY = 0,79
|
||||
SetZ = 0,29
|
||||
SetFrame = 1,9
|
||||
SetX = 1,201
|
||||
SetY = 1,204
|
||||
SetX = 2,228
|
||||
SetY = 2,98
|
||||
SetFrame = 3,8
|
||||
SetX = 3,278
|
||||
SetY = 3,164
|
||||
SetVisible = 4,false
|
||||
<Particle 3>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,9
|
||||
SetX = 0,440
|
||||
SetY = 0,194
|
||||
SetZ = 0,30
|
||||
SetX = 1,51
|
||||
SetY = 1,161
|
||||
SetFrame = 2,8
|
||||
SetX = 2,263
|
||||
SetY = 2,253
|
||||
SetFrame = 3,7
|
||||
SetX = 3,436
|
||||
SetY = 3,52
|
||||
SetFrame = 4,9
|
||||
SetX = 4,390
|
||||
SetY = 4,210
|
||||
SetVisible = 5,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,9
|
||||
SetX = 0,362
|
||||
SetY = 0,252
|
||||
SetZ = 0,31
|
||||
SetVisible = 1,false
|
||||
<Particle 5>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 2,7
|
||||
SetX = 2,78
|
||||
SetY = 2,206
|
||||
SetZ = 2,31
|
||||
SetVisible = 3,false
|
||||
<Particle 6>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 3,9
|
||||
SetX = 3,441
|
||||
SetY = 3,241
|
||||
SetZ = 3,28
|
||||
SetVisible = 4,false
|
||||
<Particle 7>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 4,9
|
||||
SetX = 4,259
|
||||
SetY = 4,87
|
||||
SetZ = 4,31
|
||||
SetFrame = 5,8
|
||||
SetX = 5,181
|
||||
SetY = 5,217
|
||||
SetFrame = 6,9
|
||||
SetX = 6,298
|
||||
SetY = 6,96
|
||||
SetX = 7,191
|
||||
SetY = 7,222
|
||||
SetX = 8,365
|
||||
SetY = 8,231
|
||||
SetX = 9,337
|
||||
SetY = 9,93
|
||||
SetX = 10,82
|
||||
SetY = 10,240
|
||||
SetFrame = 11,7
|
||||
SetX = 11,489
|
||||
SetY = 11,96
|
||||
SetFrame = 12,9
|
||||
SetX = 12,198
|
||||
SetY = 12,28
|
||||
<Particle 8>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 4,8
|
||||
SetX = 4,72
|
||||
SetY = 4,220
|
||||
SetZ = 4,32
|
||||
SetVisible = 5,false
|
||||
<Particle 9>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 5,9
|
||||
SetX = 5,225
|
||||
SetY = 5,69
|
||||
SetZ = 5,28
|
||||
SetVisible = 6,false
|
||||
<Particle 10>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 6,8
|
||||
SetX = 6,334
|
||||
SetY = 6,226
|
||||
SetZ = 6,29
|
||||
SetVisible = 7,false
|
||||
<Particle 11>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 6,9
|
||||
SetX = 6,465
|
||||
SetY = 6,116
|
||||
SetZ = 6,30
|
||||
SetFrame = 7,8
|
||||
SetX = 7,454
|
||||
SetY = 7,82
|
||||
SetX = 8,276
|
||||
SetY = 8,136
|
||||
SetX = 9,465
|
||||
SetY = 9,160
|
||||
SetFrame = 10,9
|
||||
SetX = 10,285
|
||||
SetY = 10,105
|
||||
SetFrame = 11,7
|
||||
SetX = 11,419
|
||||
SetY = 11,272
|
||||
SetFrame = 12,8
|
||||
SetX = 12,230
|
||||
SetY = 12,142
|
||||
<Particle 12>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 6,9
|
||||
SetX = 6,161
|
||||
SetY = 6,265
|
||||
SetZ = 6,32
|
||||
SetX = 7,296
|
||||
SetY = 7,172
|
||||
SetVisible = 8,false
|
||||
<Particle 13>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 8,8
|
||||
SetX = 8,180
|
||||
SetY = 8,199
|
||||
SetZ = 8,28
|
||||
SetX = 9,163
|
||||
SetY = 9,99
|
||||
SetVisible = 10,false
|
||||
<Particle 14>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 8,9
|
||||
SetX = 8,444
|
||||
SetY = 8,137
|
||||
SetZ = 8,29
|
||||
SetX = 9,303
|
||||
SetY = 9,240
|
||||
SetFrame = 10,8
|
||||
SetX = 10,444
|
||||
SetY = 10,89
|
||||
SetVisible = 11,false
|
||||
<Particle 15>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 9,9
|
||||
SetX = 9,28
|
||||
SetY = 9,57
|
||||
SetZ = 9,33
|
||||
SetFrame = 10,8
|
||||
SetX = 10,294
|
||||
SetY = 10,234
|
||||
SetFrame = 11,9
|
||||
SetX = 11,111
|
||||
SetY = 11,246
|
||||
SetX = 12,167
|
||||
SetY = 12,237
|
||||
<Particle 16>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 11,8
|
||||
SetX = 11,176
|
||||
SetY = 11,119
|
||||
SetZ = 11,28
|
||||
SetVisible = 12,false
|
||||
<Particle 17>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 11,7
|
||||
SetX = 11,281
|
||||
SetY = 11,268
|
||||
SetZ = 11,32
|
||||
SetFrame = 12,9
|
||||
SetX = 12,41
|
||||
SetY = 12,229
|
||||
<Particle 18>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 11,9
|
||||
SetX = 11,299
|
||||
SetY = 11,47
|
||||
SetZ = 11,34
|
||||
SetVisible = 12,false
|
||||
<Particle 19>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 12,8
|
||||
SetX = 12,474
|
||||
SetY = 12,59
|
||||
SetZ = 12,29
|
||||
<Particle 20>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 12,9
|
||||
SetX = 12,449
|
||||
SetY = 12,237
|
||||
SetZ = 12,35
|
||||
@@ -1,196 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,HealthDown]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 1>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 0,5
|
||||
SetX = 0,-50
|
||||
SetY = 0,-53
|
||||
SetZ = 0,27
|
||||
SetOpacity = 0,126
|
||||
SetToneRed = 0,255
|
||||
SetToneGreen = 0,64
|
||||
SetToneBlue = 0,-128
|
||||
SetY = 1,-33
|
||||
SetY = 2,-13
|
||||
SetY = 3,7
|
||||
SetY = 4,27
|
||||
SetY = 5,47
|
||||
SetOpacity = 5,79
|
||||
SetY = 6,67
|
||||
SetOpacity = 6,32
|
||||
SetX = 7,14
|
||||
SetY = 7,73
|
||||
SetX = 8,-1
|
||||
SetY = 8,63
|
||||
SetX = 9,25
|
||||
SetY = 9,92
|
||||
SetVisible = 10,false
|
||||
<Particle 2>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 0,5
|
||||
SetX = 0,35
|
||||
SetY = 0,-52
|
||||
SetZ = 0,30
|
||||
SetOpacity = 0,126
|
||||
SetToneRed = 0,255
|
||||
SetToneGreen = 0,64
|
||||
SetToneBlue = 0,-128
|
||||
SetX = 1,14
|
||||
SetY = 1,-47
|
||||
SetY = 2,-27
|
||||
SetY = 3,-7
|
||||
SetY = 4,13
|
||||
SetY = 5,33
|
||||
SetY = 6,53
|
||||
SetOpacity = 6,79
|
||||
SetX = 7,-41
|
||||
SetY = 7,62
|
||||
SetVisible = 8,false
|
||||
<Particle 3>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 0,5
|
||||
SetX = 0,22
|
||||
SetY = 0,-29
|
||||
SetZ = 0,33
|
||||
SetOpacity = 0,126
|
||||
SetToneRed = 0,255
|
||||
SetToneGreen = 0,64
|
||||
SetToneBlue = 0,-128
|
||||
SetX = 1,-16
|
||||
SetVisible = 2,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 1,5
|
||||
SetX = 1,35
|
||||
SetY = 1,-32
|
||||
SetZ = 1,28
|
||||
SetOpacity = 1,126
|
||||
SetToneRed = 1,255
|
||||
SetToneGreen = 1,64
|
||||
SetToneBlue = 1,-128
|
||||
SetY = 2,-12
|
||||
SetY = 3,8
|
||||
SetY = 4,28
|
||||
SetY = 5,48
|
||||
SetOpacity = 5,79
|
||||
SetY = 6,68
|
||||
SetOpacity = 6,32
|
||||
SetX = 7,-16
|
||||
SetY = 7,91
|
||||
SetX = 8,-41
|
||||
SetY = 8,82
|
||||
SetVisible = 9,false
|
||||
<Particle 5>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 1,5
|
||||
SetX = 1,22
|
||||
SetY = 1,-9
|
||||
SetZ = 1,29
|
||||
SetOpacity = 1,126
|
||||
SetToneRed = 1,255
|
||||
SetToneGreen = 1,64
|
||||
SetToneBlue = 1,-128
|
||||
SetY = 2,11
|
||||
SetY = 3,31
|
||||
SetY = 4,51
|
||||
SetY = 5,71
|
||||
SetOpacity = 5,79
|
||||
SetY = 6,91
|
||||
SetOpacity = 6,32
|
||||
SetX = 7,-1
|
||||
SetY = 7,43
|
||||
SetOpacity = 7,79
|
||||
SetX = 8,25
|
||||
SetY = 8,72
|
||||
SetVisible = 9,false
|
||||
<Particle 6>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 2,5
|
||||
SetX = 2,-16
|
||||
SetY = 2,-9
|
||||
SetZ = 2,31
|
||||
SetOpacity = 2,126
|
||||
SetToneRed = 2,255
|
||||
SetToneGreen = 2,64
|
||||
SetToneBlue = 2,-128
|
||||
SetY = 3,11
|
||||
SetY = 4,31
|
||||
SetY = 5,51
|
||||
SetY = 6,71
|
||||
SetOpacity = 6,79
|
||||
SetX = 7,25
|
||||
SetY = 7,52
|
||||
SetOpacity = 7,126
|
||||
SetVisible = 8,false
|
||||
<Particle 7>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 2,5
|
||||
SetX = 2,-1
|
||||
SetY = 2,-57
|
||||
SetZ = 2,32
|
||||
SetOpacity = 2,126
|
||||
SetToneRed = 2,255
|
||||
SetToneGreen = 2,64
|
||||
SetToneBlue = 2,-128
|
||||
SetY = 3,-37
|
||||
SetY = 4,-17
|
||||
SetY = 5,3
|
||||
SetY = 6,23
|
||||
SetVisible = 7,false
|
||||
<Particle 8>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 2,5
|
||||
SetX = 2,-41
|
||||
SetY = 2,-38
|
||||
SetZ = 2,35
|
||||
SetOpacity = 2,126
|
||||
SetToneRed = 2,255
|
||||
SetToneGreen = 2,64
|
||||
SetToneBlue = 2,-128
|
||||
SetVisible = 3,false
|
||||
<Particle 9>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 3,5
|
||||
SetX = 3,-41
|
||||
SetY = 3,-18
|
||||
SetZ = 3,33
|
||||
SetOpacity = 3,126
|
||||
SetToneRed = 3,255
|
||||
SetToneGreen = 3,64
|
||||
SetToneBlue = 3,-128
|
||||
SetY = 4,2
|
||||
SetY = 5,22
|
||||
SetY = 6,42
|
||||
SetVisible = 7,false
|
||||
<Particle 10>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 3,5
|
||||
SetX = 3,25
|
||||
SetY = 3,-28
|
||||
SetZ = 3,34
|
||||
SetOpacity = 3,126
|
||||
SetToneRed = 3,255
|
||||
SetToneGreen = 3,64
|
||||
SetToneBlue = 3,-128
|
||||
SetY = 4,-8
|
||||
SetY = 5,12
|
||||
SetY = 6,32
|
||||
SetVisible = 7,false
|
||||
<SE>
|
||||
Play = 0,decrease,100,140
|
||||
@@ -1,55 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,HealthUp]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 1,10
|
||||
SetX = 1,48
|
||||
SetY = 1,-42
|
||||
SetZ = 1,28
|
||||
SetFrame = 3,8
|
||||
SetFrame = 5,7
|
||||
SetFrame = 7,6
|
||||
SetFrame = 9,5
|
||||
SetFrame = 10,6
|
||||
SetX = 10,-40
|
||||
SetY = 10,-26
|
||||
SetVisible = 11,false
|
||||
<Particle 3>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 4,10
|
||||
SetX = 4,-40
|
||||
SetY = 4,-26
|
||||
SetZ = 4,29
|
||||
SetFrame = 6,8
|
||||
SetFrame = 8,7
|
||||
SetVisible = 10,false
|
||||
<Particle 1>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 0,10
|
||||
SetX = 0,8
|
||||
SetY = 0,-2
|
||||
SetZ = 0,27
|
||||
SetFrame = 2,8
|
||||
SetFrame = 4,7
|
||||
SetFrame = 6,6
|
||||
SetFrame = 8,5
|
||||
SetX = 10,48
|
||||
SetY = 10,-42
|
||||
SetFrame = 11,6
|
||||
SetX = 11,-40
|
||||
SetY = 11,-26
|
||||
SetFrame = 12,5
|
||||
SetVisible = 14,false
|
||||
<SE>
|
||||
Play = 0,Recovery,75
|
||||
Play = 2,Recovery,80
|
||||
Play = 5,Recovery,80
|
||||
@@ -1,179 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,LeechSeed]
|
||||
Name = Example anim
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Target>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 0,11
|
||||
SetX = 0,200
|
||||
SetY = 0,-196
|
||||
SetZ = 0,27
|
||||
SetY = 1,-178
|
||||
SetFrame = 2,12
|
||||
SetX = 2,114
|
||||
SetY = 2,-196
|
||||
SetX = 3,59
|
||||
SetY = 3,-157
|
||||
SetX = 4,14
|
||||
SetY = 4,-89
|
||||
SetX = 5,4
|
||||
SetY = 5,0
|
||||
SetVisible = 6,false
|
||||
<Particle 3>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 1,11
|
||||
SetX = 1,164
|
||||
SetY = 1,-196
|
||||
SetZ = 1,28
|
||||
SetFrame = 2,12
|
||||
SetX = 2,169
|
||||
SetY = 2,-109
|
||||
SetX = 3,129
|
||||
SetY = 3,-50
|
||||
SetX = 4,84
|
||||
SetY = 4,-10
|
||||
SetX = 5,39
|
||||
SetY = 5,9
|
||||
SetVisible = 6,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 2,11
|
||||
SetX = 2,200
|
||||
SetY = 2,-196
|
||||
SetZ = 2,29
|
||||
SetFrame = 3,12
|
||||
SetX = 3,144
|
||||
SetY = 3,-157
|
||||
SetX = 4,100
|
||||
SetY = 4,-118
|
||||
SetX = 5,50
|
||||
SetY = 5,-70
|
||||
SetX = 6,-5
|
||||
SetY = 6,0
|
||||
SetX = 7,4
|
||||
SetVisible = 8,false
|
||||
<Particle 5>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 3,11
|
||||
SetX = 3,189
|
||||
SetY = 3,-196
|
||||
SetZ = 3,30
|
||||
SetFrame = 4,12
|
||||
SetX = 4,169
|
||||
SetY = 4,-118
|
||||
SetX = 5,129
|
||||
SetY = 5,-50
|
||||
SetX = 6,89
|
||||
SetY = 6,-20
|
||||
SetX = 7,44
|
||||
SetY = 7,0
|
||||
SetX = 8,4
|
||||
SetVisible = 9,false
|
||||
<Particle 6>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 4,12
|
||||
SetX = 4,144
|
||||
SetY = 4,-187
|
||||
SetZ = 4,31
|
||||
SetX = 5,94
|
||||
SetY = 5,-168
|
||||
SetX = 6,39
|
||||
SetY = 6,-118
|
||||
SetVisible = 7,false
|
||||
<Particle 7>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 7,12
|
||||
SetX = 7,0
|
||||
SetY = 7,-59
|
||||
SetZ = 7,27
|
||||
SetVisible = 8,false
|
||||
<Particle 8>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 9,10
|
||||
SetX = 9,4
|
||||
SetY = 9,0
|
||||
SetZ = 9,27
|
||||
SetFrame = 10,8
|
||||
SetFrame = 11,7
|
||||
SetFrame = 12,6
|
||||
SetFrame = 13,5
|
||||
SetFrame = 14,10
|
||||
SetX = 16,-15
|
||||
SetY = 16,-50
|
||||
SetX = 17,14
|
||||
SetY = 17,-79
|
||||
SetX = 18,-25
|
||||
SetY = 18,9
|
||||
SetX = 19,25
|
||||
SetY = 19,-20
|
||||
<Particle 9>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 10,10
|
||||
SetX = 10,-15
|
||||
SetY = 10,-50
|
||||
SetZ = 10,28
|
||||
SetFrame = 11,8
|
||||
SetFrame = 12,7
|
||||
SetFrame = 13,6
|
||||
SetFrame = 14,5
|
||||
SetFrame = 15,10
|
||||
SetX = 16,14
|
||||
SetY = 16,-79
|
||||
SetX = 17,-25
|
||||
SetY = 17,9
|
||||
SetX = 18,25
|
||||
SetY = 18,-20
|
||||
SetVisible = 19,false
|
||||
<Particle 10>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 11,10
|
||||
SetX = 11,14
|
||||
SetY = 11,-79
|
||||
SetZ = 11,29
|
||||
SetFrame = 12,8
|
||||
SetFrame = 13,7
|
||||
SetFrame = 14,6
|
||||
SetFrame = 15,5
|
||||
SetX = 16,-25
|
||||
SetY = 16,9
|
||||
SetX = 17,25
|
||||
SetY = 17,-20
|
||||
SetVisible = 18,false
|
||||
<Particle 11>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 12,10
|
||||
SetX = 12,-25
|
||||
SetY = 12,9
|
||||
SetZ = 12,30
|
||||
SetFrame = 13,8
|
||||
SetFrame = 14,7
|
||||
SetFrame = 15,6
|
||||
SetX = 16,25
|
||||
SetY = 16,-20
|
||||
SetVisible = 17,false
|
||||
<Particle 12>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 13,10
|
||||
SetX = 13,25
|
||||
SetY = 13,-20
|
||||
SetZ = 13,31
|
||||
SetFrame = 14,8
|
||||
SetFrame = 15,7
|
||||
SetVisible = 16,false
|
||||
@@ -1,66 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Paralysis]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/Struggle
|
||||
Focus = User
|
||||
SetFrame = 1,1
|
||||
SetX = 1,40
|
||||
SetY = 1,6
|
||||
SetZ = 1,28
|
||||
SetX = 2,72
|
||||
SetY = 2,-10
|
||||
SetX = 3,56
|
||||
SetFrame = 4,0
|
||||
SetX = 4,-48
|
||||
SetFrame = 5,1
|
||||
SetX = 5,24
|
||||
SetY = 5,14
|
||||
SetFrame = 6,0
|
||||
SetX = 6,-104
|
||||
SetY = 6,6
|
||||
SetFrame = 7,1
|
||||
SetX = 7,40
|
||||
SetX = 8,72
|
||||
SetY = 8,-10
|
||||
SetX = 9,56
|
||||
SetFrame = 10,0
|
||||
SetX = 10,-48
|
||||
SetFrame = 11,1
|
||||
SetX = 11,24
|
||||
SetY = 11,14
|
||||
<Particle 1>
|
||||
Graphic = Examples/Struggle
|
||||
Focus = User
|
||||
SetX = 1,-48
|
||||
SetY = 1,-2
|
||||
SetZ = 1,27
|
||||
SetX = 2,-80
|
||||
SetY = 2,-18
|
||||
SetX = 3,-56
|
||||
SetY = 3,-2
|
||||
SetFrame = 4,1
|
||||
SetX = 4,64
|
||||
SetFrame = 5,0
|
||||
SetX = 5,-72
|
||||
SetFrame = 6,1
|
||||
SetX = 6,72
|
||||
SetY = 6,-10
|
||||
SetFrame = 7,0
|
||||
SetX = 7,-48
|
||||
SetY = 7,-2
|
||||
SetX = 8,-80
|
||||
SetY = 8,-18
|
||||
SetX = 9,-56
|
||||
SetY = 9,-2
|
||||
SetFrame = 10,1
|
||||
SetX = 10,64
|
||||
SetFrame = 11,0
|
||||
SetX = 11,-72
|
||||
<SE>
|
||||
Play = 0,Paralyze3,80
|
||||
@@ -1,22 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,ParentalBond]
|
||||
Name = Example anim
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Target>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/Tackle_B
|
||||
Focus = Target
|
||||
SetX = 2,0
|
||||
SetY = 2,3
|
||||
SetZ = 2,27
|
||||
SetOpacity = 2,150
|
||||
SetOpacity = 3,255
|
||||
SetOpacity = 8,150
|
||||
SetOpacity = 9,100
|
||||
<SE>
|
||||
Play = 0,Blow1,80
|
||||
@@ -1,31 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Poison]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 1>
|
||||
Graphic = Examples/State1
|
||||
Focus = User
|
||||
SetX = 1,0
|
||||
SetY = 1,-10
|
||||
SetZ = 1,27
|
||||
SetZoomX = 1,200
|
||||
SetZoomY = 1,200
|
||||
SetFrame = 2,1
|
||||
SetFrame = 3,2
|
||||
SetFrame = 4,3
|
||||
SetFrame = 5,4
|
||||
SetFrame = 6,5
|
||||
SetFrame = 7,6
|
||||
SetFrame = 8,7
|
||||
SetFrame = 9,8
|
||||
SetFrame = 10,9
|
||||
SetFrame = 11,10
|
||||
SetFrame = 12,11
|
||||
SetFrame = 13,12
|
||||
SetFrame = 14,13
|
||||
<SE>
|
||||
Play = 0,Poison,80
|
||||
@@ -1,295 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Rain]
|
||||
Name = Example anim
|
||||
NoUser = true
|
||||
NoTarget = true
|
||||
<Particle 0>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,2
|
||||
SetX = 0,197
|
||||
SetY = 0,25
|
||||
SetZ = 0,27
|
||||
SetX = 1,72
|
||||
SetY = 1,49
|
||||
SetX = 2,60
|
||||
SetY = 2,42
|
||||
SetX = 3,43
|
||||
SetY = 3,62
|
||||
SetY = 4,66
|
||||
SetX = 5,480
|
||||
SetY = 5,78
|
||||
SetX = 6,201
|
||||
SetY = 6,65
|
||||
SetX = 7,80
|
||||
SetY = 7,62
|
||||
SetX = 8,265
|
||||
SetY = 8,218
|
||||
SetX = 9,99
|
||||
SetY = 9,55
|
||||
<Particle 1>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,2
|
||||
SetX = 0,275
|
||||
SetY = 0,47
|
||||
SetZ = 0,28
|
||||
SetX = 1,229
|
||||
SetY = 1,216
|
||||
SetX = 2,193
|
||||
SetY = 2,131
|
||||
SetX = 3,205
|
||||
SetY = 3,111
|
||||
SetX = 4,122
|
||||
SetY = 4,73
|
||||
SetX = 5,361
|
||||
SetY = 5,34
|
||||
SetX = 6,278
|
||||
SetY = 6,211
|
||||
SetX = 7,239
|
||||
SetY = 7,122
|
||||
SetX = 8,398
|
||||
SetY = 8,251
|
||||
SetX = 9,253
|
||||
SetY = 9,148
|
||||
<Particle 2>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,2
|
||||
SetX = 0,355
|
||||
SetY = 0,51
|
||||
SetZ = 0,29
|
||||
SetX = 1,109
|
||||
SetY = 1,217
|
||||
SetX = 2,265
|
||||
SetY = 2,233
|
||||
SetX = 3,289
|
||||
SetY = 3,227
|
||||
SetX = 4,148
|
||||
SetY = 4,143
|
||||
SetX = 5,404
|
||||
SetY = 5,152
|
||||
SetX = 6,397
|
||||
SetY = 6,257
|
||||
SetX = 7,172
|
||||
SetY = 7,23
|
||||
SetX = 8,270
|
||||
SetY = 8,110
|
||||
SetX = 9,254
|
||||
SetY = 9,274
|
||||
<Particle 3>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,2
|
||||
SetX = 0,450
|
||||
SetY = 0,50
|
||||
SetZ = 0,30
|
||||
SetX = 1,223
|
||||
SetY = 1,110
|
||||
SetX = 2,228
|
||||
SetY = 2,82
|
||||
SetX = 3,279
|
||||
SetY = 3,63
|
||||
SetX = 4,203
|
||||
SetY = 4,141
|
||||
SetX = 5,274
|
||||
SetY = 5,69
|
||||
SetX = 6,478
|
||||
SetY = 6,170
|
||||
SetX = 7,25
|
||||
SetY = 7,169
|
||||
SetX = 8,491
|
||||
SetY = 8,59
|
||||
SetX = 9,418
|
||||
SetY = 9,243
|
||||
<Particle 4>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,2
|
||||
SetX = 0,83
|
||||
SetY = 0,81
|
||||
SetZ = 0,31
|
||||
SetX = 1,399
|
||||
SetY = 1,120
|
||||
SetX = 2,350
|
||||
SetY = 2,43
|
||||
SetX = 3,31
|
||||
SetY = 3,176
|
||||
SetX = 4,101
|
||||
SetY = 4,242
|
||||
SetX = 5,54
|
||||
SetY = 5,71
|
||||
SetX = 6,480
|
||||
SetY = 6,53
|
||||
SetX = 7,263
|
||||
SetY = 7,251
|
||||
SetX = 8,492
|
||||
SetY = 8,204
|
||||
SetX = 9,181
|
||||
SetY = 9,238
|
||||
<Particle 5>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,2
|
||||
SetX = 0,231
|
||||
SetY = 0,170
|
||||
SetZ = 0,32
|
||||
SetX = 1,480
|
||||
SetY = 1,83
|
||||
SetX = 2,399
|
||||
SetY = 2,154
|
||||
SetX = 3,475
|
||||
SetY = 3,231
|
||||
SetX = 4,185
|
||||
SetY = 4,249
|
||||
SetX = 5,155
|
||||
SetY = 5,126
|
||||
SetX = 6,28
|
||||
SetY = 6,111
|
||||
SetX = 7,146
|
||||
SetY = 7,249
|
||||
SetX = 8,91
|
||||
SetY = 8,63
|
||||
SetX = 9,108
|
||||
SetY = 9,245
|
||||
<Particle 6>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,2
|
||||
SetX = 0,352
|
||||
SetY = 0,212
|
||||
SetZ = 0,33
|
||||
SetX = 1,362
|
||||
SetY = 1,63
|
||||
SetX = 2,488
|
||||
SetY = 2,60
|
||||
SetX = 3,482
|
||||
SetY = 3,85
|
||||
SetX = 4,290
|
||||
SetY = 4,114
|
||||
SetX = 5,210
|
||||
SetY = 5,242
|
||||
SetX = 6,119
|
||||
SetY = 6,59
|
||||
SetX = 7,29
|
||||
SetY = 7,266
|
||||
SetX = 8,35
|
||||
SetY = 8,173
|
||||
SetX = 9,25
|
||||
SetY = 9,205
|
||||
<Particle 7>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,2
|
||||
SetX = 0,467
|
||||
SetY = 0,254
|
||||
SetZ = 0,34
|
||||
SetX = 1,376
|
||||
SetY = 1,192
|
||||
SetX = 2,434
|
||||
SetY = 2,253
|
||||
SetX = 3,381
|
||||
SetY = 3,12
|
||||
SetX = 4,440
|
||||
SetY = 4,119
|
||||
SetX = 5,55
|
||||
SetY = 5,232
|
||||
SetX = 6,77
|
||||
SetY = 6,215
|
||||
SetX = 7,367
|
||||
SetY = 7,134
|
||||
SetX = 8,187
|
||||
SetY = 8,144
|
||||
SetX = 9,148
|
||||
SetY = 9,25
|
||||
<Particle 8>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 1,2
|
||||
SetX = 1,482
|
||||
SetY = 1,244
|
||||
SetZ = 1,35
|
||||
SetX = 2,121
|
||||
SetY = 2,249
|
||||
SetX = 3,382
|
||||
SetY = 3,209
|
||||
SetX = 4,378
|
||||
SetY = 4,150
|
||||
SetX = 5,422
|
||||
SetY = 5,252
|
||||
SetVisible = 6,false
|
||||
<Particle 9>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 2,2
|
||||
SetX = 2,27
|
||||
SetY = 2,241
|
||||
SetZ = 2,36
|
||||
SetX = 3,88
|
||||
SetY = 3,177
|
||||
SetX = 4,337
|
||||
SetY = 4,243
|
||||
SetX = 5,319
|
||||
SetY = 5,241
|
||||
SetVisible = 6,false
|
||||
<Particle 10>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 4,2
|
||||
SetX = 4,409
|
||||
SetY = 4,203
|
||||
SetZ = 4,37
|
||||
SetVisible = 5,false
|
||||
<Particle 11>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 7,2
|
||||
SetX = 7,471
|
||||
SetY = 7,126
|
||||
SetZ = 7,35
|
||||
SetVisible = 8,false
|
||||
<Particle 12>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 7,2
|
||||
SetX = 7,363
|
||||
SetY = 7,237
|
||||
SetZ = 7,36
|
||||
SetVisible = 8,false
|
||||
<Particle 13>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 7,2
|
||||
SetX = 7,443
|
||||
SetY = 7,194
|
||||
SetZ = 7,37
|
||||
SetVisible = 8,false
|
||||
<Particle 14>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 9,2
|
||||
SetX = 9,247
|
||||
SetY = 9,72
|
||||
SetZ = 9,35
|
||||
<Particle 15>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 9,2
|
||||
SetX = 9,365
|
||||
SetY = 9,42
|
||||
SetZ = 9,36
|
||||
<Particle 16>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 9,2
|
||||
SetX = 9,479
|
||||
SetY = 9,180
|
||||
SetZ = 9,37
|
||||
<Particle 17>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 9,2
|
||||
SetX = 9,474
|
||||
SetY = 9,41
|
||||
SetZ = 9,38
|
||||
@@ -1,409 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Sandstorm]
|
||||
Name = Example anim
|
||||
NoUser = true
|
||||
NoTarget = true
|
||||
<Particle 0>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,-350
|
||||
SetY = 0,-30
|
||||
SetZ = 0,27
|
||||
SetX = 1,153
|
||||
SetY = 1,62
|
||||
SetX = 2,-350
|
||||
SetY = 2,-30
|
||||
SetX = 3,153
|
||||
SetY = 3,62
|
||||
SetX = 4,139
|
||||
SetY = 4,48
|
||||
SetX = 5,-350
|
||||
SetY = 5,-30
|
||||
SetX = 6,153
|
||||
SetY = 6,62
|
||||
SetX = 7,-350
|
||||
SetY = 7,-30
|
||||
SetX = 8,153
|
||||
SetY = 8,62
|
||||
SetX = 9,32
|
||||
SetY = 9,252
|
||||
<Particle 1>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,31
|
||||
SetY = 0,69
|
||||
SetZ = 0,28
|
||||
SetX = 1,56
|
||||
SetY = 1,85
|
||||
SetX = 2,31
|
||||
SetY = 2,69
|
||||
SetX = 3,56
|
||||
SetY = 3,85
|
||||
SetX = 4,42
|
||||
SetY = 4,82
|
||||
SetX = 5,31
|
||||
SetY = 5,69
|
||||
SetX = 6,56
|
||||
SetY = 6,85
|
||||
SetX = 7,31
|
||||
SetY = 7,69
|
||||
SetX = 8,56
|
||||
SetY = 8,85
|
||||
SetX = 9,119
|
||||
SetY = 9,175
|
||||
<Particle 2>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,156
|
||||
SetY = 0,106
|
||||
SetZ = 0,29
|
||||
SetX = 1,74
|
||||
SetY = 1,223
|
||||
SetX = 2,156
|
||||
SetY = 2,106
|
||||
SetX = 3,74
|
||||
SetY = 3,223
|
||||
SetX = 4,157
|
||||
SetY = 4,167
|
||||
SetX = 5,156
|
||||
SetY = 5,106
|
||||
SetX = 6,74
|
||||
SetY = 6,223
|
||||
SetX = 7,156
|
||||
SetY = 7,106
|
||||
SetX = 8,74
|
||||
SetY = 8,223
|
||||
SetX = 9,143
|
||||
SetY = 9,267
|
||||
<Particle 3>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,165
|
||||
SetY = 0,220
|
||||
SetZ = 0,30
|
||||
SetX = 1,220
|
||||
SetY = 1,207
|
||||
SetX = 2,165
|
||||
SetY = 2,220
|
||||
SetX = 3,220
|
||||
SetY = 3,207
|
||||
SetX = 4,58
|
||||
SetY = 4,225
|
||||
SetX = 5,165
|
||||
SetY = 5,220
|
||||
SetX = 6,220
|
||||
SetY = 6,207
|
||||
SetX = 7,165
|
||||
SetY = 7,220
|
||||
SetX = 8,220
|
||||
SetY = 8,207
|
||||
SetX = 9,222
|
||||
SetY = 9,197
|
||||
<Particle 4>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,267
|
||||
SetY = 0,178
|
||||
SetZ = 0,31
|
||||
SetX = 1,352
|
||||
SetY = 1,253
|
||||
SetX = 2,267
|
||||
SetY = 2,178
|
||||
SetX = 3,352
|
||||
SetY = 3,253
|
||||
SetX = 4,178
|
||||
SetY = 4,273
|
||||
SetX = 5,267
|
||||
SetY = 5,178
|
||||
SetX = 6,352
|
||||
SetY = 6,253
|
||||
SetX = 7,267
|
||||
SetY = 7,178
|
||||
SetX = 8,352
|
||||
SetY = 8,253
|
||||
SetX = 9,162
|
||||
SetY = 9,82
|
||||
<Particle 5>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,309
|
||||
SetY = 0,248
|
||||
SetZ = 0,32
|
||||
SetX = 1,464
|
||||
SetY = 1,227
|
||||
SetX = 2,309
|
||||
SetY = 2,248
|
||||
SetX = 3,464
|
||||
SetY = 3,227
|
||||
SetX = 4,284
|
||||
SetY = 4,217
|
||||
SetX = 5,309
|
||||
SetY = 5,248
|
||||
SetX = 6,464
|
||||
SetY = 6,227
|
||||
SetX = 7,309
|
||||
SetY = 7,248
|
||||
SetX = 8,464
|
||||
SetY = 8,227
|
||||
SetX = 9,49
|
||||
SetY = 9,61
|
||||
<Particle 6>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,388
|
||||
SetY = 0,142
|
||||
SetZ = 0,33
|
||||
SetX = 1,484
|
||||
SetY = 1,76
|
||||
SetX = 2,388
|
||||
SetY = 2,142
|
||||
SetX = 3,484
|
||||
SetY = 3,76
|
||||
SetX = 4,377
|
||||
SetY = 4,143
|
||||
SetX = 5,388
|
||||
SetY = 5,142
|
||||
SetX = 6,484
|
||||
SetY = 6,76
|
||||
SetX = 7,388
|
||||
SetY = 7,142
|
||||
SetX = 8,484
|
||||
SetY = 8,76
|
||||
SetX = 9,21
|
||||
SetY = 9,158
|
||||
<Particle 7>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,448
|
||||
SetY = 0,243
|
||||
SetZ = 0,34
|
||||
SetX = 1,378
|
||||
SetY = 1,130
|
||||
SetX = 2,448
|
||||
SetY = 2,243
|
||||
SetX = 3,378
|
||||
SetY = 3,130
|
||||
SetX = 4,403
|
||||
SetY = 4,259
|
||||
SetX = 5,448
|
||||
SetY = 5,243
|
||||
SetX = 6,378
|
||||
SetY = 6,130
|
||||
SetX = 7,448
|
||||
SetY = 7,243
|
||||
SetX = 8,378
|
||||
SetY = 8,130
|
||||
SetX = 9,350
|
||||
SetY = 9,240
|
||||
<Particle 8>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,35
|
||||
SetY = 0,216
|
||||
SetZ = 0,35
|
||||
SetX = 1,285
|
||||
SetY = 1,142
|
||||
SetX = 2,35
|
||||
SetY = 2,216
|
||||
SetX = 3,285
|
||||
SetY = 3,142
|
||||
SetX = 4,500
|
||||
SetY = 4,230
|
||||
SetX = 5,35
|
||||
SetY = 5,216
|
||||
SetX = 6,285
|
||||
SetY = 6,142
|
||||
SetX = 7,35
|
||||
SetY = 7,216
|
||||
SetX = 8,285
|
||||
SetY = 8,142
|
||||
SetX = 9,481
|
||||
SetY = 9,206
|
||||
<Particle 9>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,276
|
||||
SetY = 0,34
|
||||
SetZ = 0,36
|
||||
SetX = 1,316
|
||||
SetY = 1,22
|
||||
SetX = 2,276
|
||||
SetY = 2,34
|
||||
SetX = 3,316
|
||||
SetY = 3,22
|
||||
SetX = 4,481
|
||||
SetY = 4,77
|
||||
SetX = 5,276
|
||||
SetY = 5,34
|
||||
SetX = 6,316
|
||||
SetY = 6,22
|
||||
SetX = 7,276
|
||||
SetY = 7,34
|
||||
SetX = 8,316
|
||||
SetY = 8,22
|
||||
SetX = 9,456
|
||||
SetY = 9,64
|
||||
<Particle 10>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,487
|
||||
SetY = 0,32
|
||||
SetZ = 0,37
|
||||
SetVisible = 1,false
|
||||
<Particle 11>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,492
|
||||
SetY = 0,135
|
||||
SetZ = 0,38
|
||||
SetVisible = 1,false
|
||||
<Particle 12>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,387
|
||||
SetY = 0,18
|
||||
SetZ = 0,39
|
||||
SetVisible = 1,false
|
||||
<Particle 13>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 0,3
|
||||
SetX = 0,148
|
||||
SetY = 0,9
|
||||
SetZ = 0,40
|
||||
SetVisible = 1,false
|
||||
<Particle 14>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 2,3
|
||||
SetX = 2,487
|
||||
SetY = 2,32
|
||||
SetZ = 2,37
|
||||
SetVisible = 3,false
|
||||
<Particle 15>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 2,3
|
||||
SetX = 2,492
|
||||
SetY = 2,135
|
||||
SetZ = 2,38
|
||||
SetVisible = 3,false
|
||||
<Particle 16>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 2,3
|
||||
SetX = 2,387
|
||||
SetY = 2,18
|
||||
SetZ = 2,39
|
||||
SetVisible = 3,false
|
||||
<Particle 17>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 2,3
|
||||
SetX = 2,148
|
||||
SetY = 2,9
|
||||
SetZ = 2,40
|
||||
SetVisible = 3,false
|
||||
<Particle 18>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 4,3
|
||||
SetX = 4,358
|
||||
SetY = 4,16
|
||||
SetZ = 4,37
|
||||
SetX = 5,487
|
||||
SetY = 5,32
|
||||
SetVisible = 6,false
|
||||
<Particle 19>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 4,3
|
||||
SetX = 4,267
|
||||
SetY = 4,63
|
||||
SetZ = 4,38
|
||||
SetX = 5,492
|
||||
SetY = 5,135
|
||||
SetVisible = 6,false
|
||||
<Particle 20>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 5,3
|
||||
SetX = 5,387
|
||||
SetY = 5,18
|
||||
SetZ = 5,39
|
||||
SetVisible = 6,false
|
||||
<Particle 21>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 5,3
|
||||
SetX = 5,148
|
||||
SetY = 5,9
|
||||
SetZ = 5,40
|
||||
SetVisible = 6,false
|
||||
<Particle 22>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 7,3
|
||||
SetX = 7,487
|
||||
SetY = 7,32
|
||||
SetZ = 7,37
|
||||
SetVisible = 8,false
|
||||
<Particle 23>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 7,3
|
||||
SetX = 7,492
|
||||
SetY = 7,135
|
||||
SetZ = 7,38
|
||||
SetVisible = 8,false
|
||||
<Particle 24>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 7,3
|
||||
SetX = 7,387
|
||||
SetY = 7,18
|
||||
SetZ = 7,39
|
||||
SetVisible = 8,false
|
||||
<Particle 25>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 7,3
|
||||
SetX = 7,148
|
||||
SetY = 7,9
|
||||
SetZ = 7,40
|
||||
SetVisible = 8,false
|
||||
<Particle 26>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 9,3
|
||||
SetX = 9,311
|
||||
SetY = 9,55
|
||||
SetZ = 9,37
|
||||
<Particle 27>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 9,3
|
||||
SetX = 9,328
|
||||
SetY = 9,146
|
||||
SetZ = 9,38
|
||||
<Particle 28>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetFrame = 9,3
|
||||
SetX = 9,251
|
||||
SetY = 9,305
|
||||
SetZ = 9,39
|
||||
@@ -1,83 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Shadow]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 2,5
|
||||
SetX = 2,56
|
||||
SetY = 2,30
|
||||
SetZ = 2,28
|
||||
SetFrame = 3,6
|
||||
SetX = 4,-88
|
||||
SetY = 4,-10
|
||||
SetFrame = 5,7
|
||||
SetX = 6,-24
|
||||
SetY = 6,14
|
||||
SetX = 7,32
|
||||
SetY = 7,-42
|
||||
SetX = 8,-16
|
||||
SetY = 8,-74
|
||||
SetX = 9,32
|
||||
SetY = 9,22
|
||||
SetVisible = 10,false
|
||||
<Particle 3>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 3,5
|
||||
SetX = 3,-88
|
||||
SetY = 3,-10
|
||||
SetZ = 3,29
|
||||
SetX = 4,-24
|
||||
SetY = 4,14
|
||||
SetFrame = 5,6
|
||||
SetX = 6,32
|
||||
SetY = 6,-42
|
||||
SetX = 7,-16
|
||||
SetY = 7,-74
|
||||
SetX = 8,32
|
||||
SetY = 8,22
|
||||
SetVisible = 9,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 5,5
|
||||
SetX = 5,32
|
||||
SetY = 5,-42
|
||||
SetZ = 5,30
|
||||
SetX = 6,-16
|
||||
SetY = 6,-74
|
||||
SetX = 7,32
|
||||
SetY = 7,22
|
||||
SetVisible = 8,false
|
||||
<Particle 1>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 0,5
|
||||
SetX = 0,-24
|
||||
SetY = 0,14
|
||||
SetZ = 0,27
|
||||
SetFrame = 1,6
|
||||
SetFrame = 2,7
|
||||
SetFrame = 3,8
|
||||
SetFrame = 4,7
|
||||
SetX = 4,56
|
||||
SetY = 4,30
|
||||
SetFrame = 5,8
|
||||
SetX = 6,-88
|
||||
SetY = 6,-10
|
||||
SetX = 7,-40
|
||||
SetY = 7,46
|
||||
SetX = 8,32
|
||||
SetY = 8,-42
|
||||
SetX = 9,-16
|
||||
SetY = 9,-74
|
||||
SetX = 10,32
|
||||
SetY = 10,22
|
||||
<SE>
|
||||
Play = 0,Saint6,75
|
||||
@@ -1,16 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,ShadowSky]
|
||||
Name = Example anim
|
||||
NoUser = true
|
||||
NoTarget = true
|
||||
<Particle 0>
|
||||
Graphic = Examples/shadow sky
|
||||
Focus = Foreground
|
||||
SetOpacity = 0,0
|
||||
MoveOpacity = 0,5,255
|
||||
SetOpacity = 5,255
|
||||
SetOpacity = 15,255
|
||||
MoveOpacity = 15,5,0
|
||||
SetOpacity = 20,0
|
||||
<SE>
|
||||
@@ -1,83 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Shiny]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 2,5
|
||||
SetX = 2,56
|
||||
SetY = 2,30
|
||||
SetZ = 2,28
|
||||
SetFrame = 3,6
|
||||
SetX = 4,-57
|
||||
SetY = 4,-18
|
||||
SetFrame = 5,7
|
||||
SetX = 6,-18
|
||||
SetY = 6,33
|
||||
SetX = 7,32
|
||||
SetY = 7,-42
|
||||
SetX = 8,-16
|
||||
SetY = 8,-29
|
||||
SetX = 9,32
|
||||
SetY = 9,22
|
||||
SetVisible = 10,false
|
||||
<Particle 3>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 3,5
|
||||
SetX = 3,-57
|
||||
SetY = 3,-18
|
||||
SetZ = 3,29
|
||||
SetX = 4,-18
|
||||
SetY = 4,33
|
||||
SetFrame = 5,6
|
||||
SetX = 6,32
|
||||
SetY = 6,-42
|
||||
SetX = 7,-16
|
||||
SetY = 7,-29
|
||||
SetX = 8,32
|
||||
SetY = 8,22
|
||||
SetVisible = 9,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 5,5
|
||||
SetX = 5,32
|
||||
SetY = 5,-42
|
||||
SetZ = 5,30
|
||||
SetX = 6,-16
|
||||
SetY = 6,-29
|
||||
SetX = 7,32
|
||||
SetY = 7,22
|
||||
SetVisible = 8,false
|
||||
<Particle 1>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 0,5
|
||||
SetX = 0,-24
|
||||
SetY = 0,14
|
||||
SetZ = 0,27
|
||||
SetFrame = 1,6
|
||||
SetFrame = 2,7
|
||||
SetFrame = 3,8
|
||||
SetFrame = 4,7
|
||||
SetX = 4,56
|
||||
SetY = 4,30
|
||||
SetFrame = 5,8
|
||||
SetX = 6,-57
|
||||
SetY = 6,-18
|
||||
SetX = 7,-18
|
||||
SetY = 7,33
|
||||
SetX = 8,32
|
||||
SetY = 8,-42
|
||||
SetX = 9,-16
|
||||
SetY = 9,-29
|
||||
SetX = 10,32
|
||||
SetY = 10,22
|
||||
<SE>
|
||||
Play = 0,Shiny sparkle
|
||||
@@ -1,77 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Sleep]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 3>
|
||||
Graphic = Examples/028-State01
|
||||
Focus = User
|
||||
SetFrame = 1,8
|
||||
SetX = 1,24
|
||||
SetY = 1,-18
|
||||
SetZ = 1,27
|
||||
SetZoomX = 1,50
|
||||
SetZoomY = 1,50
|
||||
MoveX = 1,4,52
|
||||
MoveY = 1,4,-67
|
||||
SetX = 5,52
|
||||
SetY = 5,-67
|
||||
SetVisible = 5,false
|
||||
SetX = 6,-41
|
||||
SetY = 6,-17
|
||||
SetVisible = 6,true
|
||||
MoveX = 6,4,-75
|
||||
MoveY = 6,4,-71
|
||||
SetX = 10,-75
|
||||
SetY = 10,-71
|
||||
SetVisible = 11,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/028-State01
|
||||
Focus = User
|
||||
SetFrame = 5,8
|
||||
SetX = 5,-14
|
||||
SetY = 5,-32
|
||||
SetZ = 5,29
|
||||
SetZoomX = 5,50
|
||||
SetZoomY = 5,50
|
||||
SetVisible = 6,false
|
||||
<Particle 5>
|
||||
Graphic = Examples/028-State01
|
||||
Focus = User
|
||||
SetFrame = 7,8
|
||||
SetX = 7,40
|
||||
SetY = 7,-10
|
||||
SetZ = 7,29
|
||||
SetZoomX = 7,50
|
||||
SetZoomY = 7,50
|
||||
SetVisible = 8,false
|
||||
<Particle 2>
|
||||
Graphic = Examples/028-State01
|
||||
Focus = User
|
||||
SetFrame = 3,8
|
||||
SetX = 3,40
|
||||
SetY = 3,-42
|
||||
SetZ = 3,28
|
||||
SetZoomX = 3,50
|
||||
SetZoomY = 3,50
|
||||
SetX = 4,-8
|
||||
SetY = 4,-18
|
||||
SetX = 5,-32
|
||||
SetY = 5,-2
|
||||
SetX = 6,-18
|
||||
SetY = 6,-48
|
||||
SetX = 7,-23
|
||||
SetY = 7,-62
|
||||
SetX = 8,48
|
||||
SetY = 8,-26
|
||||
SetX = 9,57
|
||||
SetY = 9,-42
|
||||
SetX = 10,68
|
||||
SetY = 10,-58
|
||||
SetX = 11,79
|
||||
SetY = 11,-76
|
||||
<SE>
|
||||
Play = 0,Sleep,80
|
||||
@@ -1,166 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,StatDown]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 1>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 0,5
|
||||
SetX = 0,-50
|
||||
SetY = 0,-53
|
||||
SetZ = 0,27
|
||||
SetOpacity = 0,126
|
||||
SetY = 1,-33
|
||||
SetY = 2,-13
|
||||
SetY = 3,7
|
||||
SetY = 4,27
|
||||
SetY = 5,47
|
||||
SetOpacity = 5,79
|
||||
SetY = 6,67
|
||||
SetOpacity = 6,32
|
||||
SetX = 7,14
|
||||
SetY = 7,73
|
||||
SetX = 8,-1
|
||||
SetY = 8,63
|
||||
SetX = 9,25
|
||||
SetY = 9,92
|
||||
SetVisible = 10,false
|
||||
<Particle 2>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 0,5
|
||||
SetX = 0,35
|
||||
SetY = 0,-52
|
||||
SetZ = 0,30
|
||||
SetOpacity = 0,126
|
||||
SetX = 1,14
|
||||
SetY = 1,-47
|
||||
SetY = 2,-27
|
||||
SetY = 3,-7
|
||||
SetY = 4,13
|
||||
SetY = 5,33
|
||||
SetY = 6,53
|
||||
SetOpacity = 6,79
|
||||
SetX = 7,-41
|
||||
SetY = 7,62
|
||||
SetVisible = 8,false
|
||||
<Particle 3>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 0,5
|
||||
SetX = 0,22
|
||||
SetY = 0,-29
|
||||
SetZ = 0,33
|
||||
SetOpacity = 0,126
|
||||
SetX = 1,-16
|
||||
SetVisible = 2,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 1,5
|
||||
SetX = 1,35
|
||||
SetY = 1,-32
|
||||
SetZ = 1,28
|
||||
SetOpacity = 1,126
|
||||
SetY = 2,-12
|
||||
SetY = 3,8
|
||||
SetY = 4,28
|
||||
SetY = 5,48
|
||||
SetOpacity = 5,79
|
||||
SetY = 6,68
|
||||
SetOpacity = 6,32
|
||||
SetX = 7,-16
|
||||
SetY = 7,91
|
||||
SetX = 8,-41
|
||||
SetY = 8,82
|
||||
SetVisible = 9,false
|
||||
<Particle 5>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 1,5
|
||||
SetX = 1,22
|
||||
SetY = 1,-9
|
||||
SetZ = 1,29
|
||||
SetOpacity = 1,126
|
||||
SetY = 2,11
|
||||
SetY = 3,31
|
||||
SetY = 4,51
|
||||
SetY = 5,71
|
||||
SetOpacity = 5,79
|
||||
SetY = 6,91
|
||||
SetOpacity = 6,32
|
||||
SetX = 7,-1
|
||||
SetY = 7,43
|
||||
SetOpacity = 7,79
|
||||
SetX = 8,25
|
||||
SetY = 8,72
|
||||
SetVisible = 9,false
|
||||
<Particle 6>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 2,5
|
||||
SetX = 2,-16
|
||||
SetY = 2,-9
|
||||
SetZ = 2,31
|
||||
SetOpacity = 2,126
|
||||
SetY = 3,11
|
||||
SetY = 4,31
|
||||
SetY = 5,51
|
||||
SetY = 6,71
|
||||
SetOpacity = 6,79
|
||||
SetX = 7,25
|
||||
SetY = 7,52
|
||||
SetOpacity = 7,126
|
||||
SetVisible = 8,false
|
||||
<Particle 7>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 2,5
|
||||
SetX = 2,-1
|
||||
SetY = 2,-57
|
||||
SetZ = 2,32
|
||||
SetOpacity = 2,126
|
||||
SetY = 3,-37
|
||||
SetY = 4,-17
|
||||
SetY = 5,3
|
||||
SetY = 6,23
|
||||
SetVisible = 7,false
|
||||
<Particle 8>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 2,5
|
||||
SetX = 2,-41
|
||||
SetY = 2,-38
|
||||
SetZ = 2,35
|
||||
SetOpacity = 2,126
|
||||
SetVisible = 3,false
|
||||
<Particle 9>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 3,5
|
||||
SetX = 3,-41
|
||||
SetY = 3,-18
|
||||
SetZ = 3,33
|
||||
SetOpacity = 3,126
|
||||
SetY = 4,2
|
||||
SetY = 5,22
|
||||
SetY = 6,42
|
||||
SetVisible = 7,false
|
||||
<Particle 10>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 3,5
|
||||
SetX = 3,25
|
||||
SetY = 3,-28
|
||||
SetZ = 3,34
|
||||
SetOpacity = 3,126
|
||||
SetY = 4,-8
|
||||
SetY = 5,12
|
||||
SetY = 6,32
|
||||
SetVisible = 7,false
|
||||
<SE>
|
||||
Play = 0,decrease
|
||||
@@ -1,115 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,StatUp]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 0,6
|
||||
SetX = 0,7
|
||||
SetY = 0,106
|
||||
SetZ = 0,28
|
||||
SetOpacity = 0,126
|
||||
SetY = 1,74
|
||||
SetY = 2,42
|
||||
SetY = 3,2
|
||||
SetY = 4,-30
|
||||
SetY = 5,-62
|
||||
SetY = 6,-82
|
||||
SetY = 7,-102
|
||||
SetY = 8,-122
|
||||
SetOpacity = 8,63
|
||||
SetY = 9,-142
|
||||
SetOpacity = 9,0
|
||||
<Particle 3>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 0,6
|
||||
SetX = 0,55
|
||||
SetY = 0,138
|
||||
SetZ = 0,29
|
||||
SetOpacity = 0,126
|
||||
SetY = 1,114
|
||||
SetX = 2,63
|
||||
SetY = 2,82
|
||||
SetX = 3,55
|
||||
SetY = 3,50
|
||||
SetY = 4,18
|
||||
SetY = 5,-14
|
||||
SetY = 6,-34
|
||||
SetY = 7,-54
|
||||
SetY = 8,-74
|
||||
SetOpacity = 8,63
|
||||
SetY = 9,-94
|
||||
SetOpacity = 9,0
|
||||
<Particle 4>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 2,6
|
||||
SetX = 2,-9
|
||||
SetY = 2,138
|
||||
SetZ = 2,30
|
||||
SetOpacity = 2,126
|
||||
SetY = 3,106
|
||||
SetY = 4,74
|
||||
SetY = 5,42
|
||||
SetY = 6,22
|
||||
SetY = 7,2
|
||||
SetY = 8,-18
|
||||
SetOpacity = 8,63
|
||||
SetY = 9,-38
|
||||
SetOpacity = 9,0
|
||||
<Particle 5>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 3,6
|
||||
SetX = 3,39
|
||||
SetY = 3,138
|
||||
SetZ = 3,31
|
||||
SetOpacity = 3,126
|
||||
SetY = 4,106
|
||||
SetY = 5,74
|
||||
SetY = 6,54
|
||||
SetY = 7,34
|
||||
SetY = 8,14
|
||||
SetOpacity = 8,63
|
||||
SetY = 9,-6
|
||||
SetOpacity = 9,0
|
||||
<Particle 6>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 5,6
|
||||
SetX = 5,-25
|
||||
SetY = 5,138
|
||||
SetZ = 5,32
|
||||
SetOpacity = 5,126
|
||||
SetY = 6,98
|
||||
SetY = 8,78
|
||||
SetOpacity = 8,63
|
||||
SetY = 9,58
|
||||
SetOpacity = 9,0
|
||||
<Particle 1>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 0,6
|
||||
SetX = 0,-41
|
||||
SetY = 0,138
|
||||
SetZ = 0,27
|
||||
SetOpacity = 0,126
|
||||
SetY = 1,114
|
||||
SetY = 2,82
|
||||
SetY = 3,50
|
||||
SetY = 4,18
|
||||
SetY = 5,-14
|
||||
SetY = 6,-34
|
||||
SetY = 7,-54
|
||||
SetY = 8,-74
|
||||
SetOpacity = 8,63
|
||||
SetY = 9,-94
|
||||
SetOpacity = 9,0
|
||||
<SE>
|
||||
Play = 0,increase
|
||||
@@ -1,28 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Sun]
|
||||
Name = Example anim
|
||||
NoUser = true
|
||||
NoTarget = true
|
||||
<Particle 0>
|
||||
Graphic = Examples/weather
|
||||
Focus = Foreground
|
||||
SetX = 0,64
|
||||
SetY = 0,64
|
||||
SetOpacity = 0,0
|
||||
MoveX = 0,4,94
|
||||
MoveY = 0,4,94
|
||||
MoveOpacity = 0,5,255
|
||||
SetX = 4,94
|
||||
SetY = 4,94
|
||||
SetOpacity = 5,255
|
||||
SetOpacity = 10,255
|
||||
MoveOpacity = 10,5,0
|
||||
SetX = 11,94
|
||||
SetY = 11,94
|
||||
MoveX = 11,4,64
|
||||
MoveY = 11,4,64
|
||||
SetX = 15,64
|
||||
SetY = 15,64
|
||||
SetOpacity = 15,0
|
||||
<SE>
|
||||
@@ -1,83 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,SuperShiny]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 2,5
|
||||
SetX = 2,56
|
||||
SetY = 2,30
|
||||
SetZ = 2,28
|
||||
SetFrame = 3,6
|
||||
SetX = 4,-57
|
||||
SetY = 4,-18
|
||||
SetFrame = 5,7
|
||||
SetX = 6,-18
|
||||
SetY = 6,33
|
||||
SetX = 7,32
|
||||
SetY = 7,-42
|
||||
SetX = 8,-16
|
||||
SetY = 8,-29
|
||||
SetX = 9,32
|
||||
SetY = 9,22
|
||||
SetVisible = 10,false
|
||||
<Particle 3>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 3,5
|
||||
SetX = 3,-57
|
||||
SetY = 3,-18
|
||||
SetZ = 3,29
|
||||
SetX = 4,-18
|
||||
SetY = 4,33
|
||||
SetFrame = 5,6
|
||||
SetX = 6,32
|
||||
SetY = 6,-42
|
||||
SetX = 7,-16
|
||||
SetY = 7,-29
|
||||
SetX = 8,32
|
||||
SetY = 8,22
|
||||
SetVisible = 9,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 5,5
|
||||
SetX = 5,32
|
||||
SetY = 5,-42
|
||||
SetZ = 5,30
|
||||
SetX = 6,-16
|
||||
SetY = 6,-29
|
||||
SetX = 7,32
|
||||
SetY = 7,22
|
||||
SetVisible = 8,false
|
||||
<Particle 1>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = User
|
||||
SetFrame = 0,5
|
||||
SetX = 0,-24
|
||||
SetY = 0,14
|
||||
SetZ = 0,27
|
||||
SetFrame = 1,6
|
||||
SetFrame = 2,7
|
||||
SetFrame = 3,8
|
||||
SetFrame = 4,7
|
||||
SetX = 4,56
|
||||
SetY = 4,30
|
||||
SetFrame = 5,8
|
||||
SetX = 6,-57
|
||||
SetY = 6,-18
|
||||
SetX = 7,-18
|
||||
SetY = 7,33
|
||||
SetX = 8,32
|
||||
SetY = 8,-42
|
||||
SetX = 9,-16
|
||||
SetY = 9,-29
|
||||
SetX = 10,32
|
||||
SetY = 10,22
|
||||
<SE>
|
||||
Play = 0,Shiny sparkle
|
||||
@@ -1,18 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Toxic]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 1>
|
||||
Graphic = Examples/State1
|
||||
Focus = User
|
||||
SetFrame = 1,0
|
||||
SetZoomX = 1,200
|
||||
SetZoomY = 1,200
|
||||
MoveFrame = 1,14,14
|
||||
SetFrame = 15,14
|
||||
<SE>
|
||||
Play = 0,Poison,80,80
|
||||
@@ -1,46 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Common,Wrap]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/Struggle
|
||||
Focus = User
|
||||
SetFrame = 0,1
|
||||
SetX = 0,56
|
||||
SetY = 0,6
|
||||
SetZ = 0,28
|
||||
SetX = 1,96
|
||||
SetY = 1,-2
|
||||
SetX = 2,104
|
||||
SetY = 2,6
|
||||
SetX = 3,80
|
||||
SetY = 3,-2
|
||||
SetX = 4,48
|
||||
SetX = 5,80
|
||||
SetX = 6,112
|
||||
SetY = 6,6
|
||||
SetX = 7,96
|
||||
<Particle 1>
|
||||
Graphic = Examples/Struggle
|
||||
Focus = User
|
||||
SetX = 0,-64
|
||||
SetY = 0,6
|
||||
SetZ = 0,27
|
||||
SetX = 1,-96
|
||||
SetY = 1,-2
|
||||
SetX = 2,-144
|
||||
SetY = 2,6
|
||||
SetX = 3,-120
|
||||
SetY = 3,-2
|
||||
SetX = 4,-88
|
||||
SetX = 5,-128
|
||||
SetX = 6,-168
|
||||
SetX = 7,-120
|
||||
<SE>
|
||||
Play = 0,Slash10,80
|
||||
Play = 3,Slash10,80
|
||||
Play = 6,Slash10,80
|
||||
@@ -1,243 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Move,ABSORB]
|
||||
Name = Example anim
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Target>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 0,11
|
||||
SetX = 0,179
|
||||
SetY = 0,-207
|
||||
SetZ = 0,27
|
||||
SetX = 1,134
|
||||
SetY = 1,-196
|
||||
SetX = 2,54
|
||||
SetY = 2,-148
|
||||
SetX = 3,4
|
||||
SetY = 3,-70
|
||||
SetX = 4,-15
|
||||
SetY = 4,-50
|
||||
SetX = 5,29
|
||||
SetY = 5,0
|
||||
SetFrame = 6,13
|
||||
SetX = 6,39
|
||||
SetY = 6,-40
|
||||
SetX = 7,0
|
||||
SetY = 7,-20
|
||||
SetFrame = 8,11
|
||||
SetX = 8,19
|
||||
SetY = 8,-50
|
||||
SetFrame = 9,6
|
||||
SetX = 9,-30
|
||||
SetY = 9,-59
|
||||
SetFrame = 10,7
|
||||
SetFrame = 11,8
|
||||
SetX = 12,14
|
||||
SetY = 12,-118
|
||||
SetFlip = 13,true
|
||||
SetX = 13,-10
|
||||
SetY = 13,9
|
||||
SetFlip = 14,false
|
||||
SetX = 14,-20
|
||||
SetY = 14,-128
|
||||
SetFlip = 15,true
|
||||
SetX = 15,-25
|
||||
SetY = 15,-50
|
||||
SetFlip = 16,false
|
||||
SetX = 16,25
|
||||
SetY = 16,-79
|
||||
SetX = 17,0
|
||||
SetY = 17,-10
|
||||
<Particle 3>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 1,11
|
||||
SetX = 1,209
|
||||
SetY = 1,-187
|
||||
SetZ = 1,28
|
||||
SetX = 2,184
|
||||
SetY = 2,-118
|
||||
SetX = 3,119
|
||||
SetY = 3,-50
|
||||
SetX = 4,69
|
||||
SetY = 4,-20
|
||||
SetFrame = 5,12
|
||||
SetX = 5,9
|
||||
SetY = 5,-40
|
||||
SetFrame = 6,11
|
||||
SetX = 6,-15
|
||||
SetY = 6,-59
|
||||
SetX = 7,34
|
||||
SetY = 7,0
|
||||
SetFrame = 8,5
|
||||
SetX = 8,-30
|
||||
SetY = 8,-59
|
||||
SetX = 9,25
|
||||
SetY = 9,-20
|
||||
SetFrame = 10,6
|
||||
SetFrame = 11,7
|
||||
SetX = 11,14
|
||||
SetY = 11,-118
|
||||
SetFrame = 12,8
|
||||
SetX = 12,25
|
||||
SetY = 12,-20
|
||||
SetFrame = 13,7
|
||||
SetX = 13,-20
|
||||
SetY = 13,-128
|
||||
SetFlip = 14,true
|
||||
SetX = 14,-25
|
||||
SetY = 14,-50
|
||||
SetFlip = 15,false
|
||||
SetX = 15,25
|
||||
SetY = 15,-79
|
||||
SetX = 16,0
|
||||
SetY = 16,-10
|
||||
SetVisible = 17,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 1,12
|
||||
SetX = 1,184
|
||||
SetY = 1,-217
|
||||
SetZ = 1,29
|
||||
SetX = 2,134
|
||||
SetY = 2,-168
|
||||
SetX = 3,89
|
||||
SetY = 3,-118
|
||||
SetX = 4,34
|
||||
SetY = 4,-70
|
||||
SetFrame = 5,13
|
||||
SetX = 5,100
|
||||
SetY = 5,-59
|
||||
SetFrame = 6,11
|
||||
SetX = 6,84
|
||||
SetY = 6,-40
|
||||
SetFrame = 7,12
|
||||
SetX = 7,4
|
||||
SetY = 7,-79
|
||||
SetVisible = 8,false
|
||||
<Particle 5>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 2,13
|
||||
SetX = 2,200
|
||||
SetY = 2,-207
|
||||
SetZ = 2,30
|
||||
SetX = 3,169
|
||||
SetY = 3,-148
|
||||
SetX = 4,144
|
||||
SetY = 4,-109
|
||||
SetFrame = 5,11
|
||||
SetX = 5,19
|
||||
SetY = 5,-89
|
||||
SetFrame = 6,12
|
||||
SetX = 6,50
|
||||
SetY = 6,-128
|
||||
SetFrame = 7,11
|
||||
SetX = 7,79
|
||||
SetY = 7,-109
|
||||
SetVisible = 8,false
|
||||
<Particle 6>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 2,11
|
||||
SetX = 2,169
|
||||
SetY = 2,-217
|
||||
SetZ = 2,31
|
||||
SetX = 3,139
|
||||
SetY = 3,-196
|
||||
SetX = 4,79
|
||||
SetY = 4,-168
|
||||
SetX = 5,159
|
||||
SetY = 5,-98
|
||||
SetX = 6,139
|
||||
SetY = 6,-148
|
||||
SetVisible = 7,false
|
||||
<Particle 7>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 3,11
|
||||
SetX = 3,204
|
||||
SetY = 3,-178
|
||||
SetZ = 3,32
|
||||
SetX = 4,189
|
||||
SetY = 4,-139
|
||||
SetFrame = 5,12
|
||||
SetX = 5,114
|
||||
SetY = 5,-178
|
||||
SetVisible = 6,false
|
||||
<Particle 8>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 4,12
|
||||
SetX = 4,169
|
||||
SetY = 4,-207
|
||||
SetZ = 4,33
|
||||
SetFrame = 5,11
|
||||
SetX = 5,184
|
||||
SetY = 5,-196
|
||||
SetVisible = 6,false
|
||||
<Particle 9>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 9,5
|
||||
SetX = 9,14
|
||||
SetY = 9,-118
|
||||
SetZ = 9,29
|
||||
SetFrame = 10,6
|
||||
SetFrame = 11,7
|
||||
SetX = 11,25
|
||||
SetY = 11,-20
|
||||
SetFlip = 12,true
|
||||
SetX = 12,-5
|
||||
SetY = 12,9
|
||||
SetFrame = 13,6
|
||||
SetX = 13,-25
|
||||
SetY = 13,-50
|
||||
SetFlip = 14,false
|
||||
SetX = 14,25
|
||||
SetY = 14,-79
|
||||
SetX = 15,0
|
||||
SetY = 15,-10
|
||||
SetVisible = 16,false
|
||||
<Particle 10>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 10,5
|
||||
SetFlip = 10,true
|
||||
SetX = 10,-5
|
||||
SetY = 10,9
|
||||
SetZ = 10,30
|
||||
SetFrame = 11,6
|
||||
SetFlip = 12,false
|
||||
SetX = 12,-20
|
||||
SetY = 12,-128
|
||||
SetFrame = 13,5
|
||||
SetX = 13,25
|
||||
SetY = 13,-79
|
||||
SetX = 14,0
|
||||
SetY = 14,-10
|
||||
SetVisible = 15,false
|
||||
<Particle 11>
|
||||
Graphic = Examples/leech-seed
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 11,5
|
||||
SetX = 11,-20
|
||||
SetY = 11,-128
|
||||
SetZ = 11,31
|
||||
SetFlip = 12,true
|
||||
SetX = 12,-25
|
||||
SetY = 12,-50
|
||||
SetVisible = 13,false
|
||||
<SE>
|
||||
Play = 0,Absorb2,80
|
||||
Play = 2,Absorb2,80
|
||||
Play = 5,Absorb2,80
|
||||
Play = 7,Absorb2,80
|
||||
Play = 8,Saint7,80
|
||||
@@ -1,74 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Move,ACID]
|
||||
Name = Example anim
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Target>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 3>
|
||||
Graphic = Examples/poison2
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 1,4
|
||||
SetX = 1,14
|
||||
SetY = 1,-20
|
||||
SetZ = 1,28
|
||||
SetFrame = 2,5
|
||||
SetX = 2,34
|
||||
SetY = 2,-70
|
||||
SetFrame = 3,6
|
||||
SetX = 3,69
|
||||
SetY = 3,-128
|
||||
SetX = 4,114
|
||||
SetY = 4,-187
|
||||
SetX = 5,154
|
||||
SetY = 5,-207
|
||||
SetY = 6,-217
|
||||
SetVisible = 7,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/poison2
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 3,4
|
||||
SetX = 3,19
|
||||
SetY = 3,-20
|
||||
SetZ = 3,29
|
||||
SetFrame = 4,5
|
||||
SetX = 4,59
|
||||
SetY = 4,-118
|
||||
SetFrame = 5,6
|
||||
SetX = 5,109
|
||||
SetY = 5,-207
|
||||
SetVisible = 6,false
|
||||
<Particle 2>
|
||||
Graphic = Examples/poison2
|
||||
Focus = UserAndTarget
|
||||
SetFrame = 0,3
|
||||
SetX = 0,14
|
||||
SetY = 0,-20
|
||||
SetZ = 0,27
|
||||
SetFrame = 1,4
|
||||
SetX = 1,39
|
||||
SetY = 1,-98
|
||||
SetFrame = 2,5
|
||||
SetX = 2,69
|
||||
SetY = 2,-148
|
||||
SetFrame = 3,6
|
||||
SetX = 3,134
|
||||
SetY = 3,-187
|
||||
SetFrame = 4,7
|
||||
SetX = 4,179
|
||||
SetY = 4,-178
|
||||
SetFrame = 5,8
|
||||
SetFrame = 6,9
|
||||
SetFrame = 7,10
|
||||
SetFrame = 8,11
|
||||
SetFrame = 9,12
|
||||
SetFrame = 10,13
|
||||
SetFrame = 11,14
|
||||
SetOpacity = 12,100
|
||||
SetVisible = 13,false
|
||||
<SE>
|
||||
Play = 0,throw,80
|
||||
Play = 3,Poison,80
|
||||
@@ -1,35 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Move,ACIDARMOR]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 1>
|
||||
Graphic = Examples/poison3
|
||||
Focus = User
|
||||
SetFrame = 0,1
|
||||
SetX = 0,8
|
||||
SetY = 0,-2
|
||||
SetZ = 0,27
|
||||
SetFrame = 1,2
|
||||
SetFrame = 2,3
|
||||
SetFrame = 3,4
|
||||
SetFrame = 4,5
|
||||
SetX = 4,16
|
||||
SetY = 4,-10
|
||||
SetFrame = 5,6
|
||||
SetX = 5,8
|
||||
SetFrame = 6,7
|
||||
SetY = 6,-18
|
||||
SetFrame = 7,8
|
||||
SetFrame = 8,9
|
||||
SetFrame = 9,10
|
||||
SetFrame = 10,11
|
||||
SetFrame = 11,12
|
||||
SetFrame = 12,13
|
||||
<SE>
|
||||
Play = 0,throw,80
|
||||
Play = 0,Sound2,80
|
||||
Play = 0,Pollen,80
|
||||
@@ -1,152 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Move,ACIDSPRAY]
|
||||
Name = Example anim
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Target>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = Target
|
||||
SetX = 0,-43
|
||||
SetY = 0,-88
|
||||
SetZ = 0,27
|
||||
SetZoomX = 0,85
|
||||
SetZoomY = 0,85
|
||||
SetY = 1,-79
|
||||
SetX = 3,-49
|
||||
SetY = 3,-48
|
||||
SetX = 4,-44
|
||||
SetY = 4,-20
|
||||
SetX = 5,-45
|
||||
SetY = 5,-3
|
||||
SetFrame = 6,1
|
||||
SetX = 6,-19
|
||||
SetY = 6,8
|
||||
SetAngle = 6,180
|
||||
SetX = 7,-54
|
||||
SetY = 7,20
|
||||
SetFrame = 8,3
|
||||
SetX = 8,29
|
||||
SetY = 8,55
|
||||
SetZoomX = 8,79
|
||||
SetZoomY = 8,79
|
||||
<Particle 3>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = Target
|
||||
SetX = 1,-18
|
||||
SetY = 1,-88
|
||||
SetZ = 1,28
|
||||
SetZoomX = 1,85
|
||||
SetZoomY = 1,85
|
||||
SetX = 3,-30
|
||||
SetY = 3,-66
|
||||
SetX = 4,-29
|
||||
SetY = 4,-41
|
||||
SetY = 5,-15
|
||||
SetFrame = 6,1
|
||||
SetX = 6,-46
|
||||
SetY = 6,-4
|
||||
SetAngle = 6,180
|
||||
SetX = 7,-27
|
||||
SetY = 7,29
|
||||
SetFrame = 8,3
|
||||
SetX = 8,6
|
||||
SetY = 8,32
|
||||
SetZoomX = 8,79
|
||||
SetZoomY = 8,79
|
||||
<Particle 4>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = Target
|
||||
SetX = 1,10
|
||||
SetY = 1,-79
|
||||
SetZ = 1,29
|
||||
SetZoomX = 1,85
|
||||
SetZoomY = 1,85
|
||||
SetX = 3,0
|
||||
SetY = 3,-56
|
||||
SetX = 4,-8
|
||||
SetY = 4,-33
|
||||
SetVisible = 5,false
|
||||
<Particle 5>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = Target
|
||||
SetX = 2,34
|
||||
SetY = 2,-87
|
||||
SetZ = 2,30
|
||||
SetZoomX = 2,85
|
||||
SetZoomY = 2,85
|
||||
SetX = 3,24
|
||||
SetY = 3,-73
|
||||
SetX = 4,18
|
||||
SetY = 4,-25
|
||||
SetX = 5,17
|
||||
SetY = 5,-7
|
||||
SetFrame = 6,1
|
||||
SetX = 6,23
|
||||
SetY = 6,6
|
||||
SetAngle = 6,180
|
||||
SetX = 7,-4
|
||||
SetY = 7,31
|
||||
SetFrame = 8,3
|
||||
SetX = 8,-43
|
||||
SetY = 8,33
|
||||
SetZoomX = 8,79
|
||||
SetZoomY = 8,79
|
||||
<Particle 6>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = Target
|
||||
SetX = 2,57
|
||||
SetY = 2,-84
|
||||
SetZ = 2,31
|
||||
SetZoomX = 2,85
|
||||
SetZoomY = 2,85
|
||||
SetX = 3,54
|
||||
SetY = 3,-59
|
||||
SetX = 4,47
|
||||
SetY = 4,-31
|
||||
SetX = 5,46
|
||||
SetY = 5,-13
|
||||
SetFrame = 6,1
|
||||
SetY = 6,5
|
||||
SetAngle = 6,180
|
||||
SetX = 7,15
|
||||
SetY = 7,20
|
||||
SetFrame = 8,3
|
||||
SetX = 8,-78
|
||||
SetY = 8,29
|
||||
SetZoomX = 8,79
|
||||
SetZoomY = 8,79
|
||||
<Particle 7>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = Target
|
||||
SetFrame = 5,1
|
||||
SetX = 5,-23
|
||||
SetY = 5,-10
|
||||
SetZ = 5,32
|
||||
SetZoomX = 5,85
|
||||
SetZoomY = 5,85
|
||||
SetAngle = 5,180
|
||||
SetVisible = 6,false
|
||||
<Particle 8>
|
||||
Graphic = Examples/fly copy
|
||||
Focus = Target
|
||||
SetFrame = 6,1
|
||||
SetX = 6,-2
|
||||
SetY = 6,-5
|
||||
SetZ = 6,29
|
||||
SetZoomX = 6,85
|
||||
SetZoomY = 6,85
|
||||
SetAngle = 6,180
|
||||
SetFrame = 7,3
|
||||
SetX = 7,36
|
||||
SetY = 7,33
|
||||
SetX = 8,-20
|
||||
SetY = 8,38
|
||||
SetZoomX = 8,79
|
||||
SetZoomY = 8,79
|
||||
<SE>
|
||||
Play = 0,Substitute,80
|
||||
@@ -1,46 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Move,ACROBATICS]
|
||||
Name = Example anim
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Target>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 3>
|
||||
Graphic = Examples/finger spoon
|
||||
Focus = Target
|
||||
SetFrame = 2,12
|
||||
SetX = 2,-8
|
||||
SetY = 2,37
|
||||
SetZ = 2,28
|
||||
SetZoomX = 2,41
|
||||
SetZoomY = 2,41
|
||||
SetZoomX = 3,39
|
||||
SetZoomY = 3,39
|
||||
SetZoomX = 5,62
|
||||
SetZoomY = 5,62
|
||||
SetX = 6,-24
|
||||
SetY = 6,35
|
||||
SetZoomX = 6,84
|
||||
SetZoomY = 6,84
|
||||
<Particle 2>
|
||||
Graphic = Examples/finger spoon
|
||||
Focus = Target
|
||||
SetFrame = 0,13
|
||||
SetX = 0,8
|
||||
SetY = 0,-10
|
||||
SetZ = 0,27
|
||||
SetZoomX = 0,25
|
||||
SetZoomY = 0,25
|
||||
SetZoomX = 1,47
|
||||
SetZoomY = 1,47
|
||||
SetZoomX = 3,70
|
||||
SetZoomY = 3,70
|
||||
SetZoomX = 4,81
|
||||
SetZoomY = 4,81
|
||||
SetZoomX = 5,86
|
||||
SetZoomY = 5,86
|
||||
<SE>
|
||||
Play = 0,Take Down,100,112
|
||||
@@ -1,120 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Move,ACUPRESSURE]
|
||||
Name = Example anim
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Target>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/mixed status
|
||||
Focus = Target
|
||||
SetFrame = 0,13
|
||||
SetX = 0,25
|
||||
SetY = 0,-60
|
||||
SetZ = 0,27
|
||||
SetZoomX = 0,200
|
||||
SetZoomY = 0,200
|
||||
SetX = 1,23
|
||||
SetY = 1,-62
|
||||
SetX = 2,21
|
||||
SetX = 3,20
|
||||
SetY = 3,-60
|
||||
SetY = 4,-63
|
||||
SetX = 5,23
|
||||
SetY = 5,-62
|
||||
SetX = 6,19
|
||||
SetY = 6,-64
|
||||
SetX = 7,21
|
||||
SetY = 7,-61
|
||||
SetX = 8,19
|
||||
SetY = 8,-64
|
||||
SetVisible = 9,false
|
||||
<Particle 3>
|
||||
Graphic = Examples/mixed status
|
||||
Focus = Target
|
||||
SetFrame = 4,14
|
||||
SetX = 4,1
|
||||
SetY = 4,-12
|
||||
SetZ = 4,28
|
||||
SetX = 5,5
|
||||
SetY = 5,-8
|
||||
SetX = 6,13
|
||||
SetY = 7,-6
|
||||
SetX = 8,11
|
||||
SetY = 8,-16
|
||||
SetVisible = 9,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/mixed status
|
||||
Focus = Target
|
||||
SetFrame = 5,15
|
||||
SetX = 5,-17
|
||||
SetY = 5,31
|
||||
SetZ = 5,29
|
||||
SetX = 6,-15
|
||||
SetY = 6,28
|
||||
SetX = 7,-17
|
||||
SetY = 7,29
|
||||
SetFrame = 8,14
|
||||
SetX = 8,62
|
||||
SetY = 8,20
|
||||
SetVisible = 9,false
|
||||
<Particle 5>
|
||||
Graphic = Examples/mixed status
|
||||
Focus = Target
|
||||
SetFrame = 6,15
|
||||
SetX = 6,43
|
||||
SetY = 6,-4
|
||||
SetZ = 6,30
|
||||
SetFrame = 7,14
|
||||
SetX = 7,65
|
||||
SetY = 7,23
|
||||
SetFrame = 8,15
|
||||
SetX = 8,-18
|
||||
SetY = 8,25
|
||||
SetVisible = 9,false
|
||||
<Particle 6>
|
||||
Graphic = Examples/mixed status
|
||||
Focus = Target
|
||||
SetFrame = 7,15
|
||||
SetX = 7,44
|
||||
SetY = 7,-5
|
||||
SetZ = 7,31
|
||||
SetY = 8,-6
|
||||
SetVisible = 9,false
|
||||
<Particle 7>
|
||||
Graphic = Examples/mixed status
|
||||
Focus = Target
|
||||
SetFrame = 8,15
|
||||
SetX = 8,46
|
||||
SetY = 8,-4
|
||||
SetZ = 8,32
|
||||
SetVisible = 9,false
|
||||
<Particle 8>
|
||||
Graphic = Examples/mixed status
|
||||
Focus = Target
|
||||
SetFrame = 8,14
|
||||
SetX = 8,61
|
||||
SetY = 8,19
|
||||
SetZ = 8,33
|
||||
SetVisible = 9,false
|
||||
<Particle 9>
|
||||
Graphic = Examples/mixed status
|
||||
Focus = Target
|
||||
SetFrame = 8,15
|
||||
SetX = 8,-16
|
||||
SetY = 8,25
|
||||
SetZ = 8,34
|
||||
SetVisible = 9,false
|
||||
<Particle 10>
|
||||
Graphic = Examples/mixed status
|
||||
Focus = Target
|
||||
SetFrame = 8,14
|
||||
SetX = 8,11
|
||||
SetY = 8,-16
|
||||
SetZ = 8,35
|
||||
SetVisible = 9,false
|
||||
<SE>
|
||||
Play = 0,Acupressure
|
||||
@@ -1,438 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Move,AERIALACE]
|
||||
Name = Example anim
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
SetOpacity = 1,170
|
||||
SetOpacity = 2,85
|
||||
SetOpacity = 3,0
|
||||
SetOpacity = 6,255
|
||||
<Target>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetX = 0,84
|
||||
SetY = 0,-50
|
||||
SetZ = 0,27
|
||||
SetOpacity = 0,128
|
||||
SetVisible = 1,false
|
||||
<Particle 3>
|
||||
Graphic = USER
|
||||
Focus = User
|
||||
SetX = 1,-52
|
||||
SetY = 1,6
|
||||
SetZ = 1,27
|
||||
SetOpacity = 2,170
|
||||
SetOpacity = 3,85
|
||||
SetVisible = 4,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetX = 1,58
|
||||
SetY = 1,-25
|
||||
SetZ = 1,28
|
||||
SetToneRed = 1,-37
|
||||
SetToneGreen = 1,-37
|
||||
SetToneBlue = 1,-37
|
||||
SetVisible = 2,false
|
||||
<Particle 5>
|
||||
Graphic = USER
|
||||
Focus = User
|
||||
SetX = 2,-69
|
||||
SetY = 2,34
|
||||
SetZ = 2,28
|
||||
SetOpacity = 3,170
|
||||
SetOpacity = 4,85
|
||||
SetVisible = 5,false
|
||||
<Particle 6>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetX = 2,27
|
||||
SetY = 2,2
|
||||
SetZ = 2,29
|
||||
SetToneRed = 2,-74
|
||||
SetToneGreen = 2,-74
|
||||
SetToneBlue = 2,-74
|
||||
SetVisible = 3,false
|
||||
<Particle 7>
|
||||
Graphic = USER
|
||||
Focus = User
|
||||
SetX = 3,-28
|
||||
SetY = 3,48
|
||||
SetZ = 3,29
|
||||
SetX = 4,35
|
||||
SetY = 4,35
|
||||
SetX = 5,12
|
||||
SetY = 5,6
|
||||
SetVisible = 6,false
|
||||
<Particle 8>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 3,1
|
||||
SetX = 3,-13
|
||||
SetY = 3,41
|
||||
SetZ = 3,30
|
||||
SetVisible = 4,false
|
||||
<Particle 9>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 4,1
|
||||
SetX = 4,-53
|
||||
SetY = 4,77
|
||||
SetZ = 4,27
|
||||
SetToneRed = 4,214
|
||||
SetToneGreen = 4,100
|
||||
SetToneBlue = 4,100
|
||||
SetFrame = 5,3
|
||||
SetX = 5,-33
|
||||
SetY = 5,55
|
||||
SetToneRed = 5,0
|
||||
SetToneGreen = 5,0
|
||||
SetToneBlue = 5,0
|
||||
SetX = 6,6
|
||||
SetY = 6,22
|
||||
SetX = 7,31
|
||||
SetY = 7,-1
|
||||
SetFrame = 8,2
|
||||
SetX = 8,68
|
||||
SetY = 8,-34
|
||||
SetX = 9,92
|
||||
SetY = 9,-60
|
||||
SetOpacity = 9,128
|
||||
SetFrame = 10,6
|
||||
SetX = 10,-97
|
||||
SetY = 10,-64
|
||||
SetOpacity = 10,255
|
||||
SetX = 11,-116
|
||||
SetY = 11,-90
|
||||
SetOpacity = 11,128
|
||||
<Particle 10>
|
||||
Graphic = USER
|
||||
Focus = User
|
||||
SetX = 4,-28
|
||||
SetY = 4,48
|
||||
SetZ = 4,30
|
||||
SetOpacity = 4,170
|
||||
SetX = 5,35
|
||||
SetY = 5,35
|
||||
SetX = 6,12
|
||||
SetY = 6,6
|
||||
SetVisible = 7,false
|
||||
<Particle 11>
|
||||
Graphic = USER
|
||||
Focus = User
|
||||
SetX = 5,-28
|
||||
SetY = 5,48
|
||||
SetZ = 5,31
|
||||
SetOpacity = 5,85
|
||||
SetX = 6,35
|
||||
SetY = 6,35
|
||||
SetX = 7,11
|
||||
SetY = 7,6
|
||||
SetVisible = 8,false
|
||||
<Particle 12>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 6,6
|
||||
SetX = 6,-3
|
||||
SetY = 6,22
|
||||
SetZ = 6,28
|
||||
SetOpacity = 6,128
|
||||
SetX = 7,7
|
||||
SetY = 7,-14
|
||||
SetOpacity = 7,255
|
||||
SetX = 8,-57
|
||||
SetY = 8,-4
|
||||
SetX = 9,-92
|
||||
SetY = 9,-30
|
||||
SetX = 10,-75
|
||||
SetY = 10,-93
|
||||
SetOpacity = 10,128
|
||||
SetX = 11,106
|
||||
SetY = 11,-90
|
||||
<Particle 13>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 6,6
|
||||
SetX = 6,9
|
||||
SetY = 6,14
|
||||
SetZ = 6,29
|
||||
SetOpacity = 6,128
|
||||
SetX = 7,-16
|
||||
SetY = 7,2
|
||||
SetOpacity = 7,255
|
||||
SetX = 8,-34
|
||||
SetY = 8,-39
|
||||
SetX = 9,-77
|
||||
SetY = 9,-73
|
||||
SetX = 10,-31
|
||||
SetY = 10,-75
|
||||
SetX = 11,-39
|
||||
SetY = 11,-99
|
||||
SetOpacity = 11,128
|
||||
<Particle 14>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 6,6
|
||||
SetX = 6,26
|
||||
SetY = 6,13
|
||||
SetZ = 6,32
|
||||
SetOpacity = 6,128
|
||||
SetX = 7,56
|
||||
SetY = 7,2
|
||||
SetOpacity = 7,255
|
||||
SetX = 8,95
|
||||
SetY = 8,49
|
||||
SetX = 9,118
|
||||
SetY = 9,62
|
||||
SetOpacity = 9,128
|
||||
SetX = 10,126
|
||||
SetY = 10,-37
|
||||
SetVisible = 11,false
|
||||
<Particle 15>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 6,6
|
||||
SetX = 6,24
|
||||
SetY = 6,29
|
||||
SetZ = 6,33
|
||||
SetOpacity = 6,128
|
||||
SetX = 7,55
|
||||
SetY = 7,31
|
||||
SetOpacity = 7,255
|
||||
SetX = 8,59
|
||||
SetY = 8,-39
|
||||
SetX = 9,69
|
||||
SetY = 9,-58
|
||||
SetVisible = 10,false
|
||||
<Particle 16>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 6,6
|
||||
SetX = 6,-21
|
||||
SetY = 6,16
|
||||
SetZ = 6,34
|
||||
SetOpacity = 6,128
|
||||
SetX = 7,21
|
||||
SetY = 7,-19
|
||||
SetOpacity = 7,255
|
||||
SetX = 8,36
|
||||
SetY = 8,-30
|
||||
SetX = 9,27
|
||||
SetY = 9,-64
|
||||
SetVisible = 10,false
|
||||
<Particle 17>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 7,6
|
||||
SetX = 7,35
|
||||
SetY = 7,-22
|
||||
SetZ = 7,30
|
||||
SetX = 8,8
|
||||
SetY = 8,-39
|
||||
SetX = 9,-28
|
||||
SetY = 9,-58
|
||||
SetX = 10,93
|
||||
SetY = 10,-72
|
||||
SetX = 11,27
|
||||
SetY = 11,-89
|
||||
SetOpacity = 11,128
|
||||
<Particle 18>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 7,6
|
||||
SetX = 7,48
|
||||
SetY = 7,-10
|
||||
SetZ = 7,35
|
||||
SetX = 8,71
|
||||
SetY = 8,-18
|
||||
SetX = 9,103
|
||||
SetY = 9,-34
|
||||
SetVisible = 10,false
|
||||
<Particle 19>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 8,6
|
||||
SetX = 8,95
|
||||
SetY = 8,-7
|
||||
SetZ = 8,31
|
||||
SetX = 9,123
|
||||
SetY = 9,1
|
||||
SetOpacity = 9,128
|
||||
SetX = 10,26
|
||||
SetY = 10,-59
|
||||
SetOpacity = 10,255
|
||||
SetVisible = 11,false
|
||||
<SE>
|
||||
Play = 0,Ace,80
|
||||
#-------------------------------
|
||||
[OppMove,AERIALACE]
|
||||
Name = Example anim
|
||||
<User>
|
||||
SetOpacity = 1,170
|
||||
SetOpacity = 2,85
|
||||
SetOpacity = 3,0
|
||||
SetOpacity = 5,255
|
||||
<Target>
|
||||
<Particle 2>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetX = 0,101
|
||||
SetY = 0,-56
|
||||
SetZ = 0,27
|
||||
SetOpacity = 0,128
|
||||
SetX = 1,81
|
||||
SetY = 1,-39
|
||||
SetOpacity = 1,255
|
||||
SetFrame = 2,1
|
||||
SetX = 2,48
|
||||
SetY = 2,-8
|
||||
SetX = 3,16
|
||||
SetY = 3,24
|
||||
SetVisible = 4,false
|
||||
<Particle 3>
|
||||
Graphic = USER
|
||||
Focus = User
|
||||
SetX = 1,-51
|
||||
SetY = 1,18
|
||||
SetZ = 1,28
|
||||
SetOpacity = 2,170
|
||||
SetOpacity = 3,85
|
||||
SetX = 4,49
|
||||
SetY = 4,12
|
||||
SetOpacity = 4,255
|
||||
SetOpacity = 5,170
|
||||
SetOpacity = 6,85
|
||||
SetVisible = 7,false
|
||||
<Particle 4>
|
||||
Graphic = USER
|
||||
Focus = User
|
||||
SetX = 2,-16
|
||||
SetY = 2,44
|
||||
SetZ = 2,29
|
||||
SetX = 3,34
|
||||
SetY = 3,38
|
||||
SetOpacity = 4,170
|
||||
SetVisible = 5,false
|
||||
<Particle 5>
|
||||
Graphic = USER
|
||||
Focus = User
|
||||
SetX = 3,-16
|
||||
SetY = 3,44
|
||||
SetZ = 3,30
|
||||
SetOpacity = 3,170
|
||||
SetOpacity = 4,85
|
||||
SetX = 5,34
|
||||
SetY = 5,38
|
||||
SetVisible = 6,false
|
||||
<Particle 6>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 5,7
|
||||
SetX = 5,54
|
||||
SetY = 5,27
|
||||
SetZ = 5,29
|
||||
SetOpacity = 5,128
|
||||
SetX = 6,1
|
||||
SetY = 6,-32
|
||||
SetOpacity = 6,255
|
||||
SetX = 7,-16
|
||||
SetY = 7,-52
|
||||
SetX = 8,-41
|
||||
SetY = 8,-55
|
||||
SetX = 9,-60
|
||||
SetY = 9,-64
|
||||
SetX = 10,-75
|
||||
SetY = 10,-73
|
||||
SetOpacity = 10,170
|
||||
SetX = 11,-97
|
||||
SetY = 11,-85
|
||||
SetOpacity = 11,85
|
||||
<Particle 7>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 5,7
|
||||
SetX = 5,30
|
||||
SetY = 5,13
|
||||
SetZ = 5,31
|
||||
SetOpacity = 5,128
|
||||
SetX = 6,-36
|
||||
SetY = 6,19
|
||||
SetOpacity = 6,255
|
||||
SetX = 7,-49
|
||||
SetY = 7,16
|
||||
SetX = 8,-64
|
||||
SetY = 8,28
|
||||
SetX = 9,-93
|
||||
SetY = 9,32
|
||||
SetX = 10,-111
|
||||
SetY = 10,36
|
||||
SetOpacity = 10,170
|
||||
SetVisible = 11,false
|
||||
<Particle 8>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 5,7
|
||||
SetX = 5,-3
|
||||
SetY = 5,3
|
||||
SetZ = 5,32
|
||||
SetOpacity = 5,128
|
||||
SetX = 6,43
|
||||
SetY = 6,-35
|
||||
SetOpacity = 6,255
|
||||
SetX = 7,67
|
||||
SetY = 7,-57
|
||||
SetX = 8,76
|
||||
SetY = 8,-71
|
||||
SetX = 9,100
|
||||
SetY = 9,-95
|
||||
SetOpacity = 9,170
|
||||
SetX = 10,111
|
||||
SetY = 10,-102
|
||||
SetOpacity = 10,85
|
||||
SetVisible = 11,false
|
||||
<Particle 9>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 5,7
|
||||
SetX = 5,-27
|
||||
SetY = 5,26
|
||||
SetZ = 5,33
|
||||
SetOpacity = 5,128
|
||||
SetX = 6,69
|
||||
SetY = 6,20
|
||||
SetOpacity = 6,255
|
||||
SetX = 7,68
|
||||
SetY = 7,15
|
||||
SetX = 8,100
|
||||
SetY = 8,8
|
||||
SetX = 9,136
|
||||
SetY = 9,18
|
||||
SetX = 10,155
|
||||
SetY = 10,20
|
||||
SetOpacity = 10,170
|
||||
SetX = 11,170
|
||||
SetY = 11,22
|
||||
SetOpacity = 11,85
|
||||
<Particle 10>
|
||||
Graphic = Examples/Aerial Ace
|
||||
Focus = Target
|
||||
SetFrame = 5,7
|
||||
SetX = 5,19
|
||||
SetY = 5,50
|
||||
SetZ = 5,34
|
||||
SetOpacity = 5,128
|
||||
SetX = 6,45
|
||||
SetY = 6,53
|
||||
SetOpacity = 6,255
|
||||
SetX = 7,61
|
||||
SetY = 7,50
|
||||
SetX = 8,83
|
||||
SetY = 8,60
|
||||
SetVisible = 9,false
|
||||
<SE>
|
||||
Play = 0,Ace,80
|
||||
@@ -1,91 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Move,AGILITY]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 2>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 0,5
|
||||
SetX = 0,-98
|
||||
SetY = 0,-36
|
||||
SetZ = 0,28
|
||||
SetAngle = 0,90
|
||||
SetX = 1,-73
|
||||
SetX = 2,-48
|
||||
SetX = 3,-18
|
||||
SetX = 4,7
|
||||
SetX = 5,32
|
||||
SetX = 6,57
|
||||
SetX = 7,82
|
||||
SetX = 8,107
|
||||
SetX = 9,132
|
||||
<Particle 3>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 0,5
|
||||
SetX = 0,-53
|
||||
SetY = 0,-93
|
||||
SetZ = 0,29
|
||||
SetAngle = 0,90
|
||||
SetX = 1,-23
|
||||
SetX = 2,12
|
||||
SetX = 3,47
|
||||
SetX = 4,82
|
||||
SetX = 5,117
|
||||
SetX = 6,152
|
||||
SetX = 7,187
|
||||
SetVisible = 8,false
|
||||
<Particle 4>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 1,5
|
||||
SetX = 1,-88
|
||||
SetY = 1,49
|
||||
SetZ = 1,30
|
||||
SetAngle = 1,90
|
||||
SetX = 2,-63
|
||||
SetX = 3,-38
|
||||
SetX = 4,-13
|
||||
SetX = 5,12
|
||||
SetX = 6,37
|
||||
SetX = 7,62
|
||||
SetX = 8,87
|
||||
SetX = 9,112
|
||||
<Particle 5>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 2,5
|
||||
SetX = 2,-98
|
||||
SetY = 2,-80
|
||||
SetZ = 2,31
|
||||
SetAngle = 2,90
|
||||
SetX = 3,-63
|
||||
SetX = 4,-28
|
||||
SetX = 5,7
|
||||
SetX = 6,42
|
||||
SetX = 7,77
|
||||
SetX = 8,112
|
||||
SetX = 9,147
|
||||
<Particle 1>
|
||||
Graphic = Examples/!
|
||||
Focus = User
|
||||
SetFrame = 0,5
|
||||
SetX = 0,-76
|
||||
SetY = 0,13
|
||||
SetZ = 0,27
|
||||
SetAngle = 0,90
|
||||
SetX = 1,-46
|
||||
SetX = 2,-16
|
||||
SetX = 3,14
|
||||
SetX = 4,44
|
||||
SetX = 5,74
|
||||
SetX = 6,104
|
||||
SetX = 7,134
|
||||
SetX = 8,164
|
||||
SetX = 9,194
|
||||
<SE>
|
||||
Play = 0,Psych Up,100,82
|
||||
@@ -1,53 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Move,ALLYSWITCH]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 1>
|
||||
Graphic = Examples/anim sheet
|
||||
Focus = User
|
||||
SetFrame = 0,10
|
||||
SetX = 0,9
|
||||
SetY = 0,-2
|
||||
SetZ = 0,27
|
||||
SetFrame = 1,11
|
||||
SetX = 1,11
|
||||
SetY = 1,0
|
||||
SetFrame = 2,12
|
||||
SetX = 2,9
|
||||
SetY = 2,-2
|
||||
SetZoomX = 3,110
|
||||
SetZoomY = 3,110
|
||||
SetY = 4,-4
|
||||
SetZoomX = 4,125
|
||||
SetZoomY = 4,125
|
||||
SetX = 5,13
|
||||
SetY = 5,-7
|
||||
SetZoomX = 5,165
|
||||
SetZoomY = 5,165
|
||||
SetX = 6,14
|
||||
SetY = 6,-8
|
||||
SetZoomX = 6,186
|
||||
SetZoomY = 6,186
|
||||
SetX = 7,15
|
||||
SetY = 7,-9
|
||||
SetZoomX = 7,202
|
||||
SetZoomY = 7,202
|
||||
SetY = 8,-11
|
||||
SetZoomX = 8,230
|
||||
SetZoomY = 8,230
|
||||
SetX = 9,20
|
||||
SetY = 9,-17
|
||||
SetZoomX = 9,300
|
||||
SetZoomY = 9,300
|
||||
SetOpacity = 14,212
|
||||
SetOpacity = 15,170
|
||||
SetOpacity = 16,127
|
||||
SetOpacity = 17,85
|
||||
SetOpacity = 18,42
|
||||
SetOpacity = 19,0
|
||||
<SE>
|
||||
Play = 0,Uproar
|
||||
@@ -1,24 +0,0 @@
|
||||
# See the documentation on the wiki to learn how to edit this file.
|
||||
#-------------------------------
|
||||
[Move,AMNESIA]
|
||||
Name = Example anim
|
||||
NoTarget = true
|
||||
<User>
|
||||
SetX = 0,0
|
||||
SetY = 0,0
|
||||
<Particle 1>
|
||||
Graphic = Examples/mixed
|
||||
Focus = User
|
||||
SetFrame = 0,3
|
||||
SetX = 0,44
|
||||
SetY = 0,-16
|
||||
SetZoomX = 0,200
|
||||
SetZoomY = 0,200
|
||||
SetOpacity = 0,0
|
||||
MoveOpacity = 0,4,255
|
||||
SetOpacity = 4,255
|
||||
SetOpacity = 10,255
|
||||
MoveOpacity = 10,4,0
|
||||
SetOpacity = 14,0
|
||||
<SE>
|
||||
Play = 0,Yawn
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user