diff --git a/Data/Map017.rxdata b/Data/Map017.rxdata index fd3eac8cb..615d4d3c2 100644 Binary files a/Data/Map017.rxdata and b/Data/Map017.rxdata differ diff --git a/Data/Map380.rxdata b/Data/Map380.rxdata index d523f75b0..4c44f779c 100644 Binary files a/Data/Map380.rxdata and b/Data/Map380.rxdata differ diff --git a/Data/MapInfos.rxdata b/Data/MapInfos.rxdata index e094b24ac..4aa69b483 100644 Binary files a/Data/MapInfos.rxdata and b/Data/MapInfos.rxdata differ diff --git a/Data/Scripts/005_Sprites/013_Sprite_Wearable.rb b/Data/Scripts/005_Sprites/013_Sprite_Wearable.rb index 250ba8f54..da106f77f 100644 --- a/Data/Scripts/005_Sprites/013_Sprite_Wearable.rb +++ b/Data/Scripts/005_Sprites/013_Sprite_Wearable.rb @@ -3,7 +3,7 @@ class Sprite_Wearable < RPG::Sprite attr_accessor :action attr_accessor :sprite - def initialize(player_sprite, filename, action, viewport) + def initialize(player_sprite, filename, action, viewport, relative_z=0) @player_sprite = player_sprite @viewport = viewport @sprite = Sprite.new(@viewport) @@ -15,7 +15,7 @@ class Sprite_Wearable < RPG::Sprite @frameWidth = 80 #@sprite.width @frameHeight = 80 #@sprite.height / 4 @sprite.z = 0 - @relative_z=0 #relative to player + @relative_z=relative_z #relative to player echoln(_INTL("init had at z = {1}, player sprite at {2}",@sprite.z,@player_sprite.z)) #Unused position offset diff --git a/Data/Scripts/005_Sprites/014_Sprite_Hat.rb b/Data/Scripts/005_Sprites/014_Sprite_Hat.rb index 591f2016d..75191ab3d 100644 --- a/Data/Scripts/005_Sprites/014_Sprite_Hat.rb +++ b/Data/Scripts/005_Sprites/014_Sprite_Hat.rb @@ -1,192 +1,8 @@ class Sprite_Hat < Sprite_Wearable - def initialize(player_sprite, filename, action, viewport) + def initialize(player_sprite, filename, action, viewport, relative_z=2) super - @relative_z = 2 + @relative_z = relative_z #@sprite.z = @player_sprite.z + 2 end - - # def set_sprite_position(action, direction, current_frame) - # @sprite.x = @player_sprite.x - @player_sprite.ox - # @sprite.y = @player_sprite.y - @player_sprite.oy - # case action - # when "run" - # if direction == DIRECTION_DOWN - # apply_sprite_offset(Outfit_Offsets::RUN_OFFSETS_DOWN, current_frame) - # elsif direction == DIRECTION_LEFT - # apply_sprite_offset(Outfit_Offsets::RUN_OFFSETS_LEFT, current_frame) - # elsif direction == DIRECTION_RIGHT - # apply_sprite_offset(Outfit_Offsets::RUN_OFFSETS_RIGHT, current_frame) - # elsif direction == DIRECTION_UP - # apply_sprite_offset(Outfit_Offsets::RUN_OFFSETS_UP, current_frame) - # end - # when "surf" - # if direction == DIRECTION_DOWN - # apply_sprite_offset(Outfit_Offsets::SURF_OFFSETS_DOWN,current_frame) - # elsif direction == DIRECTION_LEFT - # apply_sprite_offset( Outfit_Offsets::SURF_OFFSETS_LEFT,current_frame) - # elsif direction == DIRECTION_RIGHT - # apply_sprite_offset( Outfit_Offsets::SURF_OFFSETS_RIGHT,current_frame) - # elsif direction == DIRECTION_UP - # apply_sprite_offset( Outfit_Offsets::SURF_OFFSETS_UP,current_frame) - # end - # when "dive" - # if direction == DIRECTION_DOWN - # apply_sprite_offset(Outfit_Offsets::DIVE_OFFSETS_DOWN,current_frame) - # elsif direction == DIRECTION_LEFT - # apply_sprite_offset( Outfit_Offsets::DIVE_OFFSETS_LEFT,current_frame) - # elsif direction == DIRECTION_RIGHT - # apply_sprite_offset( Outfit_Offsets::DIVE_OFFSETS_RIGHT,current_frame) - # elsif direction == DIRECTION_UP - # apply_sprite_offset( Outfit_Offsets::DIVE_OFFSETS_UP,current_frame) - # end - # when "bike" - # if direction == DIRECTION_DOWN - # apply_sprite_offset(Outfit_Offsets::BIKE_OFFSETS_DOWN,current_frame) - # elsif direction == DIRECTION_LEFT - # apply_sprite_offset( Outfit_Offsets::BIKE_OFFSETS_LEFT,current_frame) - # elsif direction == DIRECTION_RIGHT - # apply_sprite_offset( Outfit_Offsets::BIKE_OFFSETS_RIGHT,current_frame) - # elsif direction == DIRECTION_UP - # apply_sprite_offset( Outfit_Offsets::BIKE_OFFSETS_UP,current_frame) - # end - # else - # @sprite.x = @player_sprite.x - @player_sprite.ox - # @sprite.y = @player_sprite.y - @player_sprite.oy - # end - # @sprite.y -= 2 if current_frame % 2 == 1 - # end - -end - - -# class Sprite_Hat < RPG::Sprite -# attr_accessor :filename -# attr_accessor :action -# attr_accessor :hat_sprite -# -# def initialize(player_sprite, filename, action, viewport) -# @player_sprite = player_sprite -# @viewport = viewport -# @hat_sprite = Sprite.new(@viewport) -# @hatBitmap = AnimatedBitmap.new(filename) if pbResolveBitmap(filename) -# @filename = filename -# @hat_sprite.bitmap = @hatBitmap.bitmap if @hatBitmap -# @action = action -# @color = 0 -# @frameWidth = 80 #@hat_sprite.width -# @frameHeight = 80 #@hat_sprite.height / 4 -# @hat_sprite.z = @player_sprite.z + 2 -# echoln(_INTL("init had at z = {1}, player sprite at {2}",@hat_sprite.z,@player_sprite.z)) -# -# #Unused position offset -# # @x_pos_base_offset = 0 -# # @y_pos_base_offset = 0 -# end -# -# def apply_sprite_offset(offsets_array, current_frame) -# @hat_sprite.x += offsets_array[current_frame][0] -# @hat_sprite.y += offsets_array[current_frame][1] -# end -# -# def set_sprite_position(action, direction, current_frame) -# @hat_sprite.x = @player_sprite.x - @player_sprite.ox -# @hat_sprite.y = @player_sprite.y - @player_sprite.oy -# case action -# when "run" -# if direction == DIRECTION_DOWN -# apply_sprite_offset(Outfit_Offsets::RUN_OFFSETS_DOWN, current_frame) -# elsif direction == DIRECTION_LEFT -# apply_sprite_offset(Outfit_Offsets::RUN_OFFSETS_LEFT, current_frame) -# elsif direction == DIRECTION_RIGHT -# apply_sprite_offset(Outfit_Offsets::RUN_OFFSETS_RIGHT, current_frame) -# elsif direction == DIRECTION_UP -# apply_sprite_offset(Outfit_Offsets::RUN_OFFSETS_UP, current_frame) -# end -# when "surf" -# if direction == DIRECTION_DOWN -# apply_sprite_offset(Outfit_Offsets::SURF_OFFSETS_DOWN,current_frame) -# elsif direction == DIRECTION_LEFT -# apply_sprite_offset( Outfit_Offsets::SURF_OFFSETS_LEFT,current_frame) -# elsif direction == DIRECTION_RIGHT -# apply_sprite_offset( Outfit_Offsets::SURF_OFFSETS_RIGHT,current_frame) -# elsif direction == DIRECTION_UP -# apply_sprite_offset( Outfit_Offsets::SURF_OFFSETS_UP,current_frame) -# end -# when "dive" -# if direction == DIRECTION_DOWN -# apply_sprite_offset(Outfit_Offsets::DIVE_OFFSETS_DOWN,current_frame) -# elsif direction == DIRECTION_LEFT -# apply_sprite_offset( Outfit_Offsets::DIVE_OFFSETS_LEFT,current_frame) -# elsif direction == DIRECTION_RIGHT -# apply_sprite_offset( Outfit_Offsets::DIVE_OFFSETS_RIGHT,current_frame) -# elsif direction == DIRECTION_UP -# apply_sprite_offset( Outfit_Offsets::DIVE_OFFSETS_UP,current_frame) -# end -# when "bike" -# if direction == DIRECTION_DOWN -# apply_sprite_offset(Outfit_Offsets::BIKE_OFFSETS_DOWN,current_frame) -# elsif direction == DIRECTION_LEFT -# apply_sprite_offset( Outfit_Offsets::BIKE_OFFSETS_LEFT,current_frame) -# elsif direction == DIRECTION_RIGHT -# apply_sprite_offset( Outfit_Offsets::BIKE_OFFSETS_RIGHT,current_frame) -# elsif direction == DIRECTION_UP -# apply_sprite_offset( Outfit_Offsets::BIKE_OFFSETS_UP,current_frame) -# end -# else -# @hat_sprite.x = @player_sprite.x - @player_sprite.ox -# @hat_sprite.y = @player_sprite.y - @player_sprite.oy -# end -# @hat_sprite.y -= 2 if current_frame % 2 == 1 -# end -# -# def animate(action) -# @action = action -# current_frame = @player_sprite.character.pattern -# direction = @player_sprite.character.direction -# crop_spritesheet(direction) -# set_sprite_position(@action, direction, current_frame) -# adjust_hat_layer() -# end -# -# def update(action, hatFilename,color) -# @hat_sprite.opacity = @player_sprite.opacity if @hatBitmap -# if hatFilename != @filename || color != @color -# if pbResolveBitmap(hatFilename) -# #echoln pbResolveBitmap(hatFilename) -# @hatBitmap = AnimatedBitmap.new(hatFilename,color) -# @hat_sprite.bitmap = @hatBitmap.bitmap -# else -# @hatBitmap = nil -# @hat_sprite.bitmap = nil -# end -# @color =color -# @filename = hatFilename -# end -# animate(action) -# end -# -# def adjust_hat_layer() -# if @hat_sprite.z != @player_sprite.z -# @hat_sprite.z = @player_sprite.z -# end -# end -# -# def crop_spritesheet(direction) -# sprite_x = 0 -# sprite_y = ((direction - 2) / 2) * @frameHeight -# @hat_sprite.src_rect.set(sprite_x, sprite_y, @frameWidth, @frameHeight) -# end -# -# def dispose -# return if @disposed -# @hat_sprite.dispose if @hat_sprite -# @hat_sprite = nil -# @disposed = true -# end -# -# def disposed? -# @disposed -# end -# -# end +end \ No newline at end of file diff --git a/Data/Scripts/005_Sprites/016_Sprite_Player.rb b/Data/Scripts/005_Sprites/016_Sprite_Player.rb index 8cc799248..914ce7fec 100644 --- a/Data/Scripts/005_Sprites/016_Sprite_Player.rb +++ b/Data/Scripts/005_Sprites/016_Sprite_Player.rb @@ -3,12 +3,14 @@ class Sprite_Player < Sprite_Character super @viewport = viewport @outfit_bitmap = nil - @hat_bitmap = nil + # @hat_bitmap = nil + # @hat2_bitmap = nil hatFilename = "" hairFilename = "" @hair = Sprite_Hair.new(self, hairFilename, @character_name, @viewport) @hat = Sprite_Hat.new(self, hatFilename, @character_name, @viewport) + @hat2 = Sprite_Hat.new(self, hatFilename, @character_name, @viewport,3) @previous_skinTone = 0 @@ -30,12 +32,14 @@ class Sprite_Player < Sprite_Character def applyDayNightTone super pbDayNightTint(@hat.sprite) if @hat && @hat.sprite.bitmap + pbDayNightTint(@hat2.sprite) if @hat2 && @hat2.sprite.bitmap pbDayNightTint(@hair.sprite) if @hair && @hair.sprite.bitmap end def opacity=(value) super @hat.sprite.opacity= value if @hat && @hat.sprite.bitmap + @hat2.sprite.opacity= value if @hat2 && @hat2.sprite.bitmap @hair.sprite.opacity= value if @hair && @hair.sprite.bitmap end @@ -46,6 +50,7 @@ class Sprite_Player < Sprite_Character @previous_action = @character_name @hair.animate(@character_name) if @hair @hat.animate(@character_name) if @hat + @hat2.animate(@character_name) if @hat2 return @current_bitmap end @@ -58,22 +63,28 @@ class Sprite_Player < Sprite_Character outfitFilename = getOverworldOutfitFilename(Settings::PLAYER_TEMP_OUTFIT_FALLBACK) if !pbResolveBitmap(outfitFilename) hairFilename = getOverworldHairFilename($Trainer.hair) hatFilename = getOverworldHatFilename($Trainer.hat) + hat2Filename = getOverworldHatFilename($Trainer.hat2) hair_color_shift = $Trainer.hair_color hat_color_shift = $Trainer.hat_color + hat2_color_shift = $Trainer.hat2_color + clothes_color_shift = $Trainer.clothes_color hair_color_shift = 0 if !hair_color_shift hat_color_shift = 0 if !hat_color_shift + hat2_color_shift = 0 if !hat2_color_shift + clothes_color_shift = 0 if !clothes_color_shift @hair.update(@character_name, hairFilename, hair_color_shift) if @hair @hat.update(@character_name, hatFilename, hat_color_shift) if @hat + @hat2.update(@character_name, hat2Filename, hat2_color_shift) if @hat2 if !pbResolveBitmap(outfitFilename) raise "No temp clothes graphics available" end - outfitBitmap = AnimatedBitmap.new(outfitFilename, clothes_color_shift) if pbResolveBitmap(outfitFilename) #pbLoadOutfitBitmap(outfitFilename) if pbResolveBitmap(outfitFilename) + outfitBitmap = AnimatedBitmap.new(outfitFilename, clothes_color_shift) if pbResolveBitmap(outfitFilename) baseBitmap.blt(0, 0, outfitBitmap.bitmap, outfitBitmap.bitmap.rect) if outfitBitmap @previous_action = @character_name return baseBitmap @@ -89,6 +100,7 @@ class Sprite_Player < Sprite_Character def dispose super @hat.dispose if @hat + @hat2.dispose if @hat2 @hair.dispose if @hair end diff --git a/Data/Scripts/015_Trainers and player/004_Player.rb b/Data/Scripts/015_Trainers and player/004_Player.rb index d47ef975b..cb760b883 100644 --- a/Data/Scripts/015_Trainers and player/004_Player.rb +++ b/Data/Scripts/015_Trainers and player/004_Player.rb @@ -10,9 +10,13 @@ class Player < Trainer attr_accessor :skin_tone attr_accessor :clothes attr_accessor :hat + attr_accessor :hat2 + attr_accessor :hair attr_accessor :hair_color attr_accessor :hat_color + attr_accessor :hat2_color + attr_accessor :clothes_color attr_accessor :unlocked_clothes attr_accessor :unlocked_hats @@ -113,6 +117,14 @@ class Player < Trainer refreshPlayerOutfit() end + def hat2=(value) + if value.is_a?(Symbol) + value = HATS[value].id + end + @hat2=value + refreshPlayerOutfit() + end + def hair=(value) if value.is_a?(Symbol) value = HAIRSTYLES[value].id @@ -268,6 +280,8 @@ class Player < Trainer @character_ID = -1 @outfit = 0 @hat = 0 + @hat2 = 0 + @hair = 0 @clothes = 0 @hair_color = 0 @@ -295,6 +309,7 @@ class Player < Trainer @dyed_clothes = {} @favorite_hat = nil + @favorite_hat2 =nil @favorite_clothes = nil @card_background = Settings::DEFAULT_TRAINER_CARD_BG diff --git a/Data/Scripts/050_Outfits/001_OutfitsMain/LayeredClothes.rb b/Data/Scripts/050_Outfits/001_OutfitsMain/LayeredClothes.rb index 59df945e4..0b60faf5b 100644 --- a/Data/Scripts/050_Outfits/001_OutfitsMain/LayeredClothes.rb +++ b/Data/Scripts/050_Outfits/001_OutfitsMain/LayeredClothes.rb @@ -133,28 +133,34 @@ def getCurrentPokeball(allowEasterEgg=true) end def generate_front_trainer_sprite_bitmap_from_appearance(trainerAppearance) - echoln caller echoln trainerAppearance.hat - return generate_front_trainer_sprite_bitmap(false,nil,trainerAppearance.clothes,trainerAppearance.hat, + return generate_front_trainer_sprite_bitmap(false,nil,trainerAppearance.clothes,trainerAppearance.hat,nil, trainerAppearance.hair,trainerAppearance.skin_color, trainerAppearance.hair_color,trainerAppearance.hat_color,trainerAppearance.clothes_color) end -def generate_front_trainer_sprite_bitmap(allowEasterEgg=true, pokeball = nil, clothes_id = nil, hat_id = nil, hair_id = nil, - skin_tone_id = nil, hair_color = nil, hat_color = nil, clothes_color = nil) +def generate_front_trainer_sprite_bitmap(allowEasterEgg=true, pokeball = nil, + clothes_id = nil, hat_id = nil, hat2_id=nil, hair_id = nil, + skin_tone_id = nil, hair_color = nil, hat_color = nil, clothes_color = nil, + hat2_color = nil) echoln hat_id clothes_id = $Trainer.clothes if !clothes_id hat_id = $Trainer.hat if !hat_id + hat2_id = $Trainer.hat if !hat2_id + hair_id = $Trainer.hair if !hair_id skin_tone_id = $Trainer.skin_tone if !skin_tone_id hair_color = $Trainer.hair_color if !hair_color hat_color = $Trainer.hat_color if !hat_color + hat2_color = $Trainer.hat2_color if !hat2_color clothes_color = $Trainer.clothes_color if !clothes_color hairFilename = getTrainerSpriteHairFilename(hair_id) #_INTL(Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_HAIR_FOLDER + "/hair_trainer_{1}", $Trainer.hair) outfitFilename = getTrainerSpriteOutfitFilename(clothes_id) #_INTL(Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_CLOTHES_FOLDER + "/clothes_trainer_{1}", $Trainer.clothes) - hatFilename = getTrainerSpriteHatFilename(hat_id) # _INTL(Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_HAT_FOLDER + "/hat_trainer_{1}", $Trainer.hat) + hatFilename = getTrainerSpriteHatFilename(hat_id) + hat2Filename = getTrainerSpriteHatFilename(hat2_id) + pokeball = getCurrentPokeball(allowEasterEgg) if !pokeball ballFilename = getTrainerSpriteBallFilename(pokeball) if pokeball @@ -162,10 +168,13 @@ def generate_front_trainer_sprite_bitmap(allowEasterEgg=true, pokeball = nil, cl hair_color_shift = hair_color hat_color_shift = hat_color + hat2_color_shift = hat2_color clothes_color_shift = clothes_color hair_color_shift = 0 if !hair_color_shift hat_color_shift = 0 if !hat_color_shift + hat2_color_shift = 0 if !hat2_color_shift + clothes_color_shift = 0 if !clothes_color_shift baseBitmap = AnimatedBitmap.new(baseFilePath) if pbResolveBitmap(baseFilePath) @@ -181,7 +190,8 @@ def generate_front_trainer_sprite_bitmap(allowEasterEgg=true, pokeball = nil, cl outfitBitmap = AnimatedBitmap.new(outfitFilename, clothes_color_shift) if pbResolveBitmap(outfitFilename) #pb hairBitmapWrapper = AnimatedBitmap.new(hairFilename, hair_color_shift) if pbResolveBitmap(hairFilename) - hatBitmap = AnimatedBitmap.new(hatFilename, hat_color_shift) if pbResolveBitmap(hatFilename) #pbLoadOutfitBitmap(hatFilename) if pbResolveBitmap(hatFilename) + hatBitmap = AnimatedBitmap.new(hatFilename, hat_color_shift) if pbResolveBitmap(hatFilename) + hat2Bitmap = AnimatedBitmap.new(hat2Filename, hat2_color_shift) if pbResolveBitmap(hat2Filename) baseBitmap.bitmap = baseBitmap.bitmap.clone if outfitBitmap @@ -193,6 +203,7 @@ def generate_front_trainer_sprite_bitmap(allowEasterEgg=true, pokeball = nil, cl end baseBitmap.bitmap.blt(0, 0, hairBitmapWrapper.bitmap, hairBitmapWrapper.bitmap.rect) if hairBitmapWrapper baseBitmap.bitmap.blt(0, 0, hatBitmap.bitmap, hatBitmap.bitmap.rect) if hatBitmap + baseBitmap.bitmap.blt(0, 0, hat2Bitmap.bitmap, hat2Bitmap.bitmap.rect) if hat2Bitmap baseBitmap.bitmap.blt(44, 42, ballBitmap, ballBitmap.rect) if ballBitmap return baseBitmap diff --git a/Data/Scripts/050_Outfits/UI/TrainerClothesPreview.rb b/Data/Scripts/050_Outfits/UI/TrainerClothesPreview.rb index 4d6d79943..8ee7c1448 100644 --- a/Data/Scripts/050_Outfits/UI/TrainerClothesPreview.rb +++ b/Data/Scripts/050_Outfits/UI/TrainerClothesPreview.rb @@ -1,5 +1,5 @@ class TrainerClothesPreview - attr_writer :pokeball, :clothes, :hat, :hair, :skin_tone, :hair_color, :hat_color, :clothes_color + attr_writer :pokeball, :clothes, :hat, :hat2, :hair, :skin_tone, :hair_color, :hat_color, :clothes_color def initialize(x = 0, y = 0, windowed = true, pokeball = nil) @playerBitmap = nil @@ -15,19 +15,22 @@ class TrainerClothesPreview def resetOutfits() @clothes = $Trainer.clothes @hat = $Trainer.hat + @hat2 = $Trainer.hat2 @hair = $Trainer.hair @skin_tone = $Trainer.skin_tone @hair_color = $Trainer.hair_color @hat_color = $Trainer.hat_color + @hat2_color = $Trainer.hat2_color @clothes_color = $Trainer.clothes_color end def show() @playerBitmap = generate_front_trainer_sprite_bitmap(false, @pokeball, - @clothes, @hat, @hair, + @clothes, + @hat,@hat2, @hair, @skin_tone, - @hair_color, @hat_color, @clothes_color) + @hair_color, @hat_color, @clothes_color, @hat2_color) initialize_preview() end diff --git a/Data/Scripts/050_Outfits/UI/clothesShop/ClothesShop.rb b/Data/Scripts/050_Outfits/UI/clothesShop/ClothesShop.rb index af4343052..96b6c4d72 100644 --- a/Data/Scripts/050_Outfits/UI/clothesShop/ClothesShop.rb +++ b/Data/Scripts/050_Outfits/UI/clothesShop/ClothesShop.rb @@ -71,8 +71,38 @@ def hairShop(outfits_list = [],free=false, customMessage=nil) genericOutfitsShopMenu(stock, :HAIR, true,!free,customMessage) end + + +SWAP_HAT_POSITIONS_CAPTION = "Switch hats position" +def set_hat_adapter_options(adapter) + slot1_hat = $Trainer.hat ? "Swap #{get_hat_by_id($Trainer.hat).name}" : "(Empty slot)" + slot2_hat = $Trainer.hat2 ? "Swap #{get_hat_by_id($Trainer.hat2).name}" : "(Empty slot)" + options = [slot1_hat,slot2_hat] + options << SWAP_HAT_POSITIONS_CAPTION if $Trainer.hat && $Trainer.hat2 + options << "Cancel" + hat_options_choice = optionsMenu(options) + if options[hat_options_choice] == SWAP_HAT_POSITIONS_CAPTION + hat1 = $Trainer.hat + hat2 = $Trainer.hat2 + $Trainer.hat = hat2 + $Trainer.hat2 = hat1 + pbSEPlay("GUI naming tab swap start") + return set_hat_adapter_options(adapter) + end + if hat_options_choice == options.length #cancel + return nil + end + is_secondary = hat_options_choice ==1 + adapter.set_secondary_hat(is_secondary) + return adapter +end + def openSelectOutfitMenu(stock = [], itemType) adapter = getAdapter(itemType, stock, false) + if adapter.is_a?(HatsMartAdapter) + adapter = set_hat_adapter_options(adapter) + return if !adapter + end view = ClothesShopView.new() presenter = ClothesShopPresenter.new(view, stock, adapter) presenter.pbBuyScreen diff --git a/Data/Scripts/050_Outfits/UI/clothesShop/HatsMartAdapter.rb b/Data/Scripts/050_Outfits/UI/clothesShop/HatsMartAdapter.rb index c22a250c8..31b3c08d0 100644 --- a/Data/Scripts/050_Outfits/UI/clothesShop/HatsMartAdapter.rb +++ b/Data/Scripts/050_Outfits/UI/clothesShop/HatsMartAdapter.rb @@ -2,23 +2,38 @@ class HatsMartAdapter < OutfitsMartAdapter DEFAULT_NAME = "[unknown]" DEFAULT_DESCRIPTION = "A headgear that trainers can wear." - def initialize(stock = nil, isShop = nil) - super + def initialize(stock = nil, isShop = nil, isSecondaryHat = false) + super(stock,isShop) + @is_secondary_hat = isSecondaryHat end def toggleEvent(item) if !@isShop - $Trainer.hat = nil - @worn_clothes = nil + if @is_secondary_hat + $Trainer.hat2 = nil + @worn_clothes = nil - if pbConfirmMessage(_INTL("Do you want to take off your hat?")) + if pbConfirmMessage(_INTL("Do you want to take off your hat?")) + $Trainer.hat2 = nil + @worn_clothes = nil + end + else $Trainer.hat = nil @worn_clothes = nil + if pbConfirmMessage(_INTL("Do you want to take off your hat?")) + $Trainer.hat = nil + @worn_clothes = nil + + end end end end + def set_secondary_hat(value) + @is_secondary_hat = value + end + def toggleText() return # return if @isShop @@ -48,14 +63,27 @@ class HatsMartAdapter < OutfitsMartAdapter end def updateTrainerPreview(item, previewWindow) - if item.is_a?(Outfit) - previewWindow.hat = item.id - $Trainer.hat = item.id# unless $Trainer.hat==nil - set_dye_color(item,previewWindow) + if @is_secondary_hat + if item.is_a?(Outfit) + previewWindow.hat2 = item.id + $Trainer.hat2 = item.id# unless $Trainer.hat==nil + set_dye_color(item,previewWindow) + else + $Trainer.hat2=nil + previewWindow.hat2= nil + end else - $Trainer.hat=nil - previewWindow.hat= nil + if item.is_a?(Outfit) + previewWindow.hat = item.id + $Trainer.hat = item.id# unless $Trainer.hat==nil + set_dye_color(item,previewWindow) + else + $Trainer.hat=nil + previewWindow.hat= nil + end end + + pbRefreshSceneMap previewWindow.updatePreview() end @@ -91,7 +119,7 @@ class HatsMartAdapter < OutfitsMartAdapter def addItem(item) return unless item.is_a?(Outfit) - changed_clothes = obtainHat(item.id) + changed_clothes = obtainHat(item.id,@is_secondary_hat) if changed_clothes @worn_clothes = item.id end @@ -103,13 +131,23 @@ class HatsMartAdapter < OutfitsMartAdapter def putOnOutfit(item) return unless item.is_a?(Outfit) - putOnHat(item.id) + if @is_secondary_hat + echoln "broder" + putOnSecondaryHat(item.id) + else + putOnHat(item.id) + end @worn_clothes = item.id end def reset_player_clothes() - $Trainer.hat = @worn_clothes - $Trainer.hat_color = $Trainer.dyed_hats[@worn_clothes] if $Trainer.dyed_hats && $Trainer.dyed_hats[@worn_clothes] + if @is_secondary_hat + $Trainer.hat2 = @worn_clothes + $Trainer.hat2_color = $Trainer.dyed_hats[@worn_clothes] if $Trainer.dyed_hats && $Trainer.dyed_hats[@worn_clothes] + else + $Trainer.hat = @worn_clothes + $Trainer.hat_color = $Trainer.dyed_hats[@worn_clothes] if $Trainer.dyed_hats && $Trainer.dyed_hats[@worn_clothes] + end end def get_unlocked_items_list() diff --git a/Data/Scripts/050_Outfits/utils/OutfitsGameplayUtils.rb b/Data/Scripts/050_Outfits/utils/OutfitsGameplayUtils.rb index 5224b63af..d9cea0b51 100644 --- a/Data/Scripts/050_Outfits/utils/OutfitsGameplayUtils.rb +++ b/Data/Scripts/050_Outfits/utils/OutfitsGameplayUtils.rb @@ -6,7 +6,7 @@ def obtainNewClothes(outfit_id) return obtainClothes(outfit_id) end -def obtainHat(outfit_id) +def obtainHat(outfit_id,secondary=false) echoln "obtained new hat: " + outfit_id outfit = get_hat_by_id(outfit_id) if !outfit @@ -16,7 +16,8 @@ def obtainHat(outfit_id) $Trainer.unlocked_hats << outfit_id if !$Trainer.unlocked_hats.include?(outfit_id) obtainOutfitMessage(outfit) if pbConfirmMessage("Would you like to put it on right now?") - putOnHat(outfit_id, false) + putOnHat(outfit_id, false, ) if !secondary + putOnSecondaryHat(outfit_id, false, ) if secondary return true end return false @@ -70,6 +71,7 @@ def putOnHat(outfit_id, silent = false) $Trainer.dyed_hats= {} if ! $Trainer.dyed_hats $Trainer.last_worn_hat = $Trainer.hat outfit = get_hat_by_id(outfit_id) + $Trainer.hat = outfit_id dye_color = $Trainer.dyed_hats[outfit_id] @@ -83,6 +85,25 @@ def putOnHat(outfit_id, silent = false) putOnOutfitMessage(outfit) if !silent end +def putOnSecondaryHat(outfit_id, silent = false) + $Trainer.dyed_hats= {} if ! $Trainer.dyed_hats + $Trainer.last_worn_hat = $Trainer.hat2 + outfit = get_hat_by_id(outfit_id) + + $Trainer.hat2 = outfit_id + + dye_color = $Trainer.dyed_hats[outfit_id] + if dye_color + $Trainer.hat2_color = dye_color + else + $Trainer.hat2_color = nil + end + + $game_map.refreshPlayerOutfit() + putOnOutfitMessage(outfit) if !silent +end + + def putOnHairFullId(full_outfit_id) outfit_id = getSplitHairFilenameAndVersionFromID(full_outfit_id)[1] outfit = get_hair_by_id(outfit_id) @@ -306,6 +327,7 @@ end def randomizePlayerOutfit() $Trainer.hat = $PokemonGlobal.hats_data.keys.sample + $Trainer.hat2 = $PokemonGlobal.hats_data.keys.sample $Trainer.clothes = $PokemonGlobal.clothes_data.keys.sample $Trainer.hat_color = rand(2)==0 ? rand(255) : 0 $Trainer.clothes_color = rand(2)==0 ? rand(255) : 0 diff --git a/Data/System.rxdata b/Data/System.rxdata index 885503afd..9cb85ce8f 100644 Binary files a/Data/System.rxdata and b/Data/System.rxdata differ diff --git a/Data/sprites/sprites_rate_limit.log b/Data/sprites/sprites_rate_limit.log index 2d41d4f31..56f94e049 100644 --- a/Data/sprites/sprites_rate_limit.log +++ b/Data/sprites/sprites_rate_limit.log @@ -1,2 +1,2 @@ -1739897397 -1739897397 \ No newline at end of file +1739937414 +1739937415 \ No newline at end of file diff --git a/Data/sprites/updated_spritesheets_cache b/Data/sprites/updated_spritesheets_cache index 53a035c10..82abf40e7 100644 --- a/Data/sprites/updated_spritesheets_cache +++ b/Data/sprites/updated_spritesheets_cache @@ -132,3 +132,84 @@ Graphics/CustomBattlers/spritesheets/spritesheets_base/105.png Graphics/CustomBattlers/spritesheets/spritesheets_custom/105/105.png Graphics/CustomBattlers/spritesheets/spritesheets_base/14.png Graphics/CustomBattlers/spritesheets/spritesheets_custom/381/381b.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/123.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/430.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/430/430.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/296.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/296/296.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/3.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/218.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/218/218.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/244.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/473.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/287.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/148.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/148/148a.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/190.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/339/339.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/239.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/449.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/449/449.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/415.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/279.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/97/97.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/156.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/84.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/22.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/22/22.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/404.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/104.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/210.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/210/210.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/174.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/190/190.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/149.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/19.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/19/19.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/72.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/358.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/358/358.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/126.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/194.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/194/194.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/94.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/262.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/51.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/375.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/375/375.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/68.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/448.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/423.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/423/423.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/113.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/456.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/196.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/196/196.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/403.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/343.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/127.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/12.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/12/12.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/313.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/273.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/273/273.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/168.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/344.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/111.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/111/111.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/294.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/470.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/470/470.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/86.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/86/86a.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/107.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/242.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/242/242.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/278.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/28.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/28/28.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/436.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/6.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/6/6.png +Graphics/CustomBattlers/spritesheets/spritesheets_base/282.png +Graphics/CustomBattlers/spritesheets/spritesheets_custom/282/282.png