update 6.7

This commit is contained in:
chardub
2025-09-28 15:53:01 -04:00
parent ef5e023ae0
commit 318ff90d8d
696 changed files with 111759 additions and 198230 deletions

View File

@@ -44,6 +44,8 @@ HAT_SILPHSCOPE = "silphscope"
HAT_BRENDAN = "brendanRSE"
HAT_MAY = "mayRSE"
HAT_ORAN = "orange"
HAT_FLOWERS = "grassexpert"
HAT_LUCHA = "hawluchamask"
HAT_PARASHROOM = "parashroom"
@@ -156,6 +158,7 @@ HAIR_LATIAS="SpecialLatias"
HAIR_GARDEVOIR="gardevoir"
HAIR_EEVEE="eeveetail"
HAIR_LEAFEON="leafeonbob"
HAIR_ORICORIO="oricoriopuffs"
HAIR_BRENDAN = "buzzcut"
HAIR_MAY = "may"

View File

@@ -85,7 +85,7 @@ class CharacterSelectMenuPresenter
update_cursor(@current_index)
@name = getDefaultName if @name == ""
updateDisplayedName(getOptionIndex(OPTION_NAME))
cmd = pbMessage("Is this information correct?", [_INTL("Yes"), _INTL("No")])
cmd = pbMessage(_INTL("Is this information correct?"), [_INTL("Yes"), _INTL("No")])
if cmd == 0
pbSEPlay("GUI naming confirm", 80, 100)
#pbMessage("You will be able to customize your appearance further while playing")

View File

@@ -9,11 +9,19 @@ class PokemonHatPresenter
@x_pos = pokemon.hat_x ? pokemon.hat_x : 0
@y_pos = pokemon.hat_y ? pokemon.hat_y : 0
@hat_mirrored_horizontal = pokemon.hat_mirrored_horizontal ? pokemon.hat_mirrored_horizontal : false
@hat_mirrored_vertical = pokemon.hat_mirrored_vertical ? pokemon.hat_mirrored_vertical : false
@hat_id = pokemon.hat ? pokemon.hat : 1
@viewport = nil
@previewwindow = nil
@original_pokemon_bitmap = nil
@min_x, @max_x = -64, 88
@min_y, @max_y = -120, 120 # Safe symmetric range
@hatBitmapWrapper = AnimatedBitmap.new(@hatFilename, 0) if pbResolveBitmap(@hatFilename)
end
def pbStartScreen
@@ -31,6 +39,8 @@ class PokemonHatPresenter
def updatePokemonHatPosition()
@pokemon.hat = @hat_id
@pokemon.hat_mirrored_horizontal=@hat_mirrored_horizontal
@pokemon.hat_mirrored_vertical=@hat_mirrored_vertical
@pokemon.hat_x = @x_pos
@pokemon.hat_y = @y_pos
end
@@ -49,6 +59,9 @@ class PokemonHatPresenter
Input.update
@hat_id = selector.selectNextOutfit(@hat_id, 1, selector.hats_list, [], false, "hat",$Trainer.unlocked_hats,false) if Input.trigger?(Input::RIGHT)
@hat_id = selector.selectNextOutfit(@hat_id, -1, selector.hats_list, [], false, "hat",$Trainer.unlocked_hats,false) if Input.trigger?(Input::LEFT)
flipHatVertically if Input.trigger?(Input::JUMPUP)
flipHatHorizontally if Input.trigger?(Input::JUMPDOWN)
resetHatPosition if Input.trigger?(Input::SPECIAL)
break if Input.trigger?(Input::USE)
return false if Input.trigger?(Input::BACK)
@view.update()
@@ -60,15 +73,18 @@ class PokemonHatPresenter
def position_hat
@view.display_move_arrows
min_x, max_x = -64, 88
min_y, max_y = -20, 140
loop do
Graphics.update
Input.update
@x_pos += PIXELS_PER_MOVEMENT if Input.repeat?(Input::RIGHT) && @x_pos < max_x
@x_pos -= PIXELS_PER_MOVEMENT if Input.repeat?(Input::LEFT) && @x_pos > min_x
@y_pos += PIXELS_PER_MOVEMENT if Input.repeat?(Input::DOWN) && @y_pos < max_y
@y_pos -= PIXELS_PER_MOVEMENT if Input.repeat?(Input::UP) && @y_pos > min_y
@x_pos += PIXELS_PER_MOVEMENT if Input.repeat?(Input::RIGHT) && @x_pos < @max_x
@x_pos -= PIXELS_PER_MOVEMENT if Input.repeat?(Input::LEFT) && @x_pos > @min_x
@y_pos += PIXELS_PER_MOVEMENT if Input.repeat?(Input::DOWN) && @y_pos < @max_y
@y_pos -= PIXELS_PER_MOVEMENT if Input.repeat?(Input::UP) && @y_pos > @min_y
flipHatHorizontally if Input.trigger?(Input::JUMPDOWN)
flipHatVertically if Input.trigger?(Input::JUMPUP)
resetHatPosition if Input.trigger?(Input::SPECIAL)
break if Input.trigger?(Input::USE)
return false if Input.trigger?(Input::BACK)
@view.update()
@@ -77,6 +93,46 @@ class PokemonHatPresenter
return true
end
def flipHatHorizontally()
@hat_mirrored_horizontal = !@hat_mirrored_horizontal
pbSEPlay("GUI storage pick up")
@hatBitmapWrapper.mirror_horizontally
pbWait(8)
end
def flipHatVertically()
pbSEPlay("GUI storage pick up")
@hat_mirrored_vertical = !@hat_mirrored_vertical
@hatBitmapWrapper.mirror_vertically
# Compensate for visual shift after vertical flip
hat_height = @hatBitmapWrapper.bitmap.height
offset = hat_height - 40
if @hat_mirrored_vertical
@y_pos -= offset
else
@y_pos += offset
end
@y_pos = [[@y_pos, @min_y].max, @max_y].min
pbWait(8)
end
def resetHatPosition
if pbConfirmMessage(_INTL("Reset hat position?"))
pbSEPlay("GUI naming tab swap end")
@x_pos=0
@y_pos=0
@hatBitmapWrapper.mirror_horizontally if @hat_mirrored_horizontal
@hatBitmapWrapper.mirror_vertically if @hat_mirrored_vertical
@hat_mirrored_horizontal = false
@hat_mirrored_vertical = false
end
end
def initialize_bitmap()
spriteLoader = BattleSpriteLoader.new
@@ -94,9 +150,9 @@ class PokemonHatPresenter
def getPokemonHatBitmap()
@hatFilename = getTrainerSpriteHatFilename(@hat_id)
hatBitmapWrapper = AnimatedBitmap.new(@hatFilename, 0) if pbResolveBitmap(@hatFilename)
@hatBitmapWrapper = AnimatedBitmap.new(@hatFilename, 0) if pbResolveBitmap(@hatFilename)
pokemon_bitmap = @original_pokemon_bitmap.bitmap.clone
pokemon_bitmap.blt(@x_pos, @y_pos, hatBitmapWrapper.bitmap, hatBitmapWrapper.bitmap.rect) if hatBitmapWrapper
pokemon_bitmap.blt(@x_pos, @y_pos, @hatBitmapWrapper.bitmap, @hatBitmapWrapper.bitmap.rect) if @hatBitmapWrapper
return pokemon_bitmap
end

View File

@@ -16,7 +16,7 @@ class ClothesShopPresenter < PokemonMartScreen
def dyeClothes()
original_color = $Trainer.clothes_color
options = ["Shift up", "Shift down", "Reset", "Confirm", "Never Mind"]
options = [_INTL("Shift up"), _INTL("Shift down"), _INTL("Reset"), _INTL("Confirm"), _INTL("Never Mind")]
previous_input = 0
ret = false
while (true)
@@ -50,13 +50,13 @@ class ClothesShopPresenter < PokemonMartScreen
# returns true if should stay in the menu
def playerClothesActionsMenu(item)
cmd_wear = "Wear"
cmd_dye = "Dye Kit"
cmd_wear = _INTL("Wear")
cmd_dye = _INTL("Dye Kit")
options = []
options << cmd_wear
options << cmd_dye if $PokemonBag.pbHasItem?(:CLOTHESDYEKIT)
options << "Cancel"
choice = pbMessage("What would you like to do?", options, -1)
options << _INTL("Cancel")
choice = pbMessage(_INTL("What would you like to do?"), options, -1)
if options[choice] == cmd_wear
putOnClothes(item,false)
@@ -77,11 +77,11 @@ class ClothesShopPresenter < PokemonMartScreen
boolean_changes_detected = @adapter.player_changed_clothes?
return true if !boolean_changes_detected
pbPlayCancelSE
cmd_confirm = "Set outfit"
cmd_discard = "Discard changes"
cmd_cancel = "Cancel"
cmd_confirm = _INTL("Set outfit")
cmd_discard = _INTL("Discard changes")
cmd_cancel = _INTL("Cancel")
options = [cmd_discard,cmd_confirm,cmd_cancel]
choice = pbMessage("You have unsaved changes!",options,3)
choice = pbMessage(_INTL("You have unsaved changes!"),options,3)
case options[choice]
when cmd_confirm
@adapter.putOnSelectedOutfit

View File

@@ -81,7 +81,7 @@ class ClothesShopPresenter < PokemonMartScreen
def dyeOptions(secondary_hat=false,item)
original_color = secondary_hat ? $Trainer.hat2_color : $Trainer.hat_color
options = ["Shift up", "Shift down", "Reset", "Confirm", "Never Mind"]
options = [_INTL("Shift up"), _INTL("Shift down"), _INTL("Reset"), _INTL("Confirm"), _INTL("Never Mind")]
previous_input = 0
while (true)
choice = pbShowCommands(nil, options, options.length, previous_input,200)
@@ -125,14 +125,14 @@ class ClothesShopPresenter < PokemonMartScreen
end
def playerHatActionsMenu(item)
cmd_confirm = "Confirm"
cmd_remove = "Remove hat"
cmd_cancel = "Cancel"
cmd_dye = "Dye Kit"
cmd_swap = "Swap hat positions"
cmd_confirm = _INTL("Confirm")
cmd_remove = _INTL("Remove hat")
cmd_cancel = _INTL("Cancel")
cmd_dye = _INTL("Dye Kit")
cmd_swap = _INTL("Swap hat positions")
options = build_options_menu(item,cmd_confirm,cmd_remove,cmd_dye,cmd_swap,cmd_cancel)
choice = pbMessage("What would you like to do?", options, -1,nil,0)
choice = pbMessage(_INTL("What would you like to do?"), options, -1,nil,0)
if options[choice] == cmd_remove
removeHat(item)
return true

View File

@@ -5,7 +5,7 @@ BASE_TRAINER_FOLDER = "trainer"
def getBaseOverworldSpriteFilename(action = "walk", skinTone = "default")
base_path = Settings::PLAYER_GRAPHICS_FOLDER + BASE_FOLDER + "/" + BASE_OVERWORLD_FOLDER
dynamic_path = _INTL("/{1}/{2}_{1}", skinTone, action)
dynamic_path = "/#{skinTone}/#{action}_#{skinTone}"
full_path = base_path + dynamic_path
return full_path if pbResolveBitmap(full_path)
return getBaseOverworldSpriteFilename(action) if skinTone != "default" #try again with default skintone
@@ -14,7 +14,7 @@ end
def getBaseTrainerSpriteFilename(skinTone = "default")
base_path = Settings::PLAYER_GRAPHICS_FOLDER + BASE_FOLDER + "/" + BASE_TRAINER_FOLDER
dynamic_path = _INTL("/{1}_{2}", BASE_TRAINER_FOLDER, skinTone)
dynamic_path = "/#{BASE_TRAINER_FOLDER}_#{skinTone}"
full_path = base_path + dynamic_path
return full_path if pbResolveBitmap(full_path)
return getBaseTrainerSpriteFilename() #default skintone
@@ -28,8 +28,8 @@ end
def getOverworldOutfitFilename(outfit_id, action="walk")
base_path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_CLOTHES_FOLDER
dynamic_path = _INTL("/{1}/", outfit_id)
filename = _INTL(Settings::PLAYER_CLOTHES_FOLDER + "_{1}_{2}", action, outfit_id)
dynamic_path = "/#{outfit_id}/"
filename = Settings::PLAYER_CLOTHES_FOLDER + "_#{action}_#{outfit_id}"
full_path = base_path + dynamic_path + filename
#echoln full_path
return full_path
@@ -66,7 +66,7 @@ def getSplitHairFilenameAndVersionFromID(hairstyle_id)
end
def getFullHairId(hairstyle,version)
return _INTL("{1}_{2}",version,hairstyle)
return "#{version}_#{hairstyle}"
end
@@ -76,8 +76,8 @@ def getOverworldHairFilename(hairstyle_id)
version= hairstyle_split[-2]
base_path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_HAIR_FOLDER
dynamic_path = _INTL("/{1}/", name)
filename = _INTL(Settings::PLAYER_HAIR_FOLDER + "_{1}_{2}",version, name)
dynamic_path = "/#{name}/"
filename = Settings::PLAYER_HAIR_FOLDER + "_#{version}_#{name}"
full_path = base_path + dynamic_path + filename
return full_path
end
@@ -91,8 +91,8 @@ def getTrainerSpriteHairFilename(hairstyle_id)
base_path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_HAIR_FOLDER
dynamic_path = _INTL("/{1}/", name)
filename = _INTL(Settings::PLAYER_HAIR_FOLDER + "_trainer_{1}_{2}",version, name)
dynamic_path = "/#{name}/"
filename = Settings::PLAYER_HAIR_FOLDER + "_trainer_#{version}_#{name}"
full_path = base_path + dynamic_path + filename
return full_path
end
@@ -105,16 +105,16 @@ end
def getOverworldHatFilename(hat_id)
base_path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_HAT_FOLDER
dynamic_path = _INTL("/{1}/", hat_id)
filename = _INTL(Settings::PLAYER_HAT_FOLDER + "_{1}", hat_id)
dynamic_path = "/#{hat_id}/"
filename = Settings::PLAYER_HAT_FOLDER + "_#{hat_id}"
full_path = base_path + dynamic_path + filename
return full_path
end
def getTrainerSpriteHatFilename(hat_id)
base_path = Settings::PLAYER_GRAPHICS_FOLDER + Settings::PLAYER_HAT_FOLDER
dynamic_path = _INTL("/{1}/", hat_id)
filename = _INTL(Settings::PLAYER_HAT_FOLDER + "_trainer_{1}", hat_id)
dynamic_path = "/#{hat_id}/"
filename = Settings::PLAYER_HAT_FOLDER + "_trainer_#{hat_id}"
full_path = base_path + dynamic_path + filename
return full_path
end

View File

@@ -10,12 +10,12 @@ def obtainHat(outfit_id,secondary=false)
echoln "obtained new hat: " + outfit_id
outfit = get_hat_by_id(outfit_id)
if !outfit
pbMessage(_INTL("The hat #{outfit_id} is invalid."))
pbMessage(_INTL("The hat {1} is invalid.", outfit_id))
return
end
$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?")
if pbConfirmMessage(_INTL("Would you like to put it on right now?"))
putOnHat(outfit_id, false, false) if !secondary
putOnHat(outfit_id, false, true) if secondary
return true
@@ -28,7 +28,7 @@ def unlockHat(outfit_id)
echoln "obtained new hat: " + outfit_id
outfit = get_hat_by_id(outfit_id)
if !outfit
pbMessage(_INTL("The hat #{outfit_id} is invalid."))
pbMessage(_INTL("The hat {1} is invalid.", outfit_id))
return
end
$Trainer.unlocked_hats << outfit_id if !$Trainer.unlocked_hats.include?(outfit_id)
@@ -39,13 +39,13 @@ def obtainClothes(outfit_id)
echoln "obtained new clothes: " + outfit_id
outfit = get_clothes_by_id(outfit_id)
if !outfit
pbMessage(_INTL("The clothes #{outfit_id} are invalid."))
pbMessage(_INTL("The clothes {1} are invalid.", outfit_id))
return
end
return if !outfit
$Trainer.unlocked_clothes << outfit_id if !$Trainer.unlocked_clothes.include?(outfit_id)
obtainOutfitMessage(outfit)
if pbConfirmMessage("Would you like to put it on right now?")
if pbConfirmMessage(_INTL("Would you like to put it on right now?"))
putOnClothes(outfit_id)
return true
end
@@ -56,7 +56,7 @@ def obtainNewHairstyle(full_outfit_id)
split_outfit_id = getSplitHairFilenameAndVersionFromID(full_outfit_id)
hairstyle_id = split_outfit_id[1]
hairstyle = get_hair_by_id(hairstyle_id)
musical_effect = "Key item get"
musical_effect = _INTL("Key item get")
pbMessage(_INTL("\\me[{1}]Your hairstyle was changed to \\c[1]{2}\\c[0] hairstyle!\\wtnp[30]", musical_effect, hairstyle.name))
return true
end
@@ -152,7 +152,7 @@ end
def obtainOutfitMessage(outfit)
pictureViewport = showOutfitPicture(outfit)
musical_effect = "Key item get"
musical_effect = _INTL("Key item get")
pbMessage(_INTL("\\me[{1}]You obtained a \\c[1]{2}\\c[0]!\\wtnp[30]", musical_effect, outfit.name))
pictureViewport.dispose if pictureViewport
end
@@ -274,6 +274,22 @@ def export_current_outfit()
Input.clipboard = exportedString
end
def export_current_outfit_to_json
appearance = {
skin_color: $Trainer.skin_tone || 0,
hat: $Trainer.hat || nil,
hat2: $Trainer.hat2 || nil,
clothes: $Trainer.clothes,
hair: $Trainer.hair,
hair_color: $Trainer.hair_color || 0,
clothes_color: $Trainer.clothes_color || 0,
hat_color: $Trainer.hat_color || 0,
hat2_color: $Trainer.hat2_color || 0
}
return appearance
end
def clearEventCustomAppearance(event_id)
return if !$scene.is_a?(Scene_Map)
event_sprite = $scene.spriteset.character_sprites[@event_id]
@@ -288,7 +304,7 @@ end
def setEventAppearance(event_id, trainerAppearance)
return if !$scene.is_a?(Scene_Map)
event_sprite = $scene.spriteset.character_sprites[@event_id]
event_sprite = $scene.spriteset.character_sprites[event_id]
for sprite in $scene.spriteset.character_sprites
if sprite.character.id == event_id
event_sprite = sprite